Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

365
Views
GameObject puede rotar alrededor de Y y Z pero no X

Soy nuevo en el desarrollo de Unity y tengo algunos problemas para rotar GameObjects.

Quiero hacer que el objeto gire -90 grados cada vez que llamas a una función. En este momento puedo hacer que gire alrededor de su eje Y y Z y no hay problema, sin embargo, si cambio los parámetros para que gire alrededor de X se atasca después de girar de -90º (270º en realidad) a 180º.
Aquí está el código que estoy usando para probar:

 public class RotateCube : MonoBehaviour { GameObject cube; bool rotating; private void Start() { cube = GameObject.Find("Cube"); rotating = false; } private void Update() { if (!rotating) { StartCoroutine(Rotate()); } } private IEnumerator Rotate() { rotating = true; float finalAngle = SubstractNinety(cube.transform.eulerAngles.x); while (cube.transform.rotation.eulerAngles.x != finalAngle) { cube.transform.rotation = Quaternion.RotateTowards(cube.transform.rotation, Quaternion.Euler(finalAngle, cube.transform.rotation.eulerAngles.y, cube.transform.rotation.eulerAngles.z), 100f * Time.deltaTime); yield return null; } cube.transform.rotation = Quaternion.Euler(finalAngle, cube.transform.rotation.eulerAngles.y, cube.transform.rotation.eulerAngles.z); yield return null; rotating = false; } private float SubstractNinety(float angle) { if (angle < 90) { return 270f; } return angle - 90; } }

Estoy actualizando todas las coordenadas en Quaternion.Euler en cada iteración porque quiero que el usuario pueda arrastrar el objeto mientras gira, pero no me importaría si la solución requiere definir Quaternion antes del ciclo.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

¿Por qué te molestas en pasar por los eulerAngles ?

Al usar la propiedad .eulerAngles para establecer una rotación, es importante comprender que, aunque proporciona valores de rotación X, Y y Z para describir su rotación, esos valores no se almacenan en la rotación. En su lugar, los valores X, Y y Z se convierten al formato interno de Quaternion .

Cuando lee la propiedad .eulerAngles , Unity convierte la representación interna de Quaternion de la rotación en ángulos de Euler. Debido a que hay más de una forma de representar cualquier rotación dada usando ángulos de Euler, los valores que lea de nuevo pueden ser bastante diferentes de los valores que asignó. Esto puede causar confusión si intenta incrementar gradualmente los valores para producir animación .

Para evitar este tipo de problemas, la forma recomendada de trabajar con rotaciones es evitar confiar en resultados consistentes al leer .eulerAngles particularmente cuando se intenta incrementar gradualmente una rotación para producir animación. Para obtener mejores formas de lograr esto, consulte el operador Quaternion * .

¡Más bien usa Quaternion directamente! Simplemente agregue la rotación deseada a la existente usando el operador *

using UnityEngine;
using System.Collections;

public class Rotate : MonoBehaviour {
    public Space m_RotateSpace;
    public float m_RotateSpeed = 20f;

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(Vector3.up * m_RotateSpeed * Time.deltaTime, m_RotateSpace);
    }
}
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!