- Home /
How can I change my movement scripts so it moves by rigidbodies movement so it doesn't clip
How do I change my movement script so it moves using a rigidbody function, because currently it moves by position, and it clips through walls, and other collider objects. here is my script: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class characterController : MonoBehaviour {
public float speed = 10.0f;
public float straffeSpeed = 7.0f;
public float jumpHeight = 3.0f;
Rigidbody rb;
// Start is called before the first frame update
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
float DisstanceToTheGround = GetComponent<Collider>().bounds.extents.y;
bool IsGrounded = Physics.Raycast(transform.position, Vector3.down, DisstanceToTheGround + 0.1f);
float translation = Input.GetAxis("Vertical") * speed;
float straffe = Input.GetAxis("Horizontal") * straffeSpeed;
translation *= Time.deltaTime;
straffe *= Time.deltaTime;
//anim.SetTrigger("isWalking");
transform.Translate(straffe, 0, translation);
//rb.velocity = transform.forward * translation + transform.right * straffe ;
if(IsGrounded && Input.GetKeyDown("space"))
{
Debug.Log("JUMP!");
rb.velocity = new Vector3(0, jumpHeight, 0);
}
if (Input.GetKey(KeyCode.R))
{
Scene scene = SceneManager.GetActiveScene();
SceneManager.LoadScene(scene.name);
}
if (Input.GetKeyDown("escape"))
{
Application.Quit();
//Cursor.lockState = CursorLockMode.None;
}
}
}
Answer by MomkeyDev · Sep 22, 2020 at 12:24 AM
use either Rigidbody.velocity, or Rigidbody,addforce. Rigidbody.velocity basically Change your velocity this is used for something like instant Movement, or Rigidbody.AddForce which add force to the rigidbody, this is more accurate at colliding and have an acceleration, but if you can change the forcemode to VelocityChange for an instant movement like Rb.velocity. reference the doc for more info