Обнаружение столкновения не работает единство

Во-первых, я знаю, что этот вопрос задавался много, но я не могу найти решение, поэтому моя проблема в том, что я делаю обучающую игру, и у меня есть вена и кровоток (со многими коробочными коллайдерами) и одна кровь ячейка (также с коробочным коллайдером), однако я хочу, чтобы ячейка разрушалась, когда достигала настенного коллайдера, а не просто оставалась там, вот проект!

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

(не могу загрузить изображения из-за моей репутации, извините)

Коллайдер, где я хочу уничтожить свою клетку, - розовый коллайдер, однако, когда он касается его, он просто ничего не делает, вот мой сценарий

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);
        }
    }
}

Кроме того, вот скрипт AddForce

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);
        }


    }
}

Спасибо за помощь ребята!:D

5 ответов

Это может быть несколько вещей:

  • Отсутствует RigidBody (самый распространенный). По крайней мере один из задействованных GameObjects должен иметь Rigid Body (проверьте, есть ли по крайней мере у одного из них прикрепленный RigidBody и не отмечен ли "Is Kinematic")
  • Отсутствующий тег GameObject от столкновения не имеет тега "Collider" (попробуйте удалить оператор if, чтобы проверить его) (для сравнения тегов используйте collider.gameObject.CompareTag("Collider"), он имеет лучшую производительность)
  • Неопределяемое столкновение. Физическая матрица столкновений слоев настроена так, чтобы не обнаруживать столкновения между слоями, в которых находятся объекты (введите "Правка"> "Проект"> "Физика" и проверьте, проверяется ли столкновение слоев обоих объектов GameObject внутри Матрицы столкновений слоев)
  • Неправильная конфигурация коллайдера. один или оба GameObjects имеют маленький / неправильно размещенный или отсутствующий коллайдер (проверьте, есть ли у них обоих компонент Collider и правильный ли их размер)

Если он работает, вы можете нажать play и перетащить один GameObject в другой, и появится ваш Debug.Log.

В качестве совета, используйте имена тегов, которые лучше описывают группу GameObjects, которая будет частью этого, например, "RedCells" или "WhiteCells". Будет проще настроить матрицу столкновений слоев и повысить производительность вашей игры.

Еще один совет: для коллайдеров, которые просто уничтожают другой GameObject (не реагируйте, как удары или действительно сталкиваются), я использую триггеры. Таким образом, столкновение между ними не изменит ничего в оставшемся GameObject (например, направление / скорость / и т. Д.). Для этого проверьте Is Trigger в коллайдере и используйте OnTriggerEnter вместо OnCollisionEnter.

Несколько раз вы добавляли компонент Nav Mesh Agent к своему игровому объекту (для автоматического выполнения маршрута в стратегической игре и...). в этом случае этот игровой объект не обслуживает коллайдер. Итак, если вам действительно нужен этот агент Mes Mesh, вы должны добавить препятствие Nav Mesh к другому фиксированному игровому объекту, а также добавить агент Nav Mesh Agent к другому подвижному игровому объекту.

У меня есть несколько дополнительных вопросов, которые могут привести к решению.

Во-первых, имеет ли объект, содержащий ваш сценарий "столкновения", твердое тело и коллайдер? Во-вторых, есть ли в стене как твёрдое тело, так и коллайдер?

Обычно, если эти условия выполняются, столкновения будут работать. Пара других вещей, которые могут быть проблемой:

  1. Проверьте, проверен ли istrigger для любого объекта и удостоверьтесь, что он не проверен.
  2. Проверьте и убедитесь, что жесткие тела на обоих не кинематические.

Я наконец исправил это, я действительно не знаю, была ли это проблема, но я просто удалил твердое тело из родителя стены, и оно начало работать!, я не знаю, что сделал твердое тело, но только с этим проблема была исправлено, спасибо всем за помощь!:D

Убедитесь, что в вашем коде учитываются следующие вещи:

  1. Все игровые объекты должны содержать подключенный коллайдер , а игровой объект игрока должен содержать компонент твердого тела .
  2. Размер коллайдера должен измениться на ширину и высоту компонента вместо значений по умолчанию (1,1).

Другие вопросы по тегам