- Home /
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.
Do the other objects have a collider? You can also check to see if there are collisions with this code, and if so, what is colliding:
void OnCollisionEnter (Collision check)
{
Debug.Log(check.gameObject.name)
}
Answer by GC1983 · May 27, 2012 at 02:27 AM
Translate ignores collision. Use CharacterController to move the character. It will detect the collision.
Answer by Chimera3D · May 27, 2012 at 02:29 AM
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.
Like I said. Use CharacterController to move your object. AddForce will only cause more frustration because it uses physics. Unless you want that of course. You dont need both the CharController and Box Collider. The Char Controller has a capsule collider attached to it. Just resize it to your liking.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Block Collision Sliding off 0 Answers
First Person Controller Rotation + Pistol not following camera 1 Answer
How to destroy bullet on collision! 2 Answers
Sphere detection system 2 Answers