2017-02-21 29 views
0

Я создал новый пустой объект игры в иерархии. Прикрепленный к нему коробке коллайдера:Как правильно использовать невидимые стены? Только после того, как игрок выходил за край рельефа для некоторых, он запускает

И изменил эти настройки на Box Collider:

я установил это центр свойство 0,0,0 и установить размер х = 500 г = 600 г = 500 Я также включил IsTrigger (флажок установлен).

И это Terrian детали:

Ширина 500 Длина 500 Высота 600

Когда я смотрю на окна сюжетного кажется, как коробка по краям местности, как это должно быть: (Может быть, в правой стороне есть некоторое пространство между коробом и местности?)

Scene Screenshot

Это сценарий, прикрепленный к пустому GameObject (InvisibleWalls).

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class BoxCollider : MonoBehaviour { 

    // Use this for initialization 
    void Start() { 

    } 

    // Update is called once per frame 
    void Update() { 

    } 

    void OnTriggerExit(Collider c) 
    { 
     Destroy(c.gameObject); 
    } 
} 

Это только для испытания. я добавил точку разрыва на линии:

Destroy(c.gameObject); 

Просто чтобы проверить, когда триггер события. Игрок (ThirdPersonController) идет со скоростью 10. Когда он добирается до края рельефа, событие не запускается. Игрок продолжает ходить в эфире еще несколько секунд, и только тогда событие запускается и останавливается на точке разрыва, но затем игрок уже выходит за пределы местности.

Event Triggered

Что я хочу сделать, это после того, как игрок касаясь стены инициировать событие и сделать что-то, например держать игрока, идущего на месте, так что стена блокирует его. Но теперь это событие срабатывает, когда игрок выходит из области местности.

ответ

1

Ну, это похоже на результат запуска игрока внутри коллайдера и использование OnTriggerExit. Этот метод не будет вызываться, пока весь коллайдер игрока не окажется за пределами указанного поля.

  1. Вы можете сделать коробку меньшей, чтобы вокруг нее была какая-то «обивка». Это, вероятно, самый быстрый, но я бы рекомендовал вариант 2 вместо этого.

  2. Вы можете сделать 4 коллайдера в коробке, по одному для каждой стены. Вместо того, чтобы иметь один гигантский коллайдер и ожидая выхода игрока, подумайте об этом, поскольку тощие стены поместили по одной стороне вашей местности. Не делайте их триггерами и вместо этого используйте событие OnCollisionEnter. Это автоматически остановит игрока, если вы переместите его через физику, и вы также получите это событие. Вы можете сделать их триггерами и использовать OnTriggerEnter, если хотите, но почему бы не использовать физическую систему с момента ее появления!

Надеюсь, это поможет, удачи в вашем проекте!

Edit: Found a video that explains method 2

+0

Как я могу получить положение краев местности автоматической? Я видел видео. Идея велика, но если я хочу построить стену точно на каждом краевом крае местности? Я имею в виду, например, построить 4 куба автоматически на каждом крае местности с определенной шириной и высотой, но как я могу получить расположение/положение и ширину рельефа местности? Вместо этого перетаскивая стены один самостоятельно. –

+0

Для этого потребуется немного скриптов. Вам нужно будет получить размер ландшафта и использовать его для размещения коллайдеров. (Центр рельефа) +/- размерОфракция в направлении/2. Например, с площадью 500x500 с центром в (0,0,0) вы разместите коллайдер на (-250,0,0), (250,0,0), (0,0,250) и (0,0 , -250). – Allen

-1

1) Вы можете позвонить OnTriggerEnter, если вы хотите, чтобы игрок будет обнаружен, прежде чем она пересекает Trigger.

2) Другой способ будет сделать спусковые коллайдеров, и они будут автоматически блокировать игрока, чтобы пересечь границу местности

+0

Быстрый просмотр рисунка показывает, что игрок всегда находится внутри триггера. OnTriggerEnter будет вызываться в начале игры и не вызываться снова, если игрок не выйдет и не войдет в зону игры. – Allen