繁体   English   中英

如何在 Unity3D 中锁定 z 旋转?

[英]How to lock z rotation in Unity3D?

我试图让移动控件统一工作,但是当我尝试向左和向右看时,相机会稍微倾斜,所以我想锁定 z 旋转,但我不能。

using UnityEngine;
using DitzeGames.MobileJoystick;
namespace DitzeGames.MobileJoystick.Example
{
    public class BoxMover : MonoBehaviour {


    public Transform transform;
    protected Joystick Joystick;
    protected Button Button;
    protected TouchField TouchField;

    // Use this for initialization
    void Awake ()
    {
        Joystick = FindObjectOfType<Joystick>();
        Button = FindObjectOfType<Button>();
        TouchField = FindObjectOfType<TouchField>();
    }

    // Update is called once per frame
    void FixedUpdate () {

    transform.position = new Vector3(transform.position.x + 
    Joystick.AxisNormalized.x * Time.deltaTime * 3f, Button.Pressed ? 2 : 1, 
    transform.position.z + Joystick.AxisNormalized.y * Time.deltaTime * 3f);
    transform.Rotate(Vector3.up, TouchField.TouchDist.x);
    transform.Rotate(Vector3.left, TouchField.TouchDist.y);

    }
}}

谁能帮我 ? 谢谢 !

只需添加一个刚体并锁定 z 旋转,然后关闭重力。 你可以将它的碰撞器设置为触发,这样它就不会撞到任何东西。

这是我为完全锁定相机旋转而不使用刚体而编写的解决方案。 只需创建此脚本并将其添加到您的相机(或您想锁定的任何内容)。

public class RotationLock : MonoBehaviour
{
    private Quaternion lockedRotation;
    
    void Start() { lockedRotation = transform.rotation; }
    void Update() { transform.rotation = lockedRotation; }
}

这是另一个版本,可让您选择要锁定的轴。 我为一个 3D 手机游戏编写了它,用户可以通过滑动来旋转他们的视图。

public class RotationLock : MonoBehaviour
{
    public bool lockX, lockY, lockZ;
    private Vector3 startRotation;

    void Start() { startRotation = transform.rotation.eulerAngles; }
    void LateUpdate()
    {
        Vector3 newRotation = transform.rotation.eulerAngles;
        transform.rotation = Quaternion.Euler(
            lockX ? startRotation.x : newRotation.x,
            lockY ? startRotation.y : newRotation.y,
            lockZ ? startRotation.z : newRotation.z
        );
    }
}

可能有更有效的解决方案,但这些都是在紧要关头工作,不会涉及物理系统!

尝试添加将在每帧结束时重置相机倾斜度的代码。

var rot = transform.rotation;
Camera.main.transform.rotation = new Quaternion(rot .x,rot .y, 0, rot .w);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM