[英]Unity: Can't get object's z axis to lock when facing camera
我想要一个精灵总是面对相机,除了 Z 轴。 当我移动相机时,我的精灵不断向左或向右倾斜,而我不能这样做。
我已经在谷歌上搜索了几个小时。 我试过 transform.LookAt 或 Quaternion.LookRotation 并手动将 z 设置为 0,但无论出于何种原因 z 不断调整。 我已经看到并尝试了很多解决方案,感觉它们应该起作用,但实际上却没有。 如果重要的话,我的精灵是另一个对象的子对象,但尝试 localRotation 也不起作用。 冻结刚体约束也无效。
我能得到的最准确的是:
public class Billboard : MonoBehaviour
{
GameObject cam;
float minDist;
// Start is called before the first frame update
void Start()
{
cam = GameObject.Find("Main Camera");
}
// Update is called once per frame
void LateUpdate()
{
//Scale
minDist = cam.GetComponent<CameraOrbit>().distanceMin;
transform.localScale = new Vector3(1f, 1f, 1f) * (cam.GetComponent<CameraOrbit>().distance - minDist) * 1.01f / 3;
//Direction
transform.LookAt(cam.transform.position);
Vector3 rot = transform.rotation.eulerAngles;
transform.rotation = Quaternion.Euler(rot.x, rot.y, 0);
}
}
有了这个,我可以让精灵面对相机,但 z 轴拒绝保持为零。
特别感谢 StarManta 在 Unity 论坛上回答这个问题。
“好吧,我想我明白发生了什么。他们看起来像是在旋转,我认为是一种错觉;我认为他们确实准确地指向相机并且正面朝上。但是,你正在对待相机好像它有一个圆形/鱼眼投影,当它真的有一个直线投影时。通常这无关紧要,但在这种情况下确实如此。很难确切解释这如何影响这一点,但结果是,当事情发生时在屏幕中心的任一侧设置为“朝向”相机,它们实际上似乎围绕它们的 Y 轴旋转。
解决这个问题的方法其实很简单:不要设置旋转角度看相机,设置它与相机相同。”
transform.rotation = cam.transform.rotation;
我有一个类似的问题,我想要一些 3d 文本总是向上看,但旋转到相机。
对我有用的是在应用观察旋转后将不需要的欧拉分量设置为零。
在你的情况下,它会是这样的。
transform.LookAt(cam.transform.position);
var rot = transform.rotation.eulerAngles;
transform.rotation = Quaternion.Euler(rot.x, rot.y, 0);
如果您需要另一个 z 值,只需替换 0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.