相机旋转时游戏对象旋转
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)。
【讨论】:
以上是关于相机旋转时游戏对象旋转的主要内容,如果未能解决你的问题,请参考以下文章