Proper way to move Rigidbody GameObject

c#, unity-game-engine

Solution

You move `Rigidbody` with `Rigidbody.MovePosition` and rotate it with `Rigidbody.MoveRotation` if you want it to properly collide with Objects around it. `Rigidbody` should not be moved by their position, rotation or the Translate variables/function.

The "w" is not predefined like SherinBinu mentioned but that's not the only problem. If you define it and use `KeyCode.W` it still won't work. The object will move once and stop.

Change

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

to

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

This should do it:

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

Finally, I think you want to move your object with wasd key. If that's the case then use `Input.GetAxisRaw` or `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);
}

Problem

I just started learning Unity. I tried to make a simple box move by using this script. The premise is, whenever someone presses 'w' the box moves forward. ``` 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"); } } } ``` Whenever I use this, the box doesn't move forward on a 'w' keypress. What is wrong with my code? I thought it might be the way I have my Vector 3 `move` set up so I tried replacing the z-axis with speed, but that didn't work. Could someone tell me where I am messing up?

Original source