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);
}