По сути, я хочу иметь два объекта (fpscontroller и стену), которые сталкиваются как обычно. Но после запуска скрипта они больше не будут конфликтовать. Итак, как мне сделать этот скрипт, который заставит два объекта игнорировать столкновение друг с другом? Я попытался найти это, и то, что я получил, было Physics.IgnoreCollision, но документация по этому поводу меня смутила. И когда я попытался вставить его и заменить их переменные своими переменными, я получил кучу ошибок. Пожалуйста, помогите.
Как игнорировать столкновение двух объектов при вызове скрипта в Unity3D?
Ответы (1)
Я бы сделал это через слои.
В единстве удобный способ игнорировать физическое столкновение между объектами — установить игнорируемый объект на слой, который ваш объект игрока всегда будет игнорировать.
Итак, чтобы приступить к настройке, представьте следующее:
Слой fpscontroller установлен на "player" (это слой, который я создал и назвал так).
Слой стены изначально всегда имеет значение «стена» (еще раз слой, который я создал)
Дополнительно я создаю слой, который я называю "IgnorePlayerCollisions".
Теперь я иду в: Edit> Project Settings> Physics Здесь я могу установить флажок, который отключит коллизии между моим player и IgnorePlayerCollisions слои.
Теперь во время выполнения я запускаю свой скрипт, который говорит:
Измените слой стены на «IgnorePlayerCollisions». Вуаля, мой плеер теперь игнорирует все коллизии с этим слоем.
Примеры кода: (все это вам не нужно):
// Function to Change a GameObject Layer to the Ignore Layer
public void ChangeGameObjectLayerToIgnore(GameObject go) {
go.layer = [Index of Ignore Layer];
}
// Function to Change "This" GameObjects layer to any other layer
public void ChangeThisGameObjectLayer(int layerIndex) {
this.gameObject.layer = layerIndex;
}
// Change a GameObject layer to another layer
public void ChangeGameObjectLayer(GameObject go, int layerIndex) {
go.layer = layerIndex;
}
Как?
Поместите функцию C# в скрипт и прикрепите ее к желаемому игровому объекту. В вашем случае я могу прикрепить его к своему Player GameObject, так как кажется, что вы можете отключить объект на протяжении всей игры на основе определенного триггера или чего-то еще. Это действительно зависит от того, как вы планируете запускать функцию.
Дайте мне знать, если это имеет смысл или нет. Если нет, я могу попытаться сделать его более разборчивым.
Удачи и приятного времяпровождения!