基本思想是,给导弹一个恒定方向的力,再不断的修改导弹本身的角度,简单的代码片:
void FixedUpdate()
{
// 给导弹一个始终向上(本地)的力
rbody.velocity = transform.up * speed;
// 第一种修改角度的方法:
Vector2 dir = (Vector2)target.position - rbody.position;
// 叉乘的Z值反映两向量夹角的大小以及旋转的顺序
float rotateAmount = Vector3.Cross(transform.up, dir.normalized).z;
rbody.angularVelocity = rotateAmount * rotateSpeed;
// 第二种修改角度的方法:
Vector3 dir = (target.position - transform.position).normalized;
// 以下几种不同计算方式,产生的轨迹有所不同
transform.up = Vector3.Lerp(transform.up, dir, rotateSpeed * Time.deltaTime);
// or
transform.up = Vector3.Slerp(transform.up, dir, rotateSpeed * Time.deltaTime);
// or
transform.up = Vector3.RotateTowards(transform.up, dir,
rotateSpeed * Time.deltaTime, 0);
// 加入距离作为因子
transform.up = Vector3.Slerp(transform.up, dir, rotateSpeed /
Vector2.Distance(target.position, transform.position));
}