c# - 精灵只会移动到我的第一个航点
问题描述
我试图让一个精灵在生成后沿着一组航路点移动,但每当精灵到达第一个航路点时,它就会停止。
public class MoveEnemy : MonoBehaviour
{
[HideInInspector]
public GameObject[] waypoints;
private int currentWaypoint = 0;
private float lastWaypointSwitchTime;
public float speed = 1.0f;
// Start is called before the first frame update
void Start()
{
lastWaypointSwitchTime = Time.time;
}
// Update is called once per frame
void Update()
{
// 1
Vector3 startPosition = waypoints[currentWaypoint].transform.position;
Vector3 endPosition = waypoints[currentWaypoint + 1].transform.position;
// 2
float pathLength = Vector3.Distance(startPosition, endPosition);
float totalTimeForPath = pathLength / speed;
float currentTimeOnPath = Time.time - lastWaypointSwitchTime;
gameObject.transform.position = Vector2.Lerp(startPosition, endPosition, currentTimeOnPath / totalTimeForPath);
// 3
if (gameObject.transform.position.Equals(endPosition))
{
if (currentWaypoint < waypoints.Length - 2)
{
// 3.a
currentWaypoint++;
lastWaypointSwitchTime = Time.time;
// TODO: Rotate into move direction
}
else
{
// 3.b
Destroy(gameObject);
AudioSource audioSource = gameObject.GetComponent<AudioSource>();
AudioSource.PlayClipAtPoint(audioSource.clip, transform.position);
// TODO: deduct health
}
}
}
}
解决方案
要解决您的问题,请尝试更换
if (gameObject.transform.position.Equals(endPosition))
和
if (Vector2.Distance(gameObject.transform.position, endPosition) < 0.2f)
这应该可以解决游戏对象在第一个航路点停止的问题。这是因为游戏对象和路点的位置可能在小数点后不一样,所以这段代码会检查它是否在距离下一个路点的 0.2 范围内。
也调用这两行:
Vector3 startPosition = waypoints[currentWaypoint].transform.position;
Vector3 endPosition = waypoints[currentWaypoint + 1].transform.position;
在更新功能不是很有效。您可以在 start 函数中计算这些值,也可以在到达下一个航点时计算这些值。
希望这可以帮助!
推荐阅读
- haskell - Haskell 中的“in”关键字有什么作用?
- amazon-web-services - RHEL 实例迁移(提升和转移)到 AWS
- linux - 如何在通过 apache 规则时查看 Web 请求
- regex - 正则表达式分析站点链接
- vb.net - vb 应用程序中的按钮在第一次单击后在循环中每 x 次按下自身
- python - 无法导入 EcoInvent 3.3
- javascript - this 没有 new 关键字
- c++ - 我可以将 void* 转换为 unique_ptr 吗?
- javascript - Node JS 服务器,无法获取 index.html
- mysql - 使用group by function时选择特定的id [MySQL]