Обнаружение столкновения не работает единство
Во-первых, я знаю, что этот вопрос задавался много, но я не могу найти решение, поэтому моя проблема в том, что я делаю обучающую игру, и у меня есть вена и кровоток (со многими коробочными коллайдерами) и одна кровь ячейка (также с коробочным коллайдером), однако я хочу, чтобы ячейка разрушалась, когда достигала настенного коллайдера, а не просто оставалась там, вот проект!
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 к другому подвижному игровому объекту.
У меня есть несколько дополнительных вопросов, которые могут привести к решению.
Во-первых, имеет ли объект, содержащий ваш сценарий "столкновения", твердое тело и коллайдер? Во-вторых, есть ли в стене как твёрдое тело, так и коллайдер?
Обычно, если эти условия выполняются, столкновения будут работать. Пара других вещей, которые могут быть проблемой:
- Проверьте, проверен ли istrigger для любого объекта и удостоверьтесь, что он не проверен.
- Проверьте и убедитесь, что жесткие тела на обоих не кинематические.
Я наконец исправил это, я действительно не знаю, была ли это проблема, но я просто удалил твердое тело из родителя стены, и оно начало работать!, я не знаю, что сделал твердое тело, но только с этим проблема была исправлено, спасибо всем за помощь!:D
Убедитесь, что в вашем коде учитываются следующие вещи:
- Все игровые объекты должны содержать подключенный коллайдер , а игровой объект игрока должен содержать компонент твердого тела .
- Размер коллайдера должен измениться на ширину и высоту компонента вместо значений по умолчанию (1,1).