繁体   English   中英

了解Unity eulerAngles(如何将2D对象的旋转限制为45度?)

[英]Understanding Unity eulerAngles (how to limit rotation of a 2D object to 45 degrees?)

请记住,我是一个完整的初学者。

我正在尝试制作太空射击游戏。 我有一个2D精灵朝上,此代码:

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

public class Player : MonoBehaviour
{

    public float speed = 5.0f;

    private void Start()
    {
        transform.position = Vector3.zero;

    }

    private void Update()

    {
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");



        Vector3 eulerAngles = transform.rotation.eulerAngles;
        //Debug.Log("transform.rotation angles x: " + eulerAngles.x + " y: " + eulerAngles.y + " z: " + eulerAngles.z); 

        transform.Translate(Vector3.right * speed * horizontalInput * Time.deltaTime, Space.World);
        transform.Translate(Vector3.up * speed * verticalInput * Time.deltaTime, Space.World);

        if (horizontalInput > 0)
        {
            transform.Rotate(new Vector3(0, 0, -1) * horizontalInput * Time.deltaTime * 300);
        }

        else if (horizontalInput < 0)
        {
            transform.Rotate(new Vector3(0, 0, -1) * horizontalInput * Time.deltaTime * 300);
        }

        if (eulerAngles.z > 45)
        {
            //transform.rotation = Quaternion.AngleAxis(45, Vector3.forward);
            Debug.Log("45");


        if (eulerAngles.z < -45)
        {
            //transform.rotation = Quaternion.AngleAxis(-45, Vector3.forward);
            Debug.Log("-45");
        }

现在,我希望日志在Transform.rotation.z中的值达到45时说“ 45”,而在它达到-45时说“ -45”。 我的真实意图(在代码中作了注释)是告诉Sprite停止以45或-45度旋转。

当我按左箭头直到它旋转到45时,它起作用了。 但这是问题所在...当我按向右箭头时,Transform.rotation.z的值变为负数,并且日志立即显示“ 45”,就好像某个负数在某种程度上优于45。

我注意到,当我在Unity中旋转精灵时,Transform.rotation.z的值会进行某种循环,直到180,然后变为负数,直到0,反之亦然。

有人可以告诉我我所缺少的吗? 我是否在忽略其他更简单,更有效的方法来实现所需的目标?

在此先感谢您的帮助,我非常感谢。 我是新手,但仍在努力掌握许多概念。

我刚刚解决了! 我只需要将范围设置为45到180之间,将另一个方向设置为315到180之间。

    if (eulerAngles.z > 45 && eulerAngles.z < 180)
    {
        transform.rotation = Quaternion.AngleAxis(-315, new Vector3(0, 0, 45));
        Debug.Log("45");
    }


    if (eulerAngles.z < 315 && eulerAngles.z > 180)
    {
        transform.rotation = Quaternion.AngleAxis(-315, new Vector3(0, 0, -45));
        Debug.Log("-45");
    }

这使其完美工作。 当精灵(太空飞船)向侧面移动时,它将旋转到该侧,但停止以45度旋转。

暂无
暂无

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

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