当我使用Vector3.MoveTowards方法时,Plank无法移动。我不完全确定为什么。有人好好看看吗?
public class BrickMoveVErtical : MonoBehaviour
{
public Vector3 positionOne, positiontwo, nextposition;
public Transform plankTranform;
public Transform positionBTransform;
public float speed;
void Start ()
{
positionOne = plankTranform.localPosition;
positiontwo = positionBTransform.localPosition;
nextposition = positiontwo;
}
void Update ()
{
move();
}
private void move()
{
plankTranform.localPosition = Vector3.MoveTowards(positionOne,nextposition,Time.deltaTime*speed);
if(Vector3.Distance(plankTranform.localPosition,nextposition)<0.1)
changeMovementPlank();
}
void changeMovementPlank()
{
nextposition = nextposition != positionOne ? positionOne : positiontwo;
}
}
答案 0 :(得分:3)
您应该使用当前位置作为current
参数:
plankTranform.localPosition = Vector3.MoveTowards(plankTranform.localPosition, nextposition,Time.deltaTime*speed);
^^^^^^^^^^^^^^^^^^^^^^^^^^^
答案 1 :(得分:0)
你在上一个问题中犯过的同样错误之一。 Vector3
是值类型,这意味着如果您执行此操作:
private v1 = new Vector3(3, 3);
private v2 = v1; // v2 has now *copied* the value of v1
v1 = new Vector(0, 0); // v1 is now (0, 0), but v2 is still (3, 3)
你正在做的是有效的。如果你想要一个总是给出最新值的类似变量的东西,请使用一个属性,如下所示:
public Vector3 positionOne
{
get { return plank.transform.position; }
set { plank.transform.position = value; }
}
这将始终返回正确且更新的值,当您设置此值时,您将实际更改原始值,而不是副本。