Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

366
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda