2015-10-09 7 views
1

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

+1

У меня есть идея для вашего решения, но вы можете опубликовать часть своего кода. Кроме того, у вас есть коллайдеры, прикрепленные к вашим объектам? В любом случае, посмотрите на обнаружение столкновений с использованием коллайдеров. [Unity Coliders] (http://docs.unity3d.com/ScriptReference/Collider.html) – ejsd1989

+0

Ну, у меня действительно нет кода, я хочу знать, как заставить код делать то, что я хочу, чтобы он делал. И, да, у меня есть коллайдеры, прикрепленные к обоим объектам. – user3583094

ответ

1

То, как я буду делать это через слои.

В единственном удобном способе игнорировать физическое столкновение между объектами - это установка объекта для игнорирования на слой, который всегда будет игнорировать объект игрока.

Таким образом, чтобы идти о ее настройке представьте себе следующее:

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

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

Удачи и получайте удовольствие!

+0

Что я должен заменить кодом и где? Как вы думаете, вы можете дать мне пример кода с именами, которые вы дали в сообщении? Благодарю. – user3583094

+0

Сделал некоторые изменения в моем ответе для получения дополнительных разъяснений. Как вы пытаетесь вызвать изменение слоя? – ejsd1989

+0

Я просто хочу иметь таймер, а затем код, чтобы объекты не сталкивались. Кроме того, извините, но я до сих пор не понимаю, что заменить код. – user3583094