Unity实现导弹追踪效果有很多种方式。我们下面讲解几种常见的实现方式
(1)直接实现
分析:导弹追随的时候,走的是抛物线轨迹,使用Slerp其实是可以实现抛物线的,但是我们要时时刻刻修改追随的角度、就是使用切线的方式。就需要我们自己进行实现。可以使用下面的方式进行实现。
代码如下:
using System.Collections;
using UnityEngine;
public class Fire : MonoBehaviour
{
public GameObject target; //要到达的目标
public float speed = 10; //速度
public float angleStandard = 45.0f; //角度
private float distanceToTarget; //两者之间的距离
private bool move = true;
void Start()
{
//计算两者之间的距离
distanceToTarget = Vector3.Distance(this.transform.position, target.transform.position);
//开启协程处理,也可以在Update函数处理
StartCoroutine(StartShoot());
}
IEnumerator StartShoot()
{
while (move)
{
Vector3 targetPos = target.transform.position;
//让z朝着目标
this.transform.LookAt(targetPos);
//计算弧线中的夹角
float angle = Mathf.Min(1, Vector3.Distance(this.transform.position, targetPos) / distanceToTarget)* angleStandard;
this.transform.rotation = this.transform.rotation * Quaternion.Euler(Mathf.Clamp(-angle, -42, 42), 0, 0);
float currentDist = Vector3.Distance(this.transform.position, target.transform.position);
if (currentDist < 0.5f)
{
//发动通知,进行自己逻辑处理即可
yield break;
//move = false;
}
this.transform.Translate(Vector3.forward * Mathf.Min(speed * Time.deltaTime, currentDist));
yield return null;
}
}
}
(2)贝塞尔曲线
下个文章专门讲解贝塞尔曲线