所以,这就是我所拥有的:SteamVR 的手部游戏对象 3D 球体。
我想要什么:球体移动到与手相同的方向/位置,但它通过乘数进一步移动。例如,我移动 VR 控制器,手移动 1 个单位。我希望球体在相同的时间内向相同的方向移动,但例如 2 个单位。我该怎么做呢?我试过简单
sphere.transform.position = ControllerToFollow.position +2f;
但随后球体总是偏移。
position
是一个 Vector3,它本质上是 3 个浮点数 - 除非重载 + 运算符,否则不能将 Vector3 与浮点数相加。否则,您可以执行以下操作:
Vector3 followPos = new Vector3(ControllerToFollow.position.x + 2f,
ControllerToFollow.position.y + 2f,
ControllerToFollow.position.z + 2f);
sphere.transform.position = followPos;
如果您只希望它在一个轴上跟随,那么您可以执行以下操作:
Vector3 followPos = new Vector3(ControllerToFollow.position.x + 2f, // Follow on x Axis
ControllerToFollow.position.y, // Y axis is the same
ControllerToFollow.position.z); // X Axis is the same
sphere.transform.position = followPos;
编辑:我想我现在更好地理解了你的问题。这是一个更好的版本。
if (Vector3.Distance(sphere.transform.position, ControllerToFollow.position) >= 2f)
{
// Code that makes the sphere follow the controlling
}
只需跟踪手的运动 Delta 并将其乘以某个乘数即可。
在操作商店的开头
private Vector3 lastControllerPosition;
...
lastControllerPosition = ControllerToFollow.position;
然后在每一帧比较
var delta = ControllerToFollow.position - lastHandPosition;
// Don't forget to update lastControllerPosition for the next frame
lastControllerPosition = ControllerToFollow.position;
现在delta
你有一个控制器自上一帧以来的运动。因此,您可以使用乘数将其分配给球体Transform.Translate
sphere.transform.Translate(delta * multiplier, Space.World);
或简单地使用
sphere.transform.position += delta * multiplier;