Unity中的2D飞行模拟器物理

时间:2015-02-28 16:20:27

标签: c# unity3d 2d physics

我想在Unity中使用其2D引擎实现一个简单(但尽可能逼真)的2D飞行模拟器。

我已经采取了一些来源并试图编译我自己的(没有成功)...我必须承认我是一个数学和c#newbie;原谅我的无知......

理想情况下,我希望实现这样的目标:

http://runway.countlessprojects.com/prototype/index.html

欢迎任何想法/更正/建议

using UnityEngine;
using System.Collections;

public class FlightControl : MonoBehaviour {

    public float energy;
    public float roll;
    public float tilt;
    public float yaw;
    public float airspeed;
    public float fall;
    public float tip;
    Rigidbody2D rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Start () {
    }

    void Update () {
        energy = transform.position.y + GetComponent<Rigidbody2D>().velocity.magnitude;
    }

    void FixedUpdate () {

        tilt = Mathf.Clamp (energy / 100, -8f, 5f);
        tilt /= Time.deltaTime * 10;

        if (Input.GetButton("Jump")) {
            GetComponent<Rigidbody2D>().AddForce((Vector2)transform.up * Time.deltaTime * 10000);
        }
        transform.rotation = Quaternion.Euler(0, 0, 270+Mathf.Rad2Deg * Mathf.Atan2(rb.velocity.y, rb.velocity.x));

        if (((Vector2)transform.forward + GetComponent<Rigidbody2D>().velocity.normalized).magnitude < 1.4)
            tilt += 1f;

        if (tilt != 0)
            transform.Rotate (new Vector3 (0f, 0f, tilt * Time.deltaTime));

        GetComponent<Rigidbody2D>().velocity -= Vector2.up * Time.deltaTime;

        // Velocity
        Vector2 vertvel = GetComponent<Rigidbody2D>().velocity - (Vector2)Vector3.ProjectOnPlane (transform.up, GetComponent<Rigidbody2D>().velocity);
        fall = vertvel.magnitude;
        GetComponent<Rigidbody2D>().velocity -= vertvel * Time.deltaTime;
        GetComponent<Rigidbody2D>().velocity += vertvel.magnitude * (Vector2)transform.right * Time.deltaTime / 10;

        // Drag
        Vector2 forwardDrag = GetComponent<Rigidbody2D>().velocity - (Vector2)Vector3.ProjectOnPlane ((Vector2)transform.right, GetComponent<Rigidbody2D>().velocity);
        GetComponent<Rigidbody2D>().AddForce (forwardDrag * forwardDrag.magnitude * Time.deltaTime / 1000);

        airspeed = GetComponent<Rigidbody2D>().velocity.magnitude;

    }
}

0 个答案:

没有答案