So basically I’ve been going through every option on this forum as to how collision detection for my player character but when I collide with a object my character goes crazy and starts moving (on all axis) by itself. If I move the player with the keys and then let go it continues to move by itself. I’m also trying to keep my character at a y level of 1.
The self movement started occurring after I added a rigidbody to detect collisions.
The game is a overhead game. (Overhead like GTA 2)
This is my PlayerMovement script
using UnityEngine;
using System.Collections;
public class PlayerMovement : MonoBehaviour {
private float forwardSpeed = 1.4f;
private float backwardSpeed = 1.2f;
private float runSpeed = 0.6f;
private float speed;
private float hitdist;
private Transform myTransform;
private Ray ray;
private Vector3 targetPoint;
private Quaternion targetRotation;
void Start() {
myTransform = transform;
speed = forwardSpeed;
}
void Update () {
// Character movement (Forward/Backwards)
if (Input.GetAxis ("Move") > 0) { // Forward
// Running
if (Input.GetButton ("Run")) {
speed = runSpeed;
} else {
speed = forwardSpeed;
}
myTransform.position += myTransform.forward * speed * Time.deltaTime;
}
if (Input.GetAxis ("Move") < 0) { // Backward
speed = backwardSpeed;
myTransform.position += -(myTransform.forward) * speed * Time.deltaTime;
}
// Rotates the player to face the mouse
Plane playerPlane = new Plane(myTransform.up, myTransform.position);
ray = Camera.main.ScreenPointToRay (Input.mousePosition);
hitdist = 0.0f;
if (playerPlane.Raycast (ray, out hitdist)) {
targetPoint = ray.GetPoint(hitdist);
myTransform.rotation = Quaternion.LookRotation(targetPoint - transform.position);
}
}
void OnCollisionEnter(Collision col) {
switch (col.transform.tag) {
case "Wall":
myTransform.position = new Vector3(myTransform.position.x, 1, myTransform.position.z);
break;
default:
myTransform.position = myTransform.position;
break;
}
}
}
Any suggestions on why it is moving itself? Or better collision detection?