Neodrop писал(а):Debug.DrawLine()
или средствами класса GL
/* Класс описывающий упровление самолётом. */
using UnityEngine;
using System.Collections;
[RequireComponent (typeof (Rigidbody))]
public class FlyControls : MonoBehaviour
{
//PUBLIC
public float speed = 7.0F;
public float gravity = 9.8F;
public float mass = 1000.0F;
//PRIVATE
private float thrust = 0.0F; //Тяга двигателя
private float lforce = 0.0F; //Подёмная сила
private float drag = 0.0F; //Воздушное сопротивление
private float clift = 0.0F; //Коэффициент подъемной силы
private float airdensity = 1.0F; //Плотность воздуха
private float wingarea = 1.0F; //Площадь крыла
private float rul = 0.0F;
private float rul2 = 0.0F;
void Start()
{
rigidbody.mass = mass;
}
void FixedUpdate ()
{
rul = Input.GetAxisRaw ("Horizontal");
rul2 = Input.GetAxisRaw ("Vertical");
if (Input.GetButton ( "Jump" ))
{
thrust = 3.5F;
}
else
{
thrust = 0.0F;
}
//lforce = clift * ((airdensity * (rigidbody.velocity.z * rigidbody.velocity.z)) * 0.5F ) * wingarea;
lforce = thrust * (rigidbody.velocity.magnitude * 0.225F); //Это тестовая формула, для подъёмной силы, но она совершенна не правельная.
rigidbody.AddRelativeTorque ( new Vector3 ( 0.0F, 1.0F, 0.0F ) * rul * Time.deltaTime, ForceMode.VelocityChange);
rigidbody.AddRelativeTorque ( new Vector3 ( 1.0F, 0.0F, 0.0F ) * rul2 * Time.deltaTime, ForceMode.VelocityChange);
rigidbody.AddRelativeForce( new Vector3( 0.0F, 0.0F, 1.0F ) * thrust * Time.deltaTime, ForceMode.VelocityChange);
rigidbody.AddRelativeForce( new Vector3( 0.0F, 1.0F, 0.0F ) * lforce * Time.deltaTime, ForceMode.VelocityChange);
}
void Update()
{
//Draw Debug Line
//XYZ
Debug.DrawLine( new Vector3 ( 0.0F, 0.0F, 0.0F ), new Vector3 ( 3.0F, 0.0F, 0.0F ), Color.red);
Debug.DrawLine( new Vector3 ( 0.0F, 0.0F, 0.0F ), new Vector3 ( 0.0F, 3.0F, 0.0F ), Color.green);
Debug.DrawLine( new Vector3 ( 0.0F, 0.0F, 0.0F ), new Vector3 ( 0.0F, 0.0F, 3.0F ), Color.blue);
//Позицыя самолёта
Debug.DrawLine( transform.position, transform.position + new Vector3 ( 6.0F, 0.0F, 0.0F ), Color.red);
Debug.DrawLine( transform.position, transform.position + new Vector3 ( 0.0F, 6.0F, 0.0F ), Color.green);
Debug.DrawLine( transform.position, transform.position + new Vector3 ( 0.0F, 0.0F, 6.0F ), Color.blue);
//Скорость
Debug.DrawLine( transform.position, transform.position - rigidbody.velocity, Color.cyan);
}
void OnGUI()
{
GUILayout.Label(" Position Fly: " + transform.position.ToString());
GUILayout.Label(" Velocity Fly: " + rigidbody.velocity.ToString());
GUILayout.Label(" Velocity Fly magnitude: " + rigidbody.velocity.magnitude.ToString());
GUILayout.Label(" Lifting force: " + lforce.ToString());
GUILayout.Label(" Thrust: " + thrust.ToString());
}
}
up as Vector3 = self.transform.TransformDirection(Vector3.up)
right as Vector3 = self.transform.TransformDirection(Vector3.right)
forward as Vector3 = self.transform.TransformDirection(Vector3.forward)
ffinder писал(а):например так можно узнать вектора (c Boo на C# переведешь)
- Код: Выделить всё
up as Vector3 = self.transform.TransformDirection(Vector3.up)
right as Vector3 = self.transform.TransformDirection(Vector3.right)
forward as Vector3 = self.transform.TransformDirection(Vector3.forward)
угол атаки крыла ты задаешь сам. изначально он 0, когда тянешь штурвал на себя - увеличивай, от себя - уменьшай.
ffinder писал(а):неплохо, он летает!
только теней таких быть не может. небо вокруг тоже свет дает.
Neodrop писал(а):А чего окошко такое маленькое?
wild_r писал(а):Насчет угла атаки - у вас же есть углы модели относительно центра мира, нужно узнать угол потока и вычесть.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8