统一向量与Vector3 ==运算符

时间:2014-12-15 02:05:31

标签: c# vector unity3d compare operators

我在这里尝试做的基本上就是当一名球员被移动时#34;它选择一个目标位置,updateWalkCycle更新角色的位置,直到它==到targetPosition。然而,这种情况似乎永远不会成真。 API说==和!=也应该考虑接近的值,所以我不完全确定什么是错的。

我检查了Debug.Log以及值是什么时候。)

Playerpos: (50.3, 60, 0), 
TargetPos: (50.3, 60, 0), 
difference: (0, 0, 0)

条件仍然是假的。

void Update()
{
    moveCharacter();
    updateWalkCycle();
}

public void updateWalkCycle()
{
    if ( targetPosition != myTransform.position )
    {
        isMoving = true;

        Vector3 difference = targetPosition - myTransform.position;

        float translation = speed * Time.deltaTime;
        myTransform.position = new Vector3(myTransform.position.x, myTransform.position.y + translation, 0);

        Debug.Log("PlayerPos: " + myTransform.position + " target: " + targetPosition + "diff: " + difference + "bool: " + (targetPosition == myTransform.position));
    }
}

public void moveCharacter()
{
    if (!isMoving)
    {
        if (Input.GetKey(KeyCode.W))
        {
            targetPosition = new Vector3(myTransform.position.x, myTransform.position.y + 1, 0);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

计算的浮点值未被截断,并且它们不会在Debug.Log上显示确切的值。使用Time.DeltaTime计算的速度使值"非精确",导致bool返回false。