Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

367
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda