相机旋转时游戏对象旋转

Posted

技术标签:

【中文标题】相机旋转时游戏对象旋转【英文标题】:gameObject rotates when camera rotates 【发布时间】:2018-06-14 20:59:20 【问题描述】:

我正在制作游戏的 UI 菜单,我拖入了一个 GameObject 来表示如果您选择它会放下什么。当我为其旋转附加脚本并运行游戏时,它会随着相机的倾斜而向下倾斜,即使没有脚本链接相机和对象。

画布处于ScreenSpace - Camera 模式。

旋转脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BuildList : MonoBehaviour 

    //Floats
    public float speed = 10f;

    void Update ()      
           
         transform.eulerAngles = new Vector3 (-90f, transform.eulerAngles.y, transform.eulerAngles.z + (speed * Time.deltaTime));   
           

inspector 中的 x 旋转是正在旋转的那个。当我向下旋转相机时,inspector 中的 x-rotation 得到的值为 -155,而该对象的 x-rotation 应固定为 -90。

【问题讨论】:

您的脚本在我的环境中运行良好。您必须有其他导致问题的脚本。 我也有一个相机移动脚本,可能会影响它?但这也是一个在 UI 中旋转的 3d 模型。 转换层次结构、相机的检查器属性和对象的屏幕截图。 prntscr.com/hw9qlnprntscr.com/hw9qsgprntscr.com/hw9r3f 您的对象在画布内。也显示其检查器属性。 【参考方案1】:

感谢 willnode 将我推向正确的方向,我在统一文档中找到了代码并对其进行了修改,使其仅旋转对象的 z 轴。

https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

transform.Rotate(0, 0, Time.deltaTime * speed);

【讨论】:

【参考方案2】:

这可能会或不会解决您的问题,但我有一个提示:

永远不要使用 transform.eulerAngles 进行迭代更新。这可能会导致Gimbal Lock。如果可能,请使用Rotate。

我建议用这个替换代码:

void Update ()      
       
     // Note: the axis to rotate may different than what you expect. experiment with it
     transform.Rotate(Vector3.forward * (speed * Time.deltaTime), Space.World);   
  

并在游戏开始前将对象旋转设置为 (-90,0,0)。

【讨论】:

以上是关于相机旋转时游戏对象旋转的主要内容,如果未能解决你的问题,请参考以下文章

Java OpenGL - 如何使对象随相机旋转?

根据 3D 对象的位置旋转相机

如何让相机的垂直旋转使相机上下移动?

OpenGL:相机和对象

Unity:使用鼠标位置为我的相机制作角度以围绕对象旋转

glRotatef 旋转相机而不是物体