Вы можете преобразовать коллайдер в триггер во время выполнения, используя isTrigger
свойство коллайдера, например, так:
private Collider collider ;
void Start() {
// Assuming this script goes on the head gameobject
collider = this.GetComponent<Collider>();
}
void OnCollisionEnter(Collision col) {
this.collider.isTrigger = true;
}
void OnTriggerExit(Collider other) {
this.collider.isTrigger = false;
}
@JanR предложенное решение, вероятно, чище. Но поскольку ваш вопрос заключался в том, как преобразовать коллайдер в триггер, я подумал, что стоит ответить.
В любом случае, в зависимости от геометрии сцены это всегда может стать беспорядочным. У вас будут проблемы при наличии двух или более коллайдеров, взаимодействующих с вашим коллайдером/триггером головы.
Вы можете обратиться к этой проблеме, сохранив список взаимодействующих коллайдеров, вам необходимо использовать OnCollisionEnter
для регистрации коллайдера в списке и OnCollisionExit
, чтобы отменить регистрацию. Затем вы только активируете коллайдер, когда список пуст.
Вот почему большинство из нас использует raycast вместо коллайдеров/триггеров, чтобы справиться с такими ситуациями.
Не пытайтесь преобразовать коллайдер в спусковой крючок, иметь головной коллайдер и спусковой крючок вокруг головы, а также деактивировать коллайдер, когда игрок сканирует и активирует триггер. И наоборот, когда он стоит. – JanR
Вы также можете сделать raycast с земли вверх или от его головы вверх, чтобы обеспечить достаточное пространство для стояния, если не тогда, то предотвратить постоянное действие – JanR