user145708
user145708

Reputation: 131

Collision detection not working unity

First, I know that this question has been asked a lot, but I cant find a solution, so mi problem is, Im making an educational game, and I have a vein and the blood flow (with many box colliders) and a single blood cell (also with a box collider) however i want the cell to destroy when it reaches the wall collider, but it doesn't it just stays there, here is the project!

http://tinypic.com/r/10706es/9

(cant upload images because of my reputation, sorry)

The collider where I want to destroy my cell is the pink collider, however when it touches it it just does nothing, here's my script

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class collision : MonoBehaviour {
    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void OnCollisionEnter(Collision col)
    {
        print("hihi");
        if (col.gameObject.tag == "Collider")
        {
            Destroy(gameObject);
        }
    }
}

Also, here is the AddForce script

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AddForce : MonoBehaviour {

    public float thrust;
    public Rigidbody rb;
    private Vector3 up;
    private bool move;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        up = new Vector3(0, 1, 0);
        move = false;
    }

    void FixedUpdate()
    {
        if (Input.GetKey("space"))
        {
            if (rb.velocity.magnitude < 5)
                rb.AddForce(up * thrust);
            move = true;
        }

        else
        {
            if (move == true)
                rb.velocity = new Vector3(0, -0.5F, 0);
        }


    }
}

thanks for your help guys! :D

Upvotes: 12

Views: 57015

Answers (5)

Codemaker2015
Codemaker2015

Reputation: 1

Ensure the following things are considered in your code,

  1. All gameobject should contain collider attached and the player gameobject should contain the rigidbody component in it.
  2. The collider size should change to the width and height of the component instead of default (1,1) values.

enter image description here

Upvotes: 0

Kleber
Kleber

Reputation: 1065

It can be several things, whether you are using OnTriggerEnter or OnCollisionEnter:

  • Missing RigidBody (the most common). At least one of the GameObjects involved needs to have a RigidBody. (check if at least one of them have a RigidBody attached and, if you are using OnCollisionEnter, does not have the "Is Kinematic" checked). See the below collision matrix for more information.

  • Missing tag. The GameObject from collision does not have a "Collider" tag (try to remove the if statement to test it) (to compare tags, use collider.gameObject.CompareTag("Collider"), it has a better performance)

  • Undetectable collision. The physics Layer Collision Matrix is set to not detect collision between the layers the objects are (enter Edit > Project > Phisics and check if the encounter of the layer of both GameObjects are checked inside Layer Collision Matrix)

  • Wrong Collider configuration. one or both of the GameObjects have a small/wrong placed or absent Collider (check if they both have a Collider component and if their size are correct)

If it's working, you should be able to press play and drag one GameObject into the other one and your Debug.Log will appear.

As an advice, use tag names that better describe the group of GameObjects that will be part of it, like "RedCells" or "WhiteCells". It'll be easier to configure the Layer Collision Matrix and improve the performance of your game.

Another advice: for colliders that just destroys another GameObject (don't react, like bump or actually collide) I use triggers. That way, the collision between them will not alter anything in the remaining GameObject (like direction/velocity/etc). To do that, check the Is Trigger in the Collider and use OnTriggerEnter instead of OnCollisionEnter.

Collision matrix
Source

Upvotes: 27

PedPak
PedPak

Reputation: 177

some times you added Nav Mesh Agent component to your game object ( to auto route operation in strategic game and ...). in this case, this game object does not attend to collider. So, if you really need this Nav Mesh Agent, you should add Nav Mesh Obstacle to other fixed game object and also add Nav Mesh Agent to other movable game object.

Upvotes: 2

user145708
user145708

Reputation: 131

I've finally fixed it, I dont really know if this was the problem, but i just removed the rigidbody from the parent of the wall and it started working!, I dont know what the rigidbody did, but just with that the problem was fixed, thank you all for your help! :D

Upvotes: 1

Nick Crow
Nick Crow

Reputation: 11

I have a few followup questions which might lead to a solution.

First, does the object holding your 'collision' script have a rigidbody and a collider on it? Second, does the wall have both a rigidbody and collider?

Usually if those conditions are met, then collisions will work. A couple other things that could be the problem:

  1. Check if you have istrigger checked for either object and make sure it is unchecked.
  2. Check and make sure the rigidbodies on both are non-kinematic.

Upvotes: 1

Related Questions