Unity:面对相机时无法锁定对象的z轴

时间:2019-08-07 15:05:42

标签: c# unity3d camera rotation

除了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轴拒绝保持为零。

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我遇到了类似的问题,我希望始终查找一些3d文字,但将其旋转到相机上。
对我有用的是在应用视线旋转之后将不需要的欧拉分量设置为零。
在您的情况下,将是这样。

transform.LookAt(cam.transform.position);
var rot = transform.rotation.eulerAngles;
transform.rotation = Quaternion.Euler(rot.x, rot.y, 0);

如果您需要另一个z值,只需替换0。

答案 2 :(得分:0)

特别感谢StarManta在Unity论坛上回答了这个问题。

“好吧,我想我知道发生了什么。它们看起来像是在旋转,这是一种幻觉;我认为他们确实是准确地对准了相机并朝上。但是,当照相机确实具有直线投影时,将其视作具有圆形/鱼眼镜头的投影。通常这并不重要,但在这种情况下确实如此。很难确切解释这会如何影响镜头,但是结果是,当屏幕中心两侧的内容都设置为“朝相机看”时,它们实际上似乎是围绕其Y轴旋转的。

解决这个问题的方法实际上很烦人:不要将旋转设置为看摄像机,而是将其设置为与摄像机相同。”

Exception in thread "main" java.time.format.DateTimeParseException: Text '201901' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {WeekOfYear[WeekFields[MONDAY,4]]=1, WeekBasedYear[WeekFields[MONDAY,4]]=2019, DayOfWeek=7},ISO of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1931)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1866)
    at java.time.LocalDate.parse(LocalDate.java:411)
    at Main.formatter1(Main.java:22)
    at Main.main(Main.java:10)
Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {WeekOfYear[WeekFields[MONDAY,4]]=1, WeekBasedYear[WeekFields[MONDAY,4]]=2019, DayOfWeek=7},ISO of type java.time.format.Parsed
    at java.time.LocalDate.from(LocalDate.java:379)
    at java.time.LocalDate$$Lambda$7.000000001061ED20.queryFrom(Unknown Source)
    at java.time.format.Parsed.query(Parsed.java:237)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1862)
    ... 3 more