В принципе, я хочу, чтобы у меня было два объекта (fpscontroller и стена), которые сталкиваются, как обычно. Но, как только скрипт запускается, они больше не будут сталкиваться. Итак, как мне сделать этот скрипт, который заставляет оба объекта игнорировать столкновение друг с другом? Я пробовал это посмотреть, и то, что я получил, было Physics.IgnoreCollision, но документация на этом меня смутила. И когда я попытался поместить его и заменив переменные моими переменными, я получил кучу ошибок. Итак, пожалуйста, помогите.Как игнорировать столкновение между двумя объектами при вызове сценария в Unity3D?
ответ
То, как я буду делать это через слои.
В единственном удобном способе игнорировать физическое столкновение между объектами - это установка объекта для игнорирования на слой, который всегда будет игнорировать объект игрока.
Таким образом, чтобы идти о ее настройке представьте себе следующее:
fpscontroller «s слой установлен на„игрок“(слой я создал и назвал такое).
стены «s слой сначала всегда устанавливается в„стенку“(опять слой я создал)
Кроме, я создаю слой, который я называю„IgnorePlayerCollisions“
Теперь я перехожу к: Редактировать> Настройки проекта> Физика Здесь я могу установить флажок, который отключит столкновение между моим player и IgnorePlayerCollisions слоев.
Теперь, во время выполнения я запустить мой сценарий, который говорит:
Изменение пристеночного слоя к "IgnorePlayerCollisions". Voila, мой игрок теперь игнорирует все столкновения с этим слоем.
Примеры кода: (Вам не нужно это все):
// 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# в скрипт и прикрепите ее к вашему желаемому игровому объекту. В вашем случае я могу прикрепить его к GameEbject Player, поскольку кажется, что вы можете отключить объект во время игры на основе определенного триггера или чего-то еще. Это зависит от того, как вы планируете запускать функцию.
Дайте мне знать, если это имеет смысл или нет. Если нет, я могу попытаться сделать его более разборчивым.
Удачи и получайте удовольствие!
Что я должен заменить кодом и где? Как вы думаете, вы можете дать мне пример кода с именами, которые вы дали в сообщении? Благодарю. – user3583094
Сделал некоторые изменения в моем ответе для получения дополнительных разъяснений. Как вы пытаетесь вызвать изменение слоя? – ejsd1989
Я просто хочу иметь таймер, а затем код, чтобы объекты не сталкивались. Кроме того, извините, но я до сих пор не понимаю, что заменить код. – user3583094
У меня есть идея для вашего решения, но вы можете опубликовать часть своего кода. Кроме того, у вас есть коллайдеры, прикрепленные к вашим объектам? В любом случае, посмотрите на обнаружение столкновений с использованием коллайдеров. [Unity Coliders] (http://docs.unity3d.com/ScriptReference/Collider.html) – ejsd1989
Ну, у меня действительно нет кода, я хочу знать, как заставить код делать то, что я хочу, чтобы он делал. И, да, у меня есть коллайдеры, прикрепленные к обоим объектам. – user3583094