Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/88: Рейтинг темы: голосов - 88, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 13.10.2014
Сообщений: 12

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

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

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Подскажите пожалуйста, как ограничить выход камеры с ортографической проекцией за определённые поля, представленные в виде блоков?
На этой картинке показано "игровое поле", которое состоит из отдельных блоков и оно ограничено блоками чёрного цвета, нужно запретить камере выходить за пределы этих чёрных блоков.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.08.2015, 00:33
Ответы с готовыми решениями:

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

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

Ограничение вращения камеры при использовании функции Transform.RotateAround
Здравствуйте! Я не могу разобраться как ограничить вращения камеры при использовании функции Transform.RotateAround. Я пытался использовать...

5
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,969
Записей в блоге: 233
30.08.2015, 09:06
В стандарных примерах есть скрипт 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
2 / 2 / 0
Регистрация: 13.10.2014
Сообщений: 12
30.08.2015, 12:49  [ТС]
Не могу найти этот скрипт, можете скинуть его целиком?
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,969
Записей в блоге: 233
30.08.2015, 12:54
Он находится в пакете: 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
2 / 2 / 0
Регистрация: 13.10.2014
Сообщений: 12
30.08.2015, 13:01  [ТС]
Это не совсем то, что мне нужно. Здесь сама камера не выходит за пределы координат, а мне нужно, что бы не выходила зона видимости. Зона видимости в ортографической карте определяется полем 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
103 / 90 / 19
Регистрация: 15.04.2015
Сообщений: 353
31.08.2015, 10:51
Ну так, берите в учет не только координаты камеры, но и ее размер. Она же ортографическая, значит, вам достаточно Считать Size, и его горизонтальный аналог. В итоге, используя скрипт, ограничивающий камеру по координатам, вы можете просто внести правки в координаты в зависимости от параметров камеры, например, если вам не нужно, чтобы Y поля зрения не выходит за 5, а размер камеры 1, то координата ограничения будет 4.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2015, 10:51
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru