计算Unity c#中物体移动的距离
Calculate distance travelled on objects in Unity c#
我目前正在努力编写一个动态脚本来获取两个对象(手)的位置当我不包含 public 变量并将脚本放在每只手下时它可以工作但不能当我将它们拖入游戏时 objects.There 没有错误。这些值只是没有得到更新。
这是 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);
}
}
您混淆了一些变量 - 在您的 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
- 它看起来像是您将脚本单独附加到双手时的遗物,它可以一不小心就会造成类似的mix-up
希望对您有所帮助!如果您有任何问题,请告诉我。
我想只要手动操作就可以像这样
Vector3 temp = new Vector3(0,0,0);
myGameObject.transform.position += temp;
希望对你有帮助
我目前正在努力编写一个动态脚本来获取两个对象(手)的位置当我不包含 public 变量并将脚本放在每只手下时它可以工作但不能当我将它们拖入游戏时 objects.There 没有错误。这些值只是没有得到更新。
这是 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);
}
}
您混淆了一些变量 - 在您的 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
- 它看起来像是您将脚本单独附加到双手时的遗物,它可以一不小心就会造成类似的mix-up
希望对您有所帮助!如果您有任何问题,请告诉我。
我想只要手动操作就可以像这样
Vector3 temp = new Vector3(0,0,0);
myGameObject.transform.position += temp;
希望对你有帮助