繁体   English   中英

Unity3D 使对象跟随另一个但移动得更远

[英]Unity3D make object follow another but to move further

所以,这就是我所拥有的: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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM