/// <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);
}
}
效果图: