【问题标题】:Calculate distance travelled on objects in Unity c#在 Unity c# 中计算对象的行进距离
【发布时间】:2017-02-02 02:59:51
【问题描述】:

我目前正在努力编写一个动态脚本来获取两个对象(手)的位置游戏对象。没有错误。这些值只是没有得到更新。

这是一个在 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);
    }

}

【问题讨论】:

  • 您确定拖到公共变量上的对象实际上是移动的对象吗? (即,它们不是围绕实际移动的手对象的静态容器对象?)
  • 是的,他们正在搬家。正如我所说,它在我设置全局变量并将对象拖入之前一直有效。我尝试搜索对象但没有帮助
  • 好的,我已经确定了您的代码中可能存在的错误 - 请告诉我我的评估是否准确,或者您的实施是否仍然存在问题。

标签: c# unity3d unity5


【解决方案1】:

您混淆了一些变量 - 在您的 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,您可能还应该从脚本中删除它 - 当您将脚本单独附加到双手时,它看起来像是一个遗物,并且可能会导致类似的混合- 如果你不小心的话。

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

【讨论】:

  • 非常感谢@Serlite!有用。不敢相信我没有注意到它。
  • @Pavol 很高兴能提供帮助 - 有时只需要一双新的眼睛就能发现问题。请务必通过单击旁边的复选标记来接受可以解决您的问题的答案。这样,它会告诉网站上的其他人您的问题已成功解决。
【解决方案2】:

我想只要手动执行它就可以是这样的

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2019-12-07
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多