0

所以,这就是我所拥有的:SteamVR 的手部游戏对象 3D 球体。

我想要什么:球体移动到与手相同的方向/位置,但它通过乘数进一步移动。例如,我移动 VR 控制器,手移动 1 个单位。我希望球体在相同的时间内向相同的方向移动,但例如 2 个单位。我该怎么做呢?我试过简单

sphere.transform.position = ControllerToFollow.position +2f;

但随后球体总是偏移。

4

2 回答 2

0

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
}
于 2020-02-05T14:38:04.763 回答
0

只需跟踪手的运动 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;
于 2020-02-05T17:16:26.030 回答