我在这里尝试做的基本上就是当一名球员被移动时#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);
}
}
}
答案 0 :(得分:0)
计算的浮点值未被截断,并且它们不会在Debug.Log上显示确切的值。使用Time.DeltaTime计算的速度使值"非精确",导致bool返回false。