using UnityEngine; namespace Aula10 { /// /// Primeiro script da disciplina: move e gira o objeto a que está /// anexado, quadro a quadro. /// /// Ponte com o Módulo 1: em OpenGL, cada quadro chamávamos /// glTranslatef/glRotatef antes de desenhar. Aqui a Unity mantém a /// matriz do objeto no componente Transform, e transform.Translate e /// transform.Rotate compõem novas transformações sobre ela. /// public class MovimentoObjeto : MonoBehaviour { [Header("Configurações de movimento")] [Tooltip("Unidades por segundo ao longo do eixo Z local (frente).")] [SerializeField] private float velocidade = 5.0f; [Tooltip("Graus por segundo em torno do eixo Y (cima).")] [SerializeField] private float velocidadeRotacao = 60.0f; [Tooltip("Desmarcado: anda no espaço LOCAL (o giro curva a trajetória). " + "Marcado: anda no espaço do MUNDO (trajetória reta).")] [SerializeField] private bool moverNoEspacoDoMundo = false; private void Start() { Debug.Log($"Script inicializado no objeto: {gameObject.name}"); } private void Update() { // P_final = P_inicial + (direção * velocidade * deltaTime). // Multiplicar por Time.deltaTime converte "por quadro" em // "por segundo": sem isso, a velocidade muda com o FPS da máquina. Vector3 deslocamento = Vector3.forward * (velocidade * Time.deltaTime); transform.Translate(deslocamento, moverNoEspacoDoMundo ? Space.World : Space.Self); // Rotação contínua em torno do eixo Y (cima). transform.Rotate(Vector3.up * (velocidadeRotacao * Time.deltaTime)); } } }