Как игнорировать столкновение двух объектов при вызове скрипта в Unity3D?

По сути, я хочу иметь два объекта (fpscontroller и стену), которые сталкиваются как обычно. Но после запуска скрипта они больше не будут конфликтовать. Итак, как мне сделать этот скрипт, который заставит два объекта игнорировать столкновение друг с другом? Я попытался найти это, и то, что я получил, было Physics.IgnoreCollision, но документация по этому поводу меня смутила. И когда я попытался вставить его и заменить их переменные своими переменными, я получил кучу ошибок. Пожалуйста, помогите.


person user3583094    schedule 09.10.2015    source источник
comment
У меня есть идея для вашего решения, но не могли бы вы опубликовать часть своего кода. Кроме того, у вас в настоящее время есть коллайдеры, прикрепленные к вашим объектам? В любом случае, обратите внимание на обнаружение столкновений с помощью коллайдеров. Колайдеры Unity   -  person Eissa    schedule 10.10.2015
comment
Ну, на самом деле у меня нет никакого кода, я хочу знать, как заставить код делать то, что я хочу. И, да, у меня есть коллайдеры, прикрепленные к обоим объектам.   -  person user3583094    schedule 10.10.2015


Ответы (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, так как кажется, что вы можете отключить объект на протяжении всей игры на основе определенного триггера или чего-то еще. Это действительно зависит от того, как вы планируете запускать функцию.

Дайте мне знать, если это имеет смысл или нет. Если нет, я могу попытаться сделать его более разборчивым.

Удачи и приятного времяпровождения!

person Eissa    schedule 10.10.2015
comment
Что я должен заменить в коде и где? Как вы думаете, вы могли бы дать мне пример кода с именами, которые вы дали в сообщении? Спасибо. - person user3583094; 10.10.2015
comment
Внес некоторые изменения в мой ответ для большего пояснения. Как вы пытаетесь вызвать смену слоя? - person Eissa; 10.10.2015
comment
Я просто хочу иметь таймер, а затем иметь код, чтобы объекты не сталкивались. Кроме того, извините, но я все еще не понимаю, что заменить кодом. - person user3583094; 10.10.2015
comment
Не проблема, не нужно извиняться. Вопросы - это хорошо :D. Что вы не понимаете в приведенном выше коде (это код, который будет работать, если вы правильно его настроите)? У вас есть время работать в коде? Если это так, вы можете добавить одну из вышеперечисленных функций в свой скрипт, и когда ваше время достигнет 0, вы можете вызвать одну из вышеуказанных функций. - person Eissa; 10.10.2015
comment
Я знаю, что это очень нубский вопрос, но как мне вызвать функцию? Кроме того, я должен добавить имя переменной для моего GameObject? Потому что у меня есть общедоступный код GameObject; и стена установлена ​​как вещь. Но всякий раз, когда я заменяю GameObject в (GameObject go), я получаю ошибки. Итак, что мне делать? О, кстати, я использую первый скрипт. - person user3583094; 10.10.2015
comment
@user3583094 user3583094, не могли бы вы опубликовать сценарий, который вы в настоящее время взломали вместе? Я могу дать вам несколько советов и внести некоторые изменения, чтобы сделать его более понятным, если вы дадите мне код. В противном случае, я в конечном итоге дам вам решение... и это было бы не весело, не так ли? :P - person Eissa; 10.10.2015
comment
На самом деле я только что понял, как переключать слои, но спасибо за попытку помочь. Даже если бы я сам сейчас это понял, мне бы никогда не пришло в голову использовать слои! Так что спасибо! - person user3583094; 11.10.2015
comment
@ user3583094 рад это слышать! Продолжай в том же духе :D - person Eissa; 11.10.2015