es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo convertir este script de movimiento de Unity para que sea con Rigidbody?

Hola a todos, básicamente me preguntaba cómo podría cambiar este script de movimiento para usar rigidbody. Funciona de la manera en que quiero con wasd para cambiar la dirección de la mirada y luego espacio para mover hacia adelante desde esa dirección, pero quiero convertir todo para que se haga con rigidbody y así poder manejar las colisiones. ¡Gracias!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Fly : MonoBehaviour
{

public float moveSpeed;
void Start()
{

}


void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        transform.Translate(new Vector3(0,0,moveSpeed) * Time.deltaTime, Space.Self);
    }


    float rotatex = Input.GetAxis("Vertical");
    float rotatey = Input.GetAxis("Horizontal");

    transform.Rotate(0, rotatey, 0, Space.World);
    transform.Rotate(-rotatex * 0.5f, 0, 0);
}

}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir el script de movimiento al uso de RigidBody, debes hacer lo siguiente:

    1. Agregar un componente RigidBody a tu GameObject.
    2. Remover la variable moveSpeed de tu script ya que el RigidBody manejará el movimiento.
    3. Reemplazar transform.Translate en la declaración if con rb.AddForce (transform.forward * moveSpeed) donde rb es el componente RigidBody.
    4. Cambiar el código de rotación para utilizar la rotación del RigidBody en lugar de la rotación del transform. Puedes hacer esto obteniendo la rotación del RigidBody usando rb.rotation y luego calculando la nueva rotación en función de los ejes de entrada.
    5. Finalmente, deberás agregar un componente collider a tu GameObject si deseas que funcionen las colisiones.

    A continuación se muestra cómo se vería el script actualizado:

    “`C#
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class Fly : MonoBehaviour
    {
    public float moveSpeed;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<rigidbody>();
    }
    
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            rb.AddForce(transform.forward * moveSpeed);
        }
    
        float rotatex = Input.GetAxis("Vertical");
        float rotatey = Input.GetAxis("Horizontal");
    
        Vector3 rotation = new Vector3(-rotatex * 0.5f, rotatey, 0);
        Quaternion deltaRotation = Quaternion.Euler(rotation * Time.deltaTime * 60);
        rb.rotation *= deltaRotation;
    }
    

    }
    “`

Comments are closed.