RayCast and Collisions

I found this example somewhere on Unity Answers and I’m tying to modify it so the player can’t run through walls and objects. I tried setting tags with OnCollision but it just froze my character because he can’t exit the trigger zone if it’s set to 0 on the collision.

How can I go about this? I’m using a rigid body on the character for now but this results in some undesirable effects.

  // LookAtMouse will cause an object to rotate toward the cursor, along the y axis.

  //

  // To use, drop on an object that should always look toward the mouse cursor.

  // Change the speed value to alter how quickly the object rotates toward the mouse.

  // speed is the rate at which the object will rotate

  var speed = 4.0;

  function Update () {



// Generate a plane that intersects the transform's position with an upwards normal.

var playerPlane = new Plane(Vector3.up, transform.position);

// Generate a ray from the cursor position

var ray = Camera.main.ScreenPointToRay (Input.mousePosition);

// Determine the point where the cursor ray intersects the plane.

  // This will be the point that the object must look towards to be looking at the                   mouse.

// Raycasting to a Plane object only gives us a distance, so we'll have to take the distance,

//   then find the point along that ray that meets that distance.  This will be the    point

 //   to look at.

 var hitdist = 0.0;



 

if(Input.GetMouseButton(0))

{

// If the ray is parallel to the plane, Raycast will return false.

if (playerPlane.Raycast (ray, hitdist)) {



    // Get the point along the ray that hits the calculated distance.

    var targetPoint = ray.GetPoint(hitdist);

    // Determine the target rotation.  This is the rotation if the transform looks at the target point.

    var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);

    // Smoothly rotate towards the target point.

      transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed     *      Time.deltaTime);

    // Move the object forward.

    transform.position += transform.forward * speed * Time.deltaTime;

	}

}

    }

Don’t do “transform.position = something” not transform.Translate.

instead use a move function, like the one characterController has. setting position directly is almost ALWAYS problematic.