当我们需要一些轨迹或者弹道之类的效果时,肯定会先考虑贝赛尔曲线。
什么是贝塞尔曲线:
贝赛尔曲线是一条光滑曲线,很适合做导弹发射运行轨迹。
C#代码:
第一步,我们首先要将这条曲线的点全部计算出来:
void Analysis()
{
for (int i = 0; i < 200; i++)
{
//第一阶段
Vector3 pos1 = Vector3.Lerp(a.position, b.position, i / 100f);
Vector3 pos2 = Vector3.Lerp(b.position, c.position, i / 100f);
Vector3 pos3 = Vector3.Lerp(c.position, d.position, i / 100f);
//第二阶段
var pos1_0 = Vector3.Lerp(pos1, pos2, i / 100f);
var pos1_1 = Vector3.Lerp(pos2, pos3, i / 100f);
//第三阶段
var pos2_0 = Vector3.Lerp(pos1_0, pos1_1, i / 100f);
point.Add(pos2_0);
}
}
第二步,按照固定的时间间隔去修改导弹的位置
void FixedUpdate () {
timer += Time.deltaTime*100;
if (timer > time1)
{
timer = 0;
missile.transform.localPosition = Vector3.Lerp(point[i - 1], point[i], 1f);
i++;
if (i >= point.Count) i = 1;
}
}
注意顺序,Analysis()要在Start ()中运行:
public GameObject missile;//导弹
public Transform a;
public Transform b;
public Transform c;
public Transform d;
private List<Vector3> point = new List<Vector3>();
private float time1 = 2f;
private float timer = 0;
int i = 1;
// 初始化时执行
void Start () {
Analysis();
}