Collision detection

Hey there, i’m having trouble getting my “character” to collide (it’s just a cube at the moment) with any object even though it has both a character controller and a box collider.

using UnityEngine;
using System.Collections;

public class WASDMove : MonoBehaviour {

// Use this for initialization

void Start () {
	
    collider.enabled = false;
}

// Update is called once per frame
void Update () {
	if (Input.GetKey ("a")) {
		float translation = Time.deltaTime * 10;
			transform.Translate(-2,0,0);
		}

if (Input.GetKey ("d"))

{   
	float translation = Time.deltaTime * 10;
		transform.Translate (2,0,0);

        }

if (Input.GetKey ("w"))

{

	float translation = Time.deltaTime * 10;
		transform.Translate(0,0,2);

        }

if (Input.GetKey ("s"))

{   

	float translation = Time.deltaTime * 10;
		transform.Translate (0,0,-2);

    }

}

}

Any ideas? I looked in the script reference and i couldn’t find anything that would work.

Could you give a fix and explain what it does and/or how it works?

Also, how would rotation work on a character? I have a fixed camera attached to the cube, and i need it to turn when pressing wasd. As in forward on w, backward on s, etc. etc.

Thanks!

love - Totality.

Translate ignores collision. Use CharacterController to move the character. It will detect the collision.

You might want to use rigidbody.AddForce to move around instead of transforms. Only rigidbodies will collide like that. Add a rigidbody to your character then replace your code based off of this example.

if (Input.GetKey (“s”)){

rigidbody.AddForce(Vector3.-forward);

}

There will be some sliding but I’m not going to cover how to fix that because there are many ways to do it. Just look at the unity scripting reference: http://unity3d.com/support/documentation/ScriptReference/Rigidbody.html

Also make sure you enable freeze rotation on the x and z axis.

If you don’t want to go this route, take a look at the code for the fps and 3rd person controllers.