讓物體沿橢圓軌道運動
阿新 • • 發佈:2019-02-09
/// <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);
}
/// 利用橢圓方程的三角表達式: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);
}
}
效果圖: