c# unity3d unity5

c# - Forma correcta de mover Rigidbody GameObject



unity3d unity5 (3)

"w" no está predefinido a menos que lo defina explícitamente. Use KeyCode.W

Acabo de empezar a aprender la Unidad. Intenté hacer un simple movimiento de caja usando este script. La premisa es que cada vez que alguien presiona ''w'' la caja avanza.

public class PlayerMover : MonoBehaviour { public float speed; private Rigidbody rb; public void Start () { rb = GetComponent<Rigidbody>(); } public void Update () { bool w = Input.GetButton("w"); if (w) { Vector3 move = new Vector3(0, 0, 1) * speed; rb.MovePosition(move); Debug.Log("Moved using w key"); } } }

Cada vez que uso esto, el cuadro no avanza al presionar una tecla ''w''. ¿Qué tiene de malo mi código? Pensé que podría ser la forma en que configuré mi move Vector 3 , así que intenté reemplazar el eje z con velocidad, pero eso no funcionó. ¿Alguien podría decirme dónde me estoy equivocando?


Prueba esto:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMover : MonoBehaviour { public float speed; private Rigidbody rb; void Start () { rb = GetComponent<Rigidbody>(); } void Update () { bool w = Input.GetKey(KeyCode.W); if (w) { Vector3 move = new Vector3(0, 0, 1) * speed *Time.deltaTime; rb.MovePosition(move); Debug.Log("Moved using w key"); } } }

Use Input.GetKey(KeyCode.W) para obtener la entrada.
NOTA DE EDICIÓN : para mover el objeto en relación con su posición inicial, use rb.MovePosition(transform.position+move) lugar de rb.MovePosition(move)


Rigidbody con Rigidbody.MovePosition y lo Rigidbody.MoveRotation con Rigidbody.MoveRotation si quieres que choque adecuadamente con los objetos que lo rodean. Rigidbody no debe ser movido por su posición, rotación o las variables / función Traducir.

La "w" no está predefinida como SherinBinu mencionó, pero ese no es el único problema. Si lo define y usa KeyCode.W , todavía no funcionará. El objeto se moverá una vez y se detendrá.

Cambio

Vector3 move = new Vector3(0, 0, 1) * speed; rb.MovePosition(move);

a

tempVect = tempVect.normalized * speed * Time.deltaTime; rb.MovePosition(transform.position + tempVect);

Esto debería hacerlo:

public float speed; private Rigidbody rb; public void Start() { rb = GetComponent<Rigidbody>(); } public void Update() { bool w = Input.GetKey(KeyCode.W); if (w) { Vector3 tempVect = new Vector3(0, 0, 1); tempVect = tempVect.normalized * speed * Time.deltaTime; rb.MovePosition(transform.position + tempVect); } }

Finalmente, creo que quieres mover tu objeto con la tecla wasd. Si ese es el caso, use Input.GetAxisRaw o Input.GetAxis .

public void Update() { float h = Input.GetAxisRaw("Horizontal"); float v = Input.GetAxisRaw("Vertical"); Vector3 tempVect = new Vector3(h, 0, v); tempVect = tempVect.normalized * speed * Time.deltaTime; rb.MovePosition(transform.position + tempVect); }