1. 程式人生 > >讓物體沿橢圓軌道運動

讓物體沿橢圓軌道運動

/// <summary>
/// 利用橢圓方程的三角表達式:x=acosθ ,y=bsinθ做出橢圓運動
/// </summary>
public class EllipticalOrbit : MonoBehaviour {
   


    //橢圓半長軸a、半短軸b、
    public float a = 50, b = 30;


    //h變數是讓橢圓運動軌跡傾斜的變數,h為0時在x-z正交座標平面內運動
    public float h=20;


    //橢圓三角函式的角θ
    float angle;


    //橢圓三角函式的角變化的速度
    public float angleSpeed = 0.1f;
   
    //三個float變數
    float z,x,y;


    //橢圓軌跡上的座標
    Vector3 _pos;


void Start () {
        //初始化,角度從0弧度開始
        angle = 0;


        //初始化,物體初始位置為橢圓右頂點(0,h,a)
        transform.position = new Vector3(b*Mathf.Sin(0), h * Mathf.Cos(0), a*Mathf.Cos(0));
}

// Update is called once per frame
void Update () {
     
        //角度隨時間均勻自增
        angle += Time.deltaTime * 0.1f;


        //在z-x座標系中,套用橢圓方程的三角表達式x=acosθ ,y=bsinθ


        z = a* Mathf.Cos(angle);
        x =b* Mathf.Sin(angle);


        //橢圓的傾斜,y值從h到-h變化
        y = h * Mathf.Cos(angle);


        //橢圓軌道上的座標(x,y,z)
        _pos = new Vector3(x,y,z);


        //讓物體沿橢圓軌跡平滑運動
        transform.position = Vector3.Lerp(transform.position,_pos,Time.deltaTime);
    }

}

效果圖: