BelgianWizard
BelgianWizard

Reputation: 109

Unity3D Collision with character controller

i'm new to unity and i'm trying to make an endless runner. When my player (a ball) hits one of the walls the game needs to go the scene: LostMenu. My problem is that the collision doesn't work. Nothing happens when they collide... Here are the inspectors on both the player and the walls: Walls http://prntscr.com/a2pgzm Player http://prntscr.com/a2ph66 .

The collision script on the walls:

using UnityEngine;
using System.Collections;

public class LostByWallCSR : MonoBehaviour
{
    void OnCollisionEnter (Collision col)
    {
        if(col.gameObject.name == "Player")
        {
             Application.LoadLevel("LostMenu");
             Debug.Log ("WORKS!");
        }
   }
}

The movement script on the player:

using UnityEngine;
using System.Collections;

public class CharacterControllerz : MonoBehaviour {

public float speed = 5f;
public float gravity = 20f;
private Vector3 moveDirections = new Vector3();
private Vector3 inputs = new Vector3();

void FixedUpdate()
{
    CharacterController cc = GetComponent<CharacterController>();
    if (cc.isGrounded) 
    {
        if (Input.GetKey("left"))
            inputs.z = 3;
        else if (Input.GetKey("right"))
            inputs.z = -3;
        else
            inputs.z = 0;

        moveDirections = transform.TransformDirection(inputs.x, 0, inputs.z) * speed;                    
    }

    inputs.x = 5;
    moveDirections.y = inputs.y - gravity;
    cc.Move(moveDirections * Time.deltaTime);
}
}

Any idea on how to setup the collision properly? Attaching a rigibody is not helping it. Unless i'm missing something ofcourse.

Upvotes: 3

Views: 11459

Answers (2)

You need to use OnControllerColliderHit method

private void OnControllerColliderHit(ControllerColliderHit hit)
{
    if (hit.gameObject.CompareTag("Trap"))
    {
        Debug.Log("colisiono with trap");
        playerDentro = true;
    }
    else
    {
        if (!hit.gameObject.CompareTag("Trap"))
        {
            Debug.Log("player salio de la trampa");
            playerDentro = false;
        }
    }
}e

Upvotes: 1

AminSojoudi
AminSojoudi

Reputation: 2016

Make sure both objects have a collider component.

You need to attach a rigidbody component to one of the objects.(if you don't attach rigid body it will not work)

your Sphere collider is Trigger , remove that or change your function to

public void OnTriggerEnter(Collider other)
    {

    }

Upvotes: 2

Related Questions