具有偏心轴点的统一面对象?
Unity Face Object With Off-center Pivot Point?
我正在尝试创建一个“广告牌”效果,其中 quad/gameObject 始终围绕 Y 轴面向目标对象(相机)。根据下面的代码,这工作正常,但我想向 X 轴上的枢轴点添加一个可选的偏移量。
因此,我希望四边形围绕中心点 n 个单位的新点旋转,而不是围绕中心点旋转(默认行为),同时仍面向目标对象。
这将在 Update() 中 运行。
当前没有偏移的工作代码
transform.LookAt(camera.transform, Vector3.up);
transform.localEulerAngles = new Vector3(0, transform.localEulerAngles.y, 0); // Only affects Y Axis.
我需要的偏移量是通过下面的函数计算出来的。通过按此值移动子游戏对象来测试它是正确的。
leftObj 和 rightObj 都是我要旋转的 GameObject 的子对象。
public float GetCenterPos()
{
Vector3 left = leftObj.transform.localPosition;
Vector3 right = rightObj.transform.localPosition;
Vector3 center = (left + right) / 2f;
return center.x;
}
我的问题的俯视图
我已经尝试过 RotateAround 的组合,但我无法弄清楚如何让它面对正确的对象以及轴心应该相对于偏移量是多少。
我也google了一下,没找到这个问题的解决办法,感觉比较简单。
回顾一下:我不需要旋转偏移,并且我不想像许多其他答案所建议的那样添加额外的父项来更改枢轴。偏移量在更新中动态计算。
感谢您的帮助。
我琢磨了一段时间,想出了这个办法。这并不理想,因为它需要存储对起始位置的引用,这会破坏我需要的其他一些移动功能,但它确实回答了我最初的问题。
在开始上面的代码之前(无论是在开始时还是在设置 bool 标志之前)存储对对象的 localPosition (startPos
)
的引用
然后在调用LookAt
之前,调整位置以考虑偏移量。
transform.localPosition = new Vector3(startPos.x + offset, transform.localPosition.y, transform.localPosition.z);
transform.LookAt(camController.transform, Vector3.up);
transform.localEulerAngles = new Vector3(0, transform.localEulerAngles.y, 0);
澄清一下,我需要引用 startPos
的原因是,否则我会在每一帧添加偏移量,导致对象不断移动,而不是使用一致的值。
我只是在切换“广告牌”功能之前和之后设置了 startPos 以使其保持更新。不理想,但确实有效。
我正在尝试创建一个“广告牌”效果,其中 quad/gameObject 始终围绕 Y 轴面向目标对象(相机)。根据下面的代码,这工作正常,但我想向 X 轴上的枢轴点添加一个可选的偏移量。 因此,我希望四边形围绕中心点 n 个单位的新点旋转,而不是围绕中心点旋转(默认行为),同时仍面向目标对象。
这将在 Update() 中 运行。
当前没有偏移的工作代码
transform.LookAt(camera.transform, Vector3.up);
transform.localEulerAngles = new Vector3(0, transform.localEulerAngles.y, 0); // Only affects Y Axis.
我需要的偏移量是通过下面的函数计算出来的。通过按此值移动子游戏对象来测试它是正确的。
leftObj 和 rightObj 都是我要旋转的 GameObject 的子对象。
public float GetCenterPos()
{
Vector3 left = leftObj.transform.localPosition;
Vector3 right = rightObj.transform.localPosition;
Vector3 center = (left + right) / 2f;
return center.x;
}
我的问题的俯视图
我已经尝试过 RotateAround 的组合,但我无法弄清楚如何让它面对正确的对象以及轴心应该相对于偏移量是多少。 我也google了一下,没找到这个问题的解决办法,感觉比较简单。
回顾一下:我不需要旋转偏移,并且我不想像许多其他答案所建议的那样添加额外的父项来更改枢轴。偏移量在更新中动态计算。
感谢您的帮助。
我琢磨了一段时间,想出了这个办法。这并不理想,因为它需要存储对起始位置的引用,这会破坏我需要的其他一些移动功能,但它确实回答了我最初的问题。
在开始上面的代码之前(无论是在开始时还是在设置 bool 标志之前)存储对对象的 localPosition (startPos
)
然后在调用LookAt
之前,调整位置以考虑偏移量。
transform.localPosition = new Vector3(startPos.x + offset, transform.localPosition.y, transform.localPosition.z);
transform.LookAt(camController.transform, Vector3.up);
transform.localEulerAngles = new Vector3(0, transform.localEulerAngles.y, 0);
澄清一下,我需要引用 startPos
的原因是,否则我会在每一帧添加偏移量,导致对象不断移动,而不是使用一致的值。
我只是在切换“广告牌”功能之前和之后设置了 startPos 以使其保持更新。不理想,但确实有效。