Существует 3 вопроса о том, как настроить сцену и код:
1 . Вам не хватает Rigidbody
. Это должно быть прикреплено к GameObject "Cube", так как это плохо для присоединения Rigidbody к GameObject с помощью CharacterController.
2 . У вас есть два BoxCollider, прикрепленных к одному GameObject («Куб»). Не делайте этого. Это может вызвать много проблем, включая функцию обратного вызова, вызываемую несколько раз или не вызываемую вовсе.
Что делать, когда вам нужен как триггерный, так и не триггерный коллайдер?
Создайте пустой дочерний GameObject, поместите триггер туда. Вы можете сделать это.
3 . Вы используете CharacterController
, поэтому вы должны удалить функции OnTriggerXXX
обратного вызова. При использовании CharacterController
рекомендуется использовать функцию обратного вызова OnControllerColliderHit
.
void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
......
}
4 . CharacterController не предназначен для использования в качестве триггеров. Они используются для обнаружения столкновений.
У вас есть два варианта, чтобы он обнаруживал триггеры:
A . Удалите isTrigger из объекта "Куб"
Или
B . Добавьте дочерний пустой GameObject под CharacterController, затем добавьте CapsuleCollider или любой другой коллайдер к нему. Вам не нужно помечать его как isTrigger, так как «Куб» уже помечен как таковой. Вы также не должны иметь Rigidbody, прикрепленный к этому дочернему коллайдеру.
Создайте новый слой с именем «CC» и поместите CharacterController и новый дочерний объект GameObject в слой «CC». Перейдите к своим физическим настройкам матрицы столкновений и сделайте так, чтобы слой "CC" не сталкивался со слоем "CC". Это гарантирует, что CharacterController не обнаружит коллизию от этого дочернего объекта.
Теперь вы можете использовать функции обратного вызова OnTriggerXXX
для обнаружения столкновения между CharacterController и объектом "Cube".