Понимание Unity eulerAngles (как ограничить поворот 2D-объекта до 45 градусов?) - PullRequest
0 голосов
/ 02 июня 2018

Пожалуйста, имейте в виду, что я новичок.

Я пытаюсь создать космический шутер.У меня есть 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");
        }

Сейчас я хочу, чтобы в журнале было написано «45», когда значение в Transform.rotation.z достигает 45, и «-45», когдаэто достигает -45.Мое реальное намерение (закомментированное в коде) состоит в том, чтобы затем сказать спрайту остановить вращение на 45 или -45 градусов.

Когда я нажимаю стрелку влево, пока она не поворачивается на 45, это работает.Но вот в чем проблема ... Когда я нажимаю стрелку вправо, значение Transform.rotation.z становится отрицательным, и в журнале сразу появляется 45, как будто любое отрицательное число как-то превосходит 45.

Я замечаю, что когда я вращаю спрайт в Unity, значения Transform.rotation.z проходят своего рода цикл до 180, затем становятся отрицательными до 0 и наоборот.

Может кто-нибудь сказать мне, что мне не хватает?Я пропускаю другие более простые и эффективные способы достижения того, что я ищу?

Заранее спасибо за вашу помощь, я действительно ценю это.Я новичок и все еще пытаюсь понять многие понятия.

1 Ответ

0 голосов
/ 02 июня 2018

Я только что решил это!Мне нужно было только установить диапазон в условии между 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 градусах.

...