计算Unity c中对象的行进距离

时间:2017-02-01 18:17:13

标签: c# unity3d unity5

我目前正在努力编写一个动态脚本来获取两个对象(手)的位置当我不包含公共变量并将脚本放在每个手下时它可以工作但不是当我将它们拖入时游戏对象。没有错误。这些值不会更新。

这是在Unity 5.5上运行的Oculus Rift应用程序,其中包含带有Newton插件的最新SDK。

public class calorieCounter : MonoBehaviour
{
    public Text displayMessage;

    public GameObject leftHand;
    public GameObject righHand;

    float distanceTravelledL = 0;
    float distanceTravelledR = 0;

    float distanceTravelled = 0;
    Vector3 lastPosition;

    Vector3 lastPositionL;
    Vector3 lastPositionR;

    void Start()
    {

        lastPositionL = leftHand.transform.position;
        lastPositionR = righHand.transform.position;
        lastPosition = transform.position;
    }

    void Update()
    {

        distanceTravelledL += Vector3.Distance(transform.position, lastPositionL);
        distanceTravelledR += Vector3.Distance(transform.position, lastPositionR);

        lastPositionL = transform.position;
        lastPositionR = transform.position;

        print("Left hand distance: " + distanceTravelledL);
        displayMessage.text = ("L: " + distanceTravelledL);


        print("Right hand Distace: " + distanceTravelledR);
        print("Right hand position: " + lastPositionR);
        print("Left hand position: " + lastPositionL);
        displayMessage.text += ("R: " + distanceTravelledR);
    }

}

2 个答案:

答案 0 :(得分:2)

您混淆了一些变量 - 在Update()方法中,您将最后一个位置存储为transform.position,而不是手的各个位置。同样,你的距离计算应该基于手的位置,而不是脚本的transform.position

以下是一些引用正确转换的更新代码:

void Update()
{
    distanceTravelledL += Vector3.Distance(leftHand.transform.position, lastPositionL);
    distanceTravelledR += Vector3.Distance(righHand.transform.position, lastPositionR);

    lastPositionL = leftHand.transform.position;
    lastPositionR = righHand.transform.position;

    // ...
}

另外,如果您不使用它,您可能还应该从脚本中删除lastPosition - 它看起来像是将脚本单独附加到双手时的遗留物,它可能会导致如果你不小心,也会有类似的混淆。

希望这有帮助!如果您有任何问题,请告诉我。

答案 1 :(得分:0)

我想只需手动执行此操作就可以像这样

 Vector3 temp = new Vector3(0,0,0);
 myGameObject.transform.position += temp;

我希望它有所帮助