Главная » Статьи » Программирование » Unity

Unity. Как не дать выйти персонажу за границу экрана?

Как не дать объекту выйти за границы экрана или наоборот определить, когда враг появляется в пределах видимости? Последнее конечно проще узнать, проверив видимость Render с помощью функции renderer.isVisible.

Очень часто в играх встречается ситуация, когда при управлении персонажем он может вылететь за границы экрана. Это может случиться даже в том случае, если вы установили барьеры по границам, которые недавно добавили в Unity, но объект может просто пролететь сквозь барьер, у меня таких случаев было не мало, когда я решил использовать эти барьеры на границах экрана. Поэтому предлагаю использовать способ, который я очень применяю в своих играх.

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

public class Border : MonoBehaviour {

    public float leftBorder;
    public float rightBorder;
    public float topBorder;
    public float bottomBorder;

    void Start()
    {
        float dist = Vector3.Distance (pos, Camera.main.transform.position);
        leftBorder = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, dist)).x;
        rightBorder = Camera.main.ViewportToWorldPoint(new Vector3(1, 0, dist)).x;
        topBorder = Camera.main.ViewportToWorldPoint(new Vector3(0, 1, dist)).y;
        bottomBorder = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, dist)).y;
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 pos = transform.position;
        transform.position = new Vector3 (Mathf.Clamp (pos.x, leftBorder, rightBorder), Mathf.Clamp (pos.y, bottomBorder, topBorder), pos.z);
    }
}

Скрипт небольшой и совершенно не сложный, но полезный. Можно конечно использовать коллайдеры добавленные недавно в Unity, они еще сами по себе отталкивают объекты и их предназначением являются барьерные функции, но я заметил, что при сильном ударе об них объект можно просто застрять в барьере и там и останется. Можете конечно считать меня лохом, что у меня бывают такие глюки, но все-таки стараюсь оберегать себя уже давно проверенными способами.

По поводу примера тут всего две функции Start и Update. В первой при запуске сцене произойдет вычисления координат барьеров leftBorder, rigthBorder - по оси X (левая и правая границы экрана), topBorder, bottomBorder - по оси Y (нижняя и верхняя границы экрана). В функции Update мы просто будем пересчитывать позицию объекта проверяю тем самым не выходит ли он за рамки так действует Mathf.Clamp(value,min,max) , если число выходит за рамки минимума и максимума, то функция вернет одно из двух.

  

Далее проверяем этот скрипт. Создаем новый проект. Создаем на нем объект. Цепляем на него любой спрайт который заходим, я прикрепил на объект спрайт knob, это же так или иначе проверка, а не крутая игрушка. Пишем какой-нибудь скрипт для управления и цепляем его на объект и цепляем наш скрипт указанный выше. Запускаем сцену и смотрим, что получилось. Если вам лень делать тестовый пример самим, то можете скачать пример по ссылке - http://cod2014.ru/publ_files/unity/Lang.zip

 

Категория: Unity | Добавил: Алексей (01.04.2017) | Автор: Фролов Алексей Алексеевич E
Просмотров: 3412 | Теги: unity управление, Unity, unity барьеры | Рейтинг: 4.5/2
Всего комментариев: 0
avatar