Форум программистов, компьютерный форум, киберфорум
Наши страницы

Unity, Unity3D

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
_Axe_
2 / 2 / 0
Регистрация: 13.10.2014
Сообщений: 12
#1

Ограничение выхода камеры за поля - Unity, Unity3D

30.08.2015, 00:33. Просмотров 2666. Ответов 5
Метки нет (Все метки)

Доброго времени суток. Подскажите пожалуйста, как ограничить выход камеры с ортографической проекцией за определённые поля, представленные в виде блоков?
На этой картинке показано "игровое поле", которое состоит из отдельных блоков и оно ограничено блоками чёрного цвета, нужно запретить камере выходить за пределы этих чёрных блоков.
Ограничение выхода камеры за поля
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2015, 00:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ограничение выхода камеры за поля (Unity, Unity3D):

Ограничение передвижения камеры - Unity, Unity3D
Здравствуйте, извиняюсь за глупый вопрос, но как сделать слежение камеры за игроком только по оси Y на пример? Сделал как в официальном...

Ограничение движения камеры - Unity, Unity3D
Здравствуйте!Подскажите как ограничить полёт камеры?Может создать Vector?

Объекты за пределом поля видимости камеры - Unity, Unity3D
Доброго времени суток. Подскажите, пожалуйста, как сделать взаимодействия с объектами, которые располагаются за пределами камеры? Сильно не...

Запретить движение камеры, при котором центр вью выйдет за пределы поля - Unity, Unity3D
Добрый день. Ортографическая камера. Топ-даун игра. Сгенерированное поле объектов - земля. Камера может поворачиваться как угодно. Сделал...

Ограничение доступа выхода в интернет на модеме D-link500t - Сетевое оборудование
Объясняю ситуацию: у меня модем настроен роутером сервак на котором установлен UserGate4 выходит через модем остальные машины...

Ограничение продолжительности моделирования по интенсивности выхода обработанных заявок - GPSS
Как задать ограничение на время моделирования, учитывая и максимальное количество обработанных транзактов?

5
8Observer8
1895 / 1208 / 164
Регистрация: 05.10.2013
Сообщений: 3,926
Записей в блоге: 55
30.08.2015, 09:06 #2
В стандарных примерах есть скрипт CameraFollow. Можно его переделать.

C#
1
2
3
4
5
6
7
8
9
10
    public class CameraFollow : MonoBehaviour
    {
        public float xMargin = 1f; // Distance in the x axis the player can move before the camera follows.
        public float yMargin = 1f; // Distance in the y axis the player can move before the camera follows.
        public float xSmooth = 8f; // How smoothly the camera catches up with it's target movement in the x axis.
        public float ySmooth = 8f; // How smoothly the camera catches up with it's target movement in the y axis.
        public Vector2 maxXAndY; // The maximum x and y coordinates the camera can have.
        public Vector2 minXAndY; // The minimum x and y coordinates the camera can have.
        public Transform minCameraPoint;
        public Transform leftBound;
0
_Axe_
2 / 2 / 0
Регистрация: 13.10.2014
Сообщений: 12
30.08.2015, 12:49  [ТС] #3
Не могу найти этот скрипт, можете скинуть его целиком?
0
8Observer8
1895 / 1208 / 164
Регистрация: 05.10.2013
Сообщений: 3,926
Записей в блоге: 55
30.08.2015, 12:54 #4
Он находится в пакете: Standard Assets\2D.unitypackage

CameraFollow.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using UnityEngine;
 
 
namespace UnityStandardAssets._2D
{
    public class CameraFollow : MonoBehaviour
    {
        public float xMargin = 1f; // Distance in the x axis the player can move before the camera follows.
        public float yMargin = 1f; // Distance in the y axis the player can move before the camera follows.
        public float xSmooth = 8f; // How smoothly the camera catches up with it's target movement in the x axis.
        public float ySmooth = 8f; // How smoothly the camera catches up with it's target movement in the y axis.
        public Vector2 maxXAndY; // The maximum x and y coordinates the camera can have.
        public Vector2 minXAndY; // The minimum x and y coordinates the camera can have.
 
        private Transform m_Player; // Reference to the player's transform.
 
        private void Awake()
        {
            // Setting up the reference.
            m_Player = GameObject.FindGameObjectWithTag("Player").transform;
        }
 
 
        private bool CheckXMargin()
        {
            // Returns true if the distance between the camera and the player in the x axis is greater than the x margin.
            return Mathf.Abs(transform.position.x - m_Player.position.x) > xMargin;
        }
 
 
        private bool CheckYMargin()
        {
            // Returns true if the distance between the camera and the player in the y axis is greater than the y margin.
            return Mathf.Abs(transform.position.y - m_Player.position.y) > yMargin;
        }
 
 
        private void Update()
        {
            TrackPlayer();
        }
 
 
        private void TrackPlayer()
        {
            // By default the target x and y coordinates of the camera are it's current x and y coordinates.
            float targetX = transform.position.x;
            float targetY = transform.position.y;
 
            // If the player has moved beyond the x margin...
            if (CheckXMargin())
            {
                // ... the target x coordinate should be a Lerp between the camera's current x position and the player's current x position.
                targetX = Mathf.Lerp(transform.position.x, m_Player.position.x, xSmooth*Time.deltaTime);
            }
 
            // If the player has moved beyond the y margin...
            if (CheckYMargin())
            {
                // ... the target y coordinate should be a Lerp between the camera's current y position and the player's current y position.
                targetY = Mathf.Lerp(transform.position.y, m_Player.position.y, ySmooth*Time.deltaTime);
            }
 
            // The target x and y coordinates should not be larger than the maximum or smaller than the minimum.
            targetX = Mathf.Clamp(targetX, minXAndY.x, maxXAndY.x);
            targetY = Mathf.Clamp(targetY, minXAndY.y, maxXAndY.y);
 
            // Set the camera's position to the target position with the same z component.
            transform.position = new Vector3(targetX, targetY, transform.position.z);
        }
    }
}
0
_Axe_
2 / 2 / 0
Регистрация: 13.10.2014
Сообщений: 12
30.08.2015, 13:01  [ТС] #5
Это не совсем то, что мне нужно. Здесь сама камера не выходит за пределы координат, а мне нужно, что бы не выходила зона видимости. Зона видимости в ортографической карте определяется полем Size.
Кстати, вот мой скрипт управления камерой.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using UnityEngine;
using System.Collections;
 
public class CameraController:MonoBehaviour
{
    public float fieldHeight=30;
    public float fieldwidth=50;
    public float sensitivity=5;
    void Update()
    {
        gameObject.GetComponent<Camera>().orthographicSize-=Input.GetAxis("Mouse ScrollWheel");
        if(/*Input.mousePosition.x>=Screen.width||*/Input.GetKey(KeyCode.RightArrow))
        {
            transform.Translate(sensitivity*Time.deltaTime,0,0);
        }
        if(/*Input.mousePosition.y>=Screen.height||*/Input.GetKey(KeyCode.UpArrow))
        {
            transform.Translate(0,sensitivity*Time.deltaTime,0);
        }
        if(/*Input.mousePosition.x<=0||*/Input.GetKey(KeyCode.LeftArrow))
        {
            transform.Translate(-sensitivity*Time.deltaTime,0,0);
        }
        if(/*Input.mousePosition.y<=0||*/Input.GetKey(KeyCode.DownArrow))
        {
            transform.Translate(0,-sensitivity*Time.deltaTime,0);
        }
    }
}
0
lentinant
96 / 83 / 19
Регистрация: 15.04.2015
Сообщений: 353
Завершенные тесты: 1
31.08.2015, 10:51 #6
Ну так, берите в учет не только координаты камеры, но и ее размер. Она же ортографическая, значит, вам достаточно Считать Size, и его горизонтальный аналог. В итоге, используя скрипт, ограничивающий камеру по координатам, вы можете просто внести правки в координаты в зависимости от параметров камеры, например, если вам не нужно, чтобы Y поля зрения не выходит за 5, а размер камеры 1, то координата ограничения будет 4.
1
31.08.2015, 10:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2015, 10:51
Привет! Вот еще темы с ответами:

Ограничение вариантов заполнения поля в форме на основе уже заполненного поля - MS Access
Здравствуйте. Сразу к делу- Имеется база, в ней,кроме прочих,существуют таблицы &quot;Структура мест склада&quot; имеющая поля &quot;Тип Места&quot; и...

Контроль выхода за границы памяти при заполнении поля класса - C++
Доброго времени суток В классе есть поле, представляющее собой динамический массив. Есть метод, который может это поле &quot;заполнить&quot;. ...

Ограничение для поля - Delphi БД
Подскажите пожалуйста если мне надо надо что бы сумма была больше 500р. И если сумма меньше 500р то не давала ввести в поле значение и...

Ограничение длины поля! - MS Access
В базе штук 30 разных полей. Понадобилось увеличить размер одного из них - текстового, с 16 до 17 символов. Получил ошибку -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru