С Новым годом! Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134

Ограничение движения камеры

02.03.2016, 14:24. Показов 4089. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!Подскажите как ограничить полёт камеры?Может создать Vector?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2016, 14:24
Ответы с готовыми решениями:

Как сделать ограничение движения камеры по У?
Вопрос состоит в том что, нужно сделать ограничение по движению в меньшую сторону оси У. У меня 2D проект, космический корабль летит...

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

Ограничение поворота камеры
Если что извините, я ещё новичок) Камера должна быть ограничена по Y от -80 до 70, но останавливается только на 70 и 0 Что не так?...

22
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
02.03.2016, 15:51
Blablablablabla, цель ограничения?
1
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134
02.03.2016, 22:57  [ТС]
Не дать камере вылететь за Террейн!
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
03.03.2016, 03:21
Blablablablabla, а если точнее, то не дать краю террейну попасть в камеру
1. Создаём функцию с возвратом bool и входом Vector3
2. В функции создаем 4 луча через ScreenPointToRay в углах экрана
3. Сдвигаем у всех лучей origin на входящий Vector3
4. Делаем рейкаст с учетом только слоя террейна
5. Если ВСЕ рейкасты попали в террейн - делаем return true, иначе return false
6. Перед движением камеры вызываем функцию с параметром направления сдвига и если функция дала true - двигаем камеру
Profit! Теперь даже повернутая камера не вылетит за край террейна.
2
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134
03.03.2016, 13:30  [ТС]
Ну попробую,может что-нибудь попроще придумаю.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
05.03.2016, 15:32
Blablablablabla, а куда ещё проще? 15 строк кода всего, простейшая логика и камеру можно хоть как крутить.
1
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134
05.08.2016, 22:42  [ТС]
Что такое входящий вектор?

Добавлено через 36 минут
Я так понимаю этот вектор для того,чтобы камера не зависла,но чёт не догоняю немного.Его получается надо вручную калякать?
0
 Аватар для Tsin
1180 / 488 / 188
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
05.08.2016, 23:00
Blablablablabla, это вектор, на который планируется сдвинуть камеру. Его надо передать в качестве входящего параметра в функцию.

C#
1
2
3
4
5
private bool CameraCanMove(Vector3 deltaPosition)
{
    //implement method logic
    return true;
}
1
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
06.08.2016, 07:35
Blablablablabla, управление же есть, которое камеру двигает - из него вектор и делайте.
1
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134
06.08.2016, 11:01  [ТС]
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
private bool BorderCmaeraMove(Vector3 CameraTR)
    {
        Ray _ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width, Screen.height, 0));
        RaycastHit _hit;
        if (Physics.Raycast(_ray, out _hit, Ground))
        {
 
        }
        Debug.DrawRay(_ray.origin, _ray.direction * 100, Color.yellow);
 
        Ray ray2 = Camera.main.ScreenPointToRay(new Vector3(Screen.width, 0, 0));
        RaycastHit hit2;
        if (Physics.Raycast(ray2, out hit2, Ground))
        {
 
        }
        Debug.DrawRay(ray2.origin, ray2.direction * 100, Color.green);
 
        Ray ray3 = Camera.main.ScreenPointToRay(new Vector3(0, 0, 0));
        RaycastHit hit3;
        if (Physics.Raycast(ray3, out hit3, Ground))
        {
 
        }
        Debug.DrawRay(ray3.origin, ray3.direction * 100, Color.blue);
 
        Ray ray4 = Camera.main.ScreenPointToRay(new Vector3(0, Screen.height, 0));
        RaycastHit hit4;
        if (Physics.Raycast(ray4, out hit4, Ground))
        {
 
        }
        Debug.DrawRay(ray4.origin, ray4.direction * 100, Color.red);
        if (_hit.collider && hit2.collider && hit3.collider && hit4.collider != null)
        {
            return true;
        }
        else
        {
            return false;
        }
Надеюсь хоть что-то правильно
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
06.08.2016, 12:08
Синтаксис правильный, алгоритм - нет.
Вам надо передавать вектор сдвига и делать
C#
1
2
Ray _ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width, Screen.height, 0));
_ray.origin += CameraTR;
И так со всеми лучами. А после создания лучей
C#
1
2
3
4
5
6
if (Physics.Raycast(_ray, out _hit, Ground) &&
Physics.Raycast(_ray2, out _hit, Ground) &&
Physics.Raycast(_ray3, out _hit, Ground) &&
Physics.Raycast(_ray4, out _hit, Ground) )
        { return true; }
 else {return false; }
1
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134
10.08.2016, 19:44  [ТС]
А как передать методу,который двигает камеру то,что метод bool вернул true?
0
 Аватар для Tsin
1180 / 488 / 188
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
10.08.2016, 20:00
Blablablablabla, ну основы же языка:

C#
1
2
3
4
if (BorderCameraMove(someVector))
{
    //move camera...
}
1
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134
11.08.2016, 11:37  [ТС]
Мда!Боль,печаль и разочарование!

Добавлено через 15 минут
Получается,что если 1Н луч выпадает с террей'на,то вся камера замирает на месте,но я знаю как это исправить.Спасибо всем!
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
11.08.2016, 14:32
Значит что-то не так делаете. Или камеру так сдвинули что она не может попасть на террейн.
0
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134
20.08.2016, 22:03  [ТС]
Камера в террейн попадает,а движение реализовано через:
C#
1
2
3
4
            if (Input.mousePosition.x > Screen.width - 15)
            {
                transform.position += transform.right * Time.deltaTime * CameraScroll;
            }
Можт я её двигаю как-то не правильно?

Добавлено через 2 минуты
Сдвигаем origin на входящий вектор это,как бы,наперёд проверяем попали ли лучи или нет?По есть лучи пускаются перед камерой?

Добавлено через 2 минуты
Ещё одни моменты:
-камеру двигает пустой объект под углом 90гр,скрипт весит на нём.
-сама камера находится под углом 60гр.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
20.08.2016, 22:35
Цитата Сообщение от Blablablablabla Посмотреть сообщение
Сдвигаем origin на входящий вектор это,как бы,наперёд проверяем попали ли лучи или нет?
Именно.
0
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134
23.08.2016, 11:42  [ТС]
А из каких значений "Входящий вектор" складывается?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
23.08.2016, 13:33
Blablablablabla, из направления движения камеры
0
3 / 3 / 0
Регистрация: 16.10.2015
Сообщений: 134
23.08.2016, 16:40  [ТС]
прибавлять положение лучей к положению камеры?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.08.2016, 16:40
Помогаю со студенческими работами здесь

Ограничение выхода камеры за поля
Доброго времени суток. Подскажите пожалуйста, как ограничить выход камеры с ортографической проекцией за определённые поля, представленные...

Движения камеры за мышкой и за игроком
Нужно сделать что бы камера двигалась и за игроком и за мышкой, вроде динамической зовут в народе. Добавлено через 6 минут Если не...

Переделка скрипта движения камеры по вертикали
Здравствуйте, есть простой скрипт движение камеры по горизонтали,Всё работает отлично.Хочу переделать его движение по вертикале. Кажется ...

Ограничение движения объекта в 3D
Прошу помощи. Нужно ограничить возможную область движения для корабля в SpaceShooter-e. Для перемещения использую следующий код: public...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru