[英]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.