C# 为什么我的精灵没有移动到第一个航路点之外?

C# 为什么我的精灵没有移动到第一个航路点之外?,c#,unity3d,C#,Unity3d,我猜这是因为你的transform.position永远不会完全等于你的航路点位置,因为浮标的准确性。使用浮点数的等式时,应使用公差 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ZombieControl : MonoBehaviour { [SerializeField] Transform[] waypoints; [SerializeField]


我猜这是因为你的transform.position永远不会完全等于你的航路点位置,因为浮标的准确性。使用浮点数的等式时,应使用公差

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ZombieControl : MonoBehaviour {

[SerializeField]
Transform[] waypoints;

[SerializeField]
float moveSpeed = 2f;

int wayPointIndex =0;

void Start()
{
    transform.position = waypoints[wayPointIndex].transform.position;
}

void Update() {
    Move ();
}

void Move()
{
    transform.position = Vector2.MoveTowards (transform.position, waypoints [wayPointIndex].transform.position, moveSpeed * Time.deltaTime);

    if (transform.position == waypoints [wayPointIndex].transform.position) {
        wayPointIndex += 1;
    }

    if (wayPointIndex == waypoints.Length)
        wayPointIndex = 0;
}
}
if(Vector2.Distance(transform.position,航路点[wayPointIndex].transform.position)<.05f)//或其他一些小距离
{
航路点指数+=1;
} 

Vector2基于浮点数,由于较小的舍入问题,浮点数通常不完全相等。所以这行代码可能永远不会返回true:

if (Vector2.Distance(transform.position, waypoints[wayPointIndex].transform.position) < .05f) // or some other small distance
{
    wayPointIndex += 1;
} 
见附注:

尝试测试它们之间的距离(或者更好,距离的平方更快计算)

Vector2差分=transform.position-航路点[wayPointIndex].transform.position;
if(差值SqrMagnitude()<0.001){
航路点指数+=1;
}
如果一开始它不起作用,请尝试阈值,以找到一个适合您需要的值

如果您经常这样做,请创建一个helper函数。例如,Vector3的一个类似示例:

非常感谢。解决了这个问题。我建议使用平方震级而不是距离。真的没有理由知道确切的距离,所以使用方形磁感应可以节省一点计算时间。非常感谢。解决了这个问题。
if (transform.position == ...
Vector2 difference = transform.position - waypoints [wayPointIndex].transform.position;

if ( difference.SqrMagnitude() < 0.001 ) {
    wayPointIndex += 1;
}