Vector3.MoveTowards没有做它的事情

时间:2018-06-02 17:50:32

标签: c# unity3d

当我使用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;
    }                        
}

2 个答案:

答案 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; }
}

这将始终返回正确且更新的值,当您设置此值时,您将实际更改原始值,而不是副本。