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

Переделка скрипта движения камеры по вертикали

07.07.2018, 09:25. Показов 3521. Ответов 15
Метки нет (Все метки)

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

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;
 
public class CameraTach : MonoBehaviour
{
 
    public float speed;
 
    private Vector2 startPos;
    private Camera cam;
 
    
 
    private void Start()
    {
        cam = GetComponent<Camera>();
        
 
    }
 
    private void Update()
    {
        if (Input.GetMouseButtonDown(0)) startPos = cam.ScreenToWorldPoint(Input.mousePosition);
        else if (Input.GetMouseButton(0))
        {
 
            float pos = cam.ScreenToWorldPoint(Input.mousePosition).x - startPos.x;
            transform.position = new Vector3(transform.position.x - pos, transform.position.y, transform.position.z);
 
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.07.2018, 09:25
Ответы с готовыми решениями:

Как ограничить движение камеры по вертикали?
имеется контроллер using System.Collections; using System.Collections.Generic; using UnityEngine; //подключим плейер мув ...

Переделка с обычного скрипта пхп под крон
Здравствуйте! Сделал пхп скрипт такой &lt;?php setcookie(&quot;имя&quot;, &quot;содержимое&quot;); header(&quot;Location:урл страници&quot;); ?&gt; Для...

Белые пропуски между тайлами при передвижении камеры по вертикали
Во время передвижения камеры по вертикали меж тайлами проскакивают белые полосы. Как их убрать?

15
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
07.07.2018, 10:11
Поменять оси и в pos тоже, не только в трансформе
0
1 / 1 / 0
Регистрация: 07.07.2018
Сообщений: 13
07.07.2018, 10:53  [ТС]
C#
1
2
float pos = cam.ScreenToWorldPoint(Input.mousePosition).y - startPos.y;
            transform.position = new Vector3(transform.position.y - pos, transform.position.x, transform.position.z);
Конечно менял. Только камера наискосок вверх двигается теперь,а надо точно вертикально,как в исходном коде горизонтально.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
07.07.2018, 17:01
Denni21, ты вообще смотрел что где в векторе лежит? Первый параметр - это Х, а второй - Y

Добавлено через 35 секунд
И нахрена ты всё в Х опять пихаешь?
0
1 / 1 / 0
Регистрация: 07.07.2018
Сообщений: 13
07.07.2018, 18:54  [ТС]
Что-то я не понимаю,если есть желание и терпение, разложить где конкретно ошибка!!!
C#
1
2
 float pos = cam.ScreenToWorldPoint(Input.mousePosition).y - startPos.x;
            transform.position = new Vector3(transform.position.y - pos, transform.position.x, transform.position.z);
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
07.07.2018, 19:42
Лучший ответ Сообщение было отмечено Denni21 как решение

Решение

Параметры создания вектора:
new Vector3(
float X,
float Y,
float Z)
Ты пихаешь разницу опять в икс, а не в игрек. Внимательнее, есть справка для уточнения.

Далее:
C#
1
float pos = cam.ScreenToWorldPoint(Input.mousePosition).y - startPos.x;
Смотри в оригинал - там икс у обоих берется, а ты у одного икс, у другого игрек.
0
1 / 1 / 0
Регистрация: 07.07.2018
Сообщений: 13
08.07.2018, 10:51  [ТС]
C#
1
2
   float pos = cam.ScreenToWorldPoint(Input.mousePosition).y - startPos.y;
            transform.position = new Vector3(transform.position.x - pos, transform.position.y, transform.position.z);
Так тоже не работает,и вообще там скорей всего не только в осях дело.С осями я всё перепробовал.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
08.07.2018, 12:50
Лучший ответ Сообщение было отмечено Denni21 как решение

Решение

Denni21, вторая строка. Ты дельту перемещения куда добавляешь? В какую ось?
0
1 / 1 / 0
Регистрация: 07.07.2018
Сообщений: 13
08.07.2018, 14:32  [ТС]
Первая строчка.это от текущей позицию курсора вычитаем стартовою позицию курсора.
Вторая строчка.Изменяем позицию камеры по Y .От текущей позиции камеры вычетам позицию которую выше рассчитали.

Добавлено через 4 минуты
Всё спасибо разобрался!!!

Добавлено через 56 секунд
C#
1
transform.position = new Vector3(transform.position.x, transform.position.y - pos, transform.position.z);
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
08.07.2018, 19:17
Ну хоть сам понял.
0
1 / 1 / 0
Регистрация: 07.07.2018
Сообщений: 13
09.07.2018, 23:31  [ТС]
Хочу продолжить тему,так уж разобраться до конца.Камера двигается нормально но границ нет.Вот попытался сделать не получается.
C#
1
transform.position = new Vector3(Mathf.Clamp(transform.position.x, transform.position.y - pos -1.97f, 24.97f), transform.position.z);
Весь код прежний только последняя сточку редактирую
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
10.07.2018, 01:37
Denni21, не надо так. Делай в отдельной переменной, по шагам.

Добавлено через 1 минуту
C#
1
public static float Clamp(float value, float min, float max);
Читай доки!
C#
1
2
3
4
5
Mathf.Clamp(
float value, // значение на входе
float min, // минимум
float max // максимум
);
1
0 / 0 / 0
Регистрация: 09.07.2018
Сообщений: 13
10.07.2018, 08:45
Мне кажеться можно сделать например по клавишам мышы и клавиатуры сделать позицию и как бы записывать в нее движение камеры там +1 +1 +1 +1 и уже перемещение на 4 а потом обнулять
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
public float x;
public float speed;
 
void left()
{
    x = -speed;
}
 
void right()
{
    x = speed;
}
void FixedUpdate()
{
    if(Input.Getkey(KeyCode.Q))
    {
         left();
    }
    if(Input.Getkey(KeyCode.W))
    {
         right();
    }
    transform.Translate(x, 0, 0);
    speed = 0;
}
0
1 / 1 / 0
Регистрация: 07.07.2018
Сообщений: 13
10.07.2018, 09:51  [ТС]
Сейчас нет юнити под рукой, немогу посмотреть что получилось.
Но вот так должно работать!
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;
 
public class CameraController : MonoBehaviour
{
 
    public float speed;
 
    private Vector2 startPos;
    private Camera cam;
    
    private void Start()
    {
        cam = GetComponent<Camera>();
        targetPos = transform.position.y;
 
    }
 
    private void Update()
    {
        if (Input.GetMouseButtonDown(0)) startPos = cam.ScreenToWorldPoint(Input.mousePosition);
        else if (Input.GetMouseButton(0))
        {
 
            float pos = cam.ScreenToWorldPoint(Input.mousePosition).y - startPos.y;
            targetPos = Mathf.Clamp(transform.position.y - pos, -1.97f, 20.97f);
           }
            transform.position = new Vector3(transform.position.x, transform.position.y - pos, transform.position.z);
          }
}
И если можно ссылочку на доки!
1
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
10.07.2018, 17:18
Denni21, в гугле "unity mathf.clamp" или что там ещё надо - docs.unity3d.com
0
1 / 1 / 0
Регистрация: 07.07.2018
Сообщений: 13
12.07.2018, 09:18  [ТС]
Движение камеры по вертикали c границами
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;
 
public class CameraTach : MonoBehaviour
{
 
    public float speed;
 
    private Vector2 startPos;
    private Camera cam;
    
    private void Start()
    {
        cam = GetComponent<Camera>();
        targetPos = transform.position.y;
 
    }
 
    private void Update()
    {
        if (Input.GetMouseButtonDown(0)) startPos = cam.ScreenToWorldPoint(Input.mousePosition);
        else if (Input.GetMouseButton(0))
           {
 
            float pos = cam.ScreenToWorldPoint(Input.mousePosition).y - startPos.y;
            targetPos = Mathf.Clamp(transform.position.y - pos, -1.97f, 20.97f);
           }
            transform.position = new Vector3(transform.position.x, targetPos, transform.position.z);
     }
}
Плавное движение камеры по вертикали c границами
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;
 
public class CameraTach : MonoBehaviour
{
 
    public float speed;
 
    private Vector2 startPos;
    private Camera cam;
    
    private void Start()
    {
        cam = GetComponent<Camera>();
        targetPos = transform.position.y;
 
    }
 
    private void Update()
    {
        if (Input.GetMouseButtonDown(0)) startPos = cam.ScreenToWorldPoint(Input.mousePosition);
        else if (Input.GetMouseButton(0))
           {
 
            float pos = cam.ScreenToWorldPoint(Input.mousePosition).y - startPos.y;
            targetPos = Mathf.Clamp(transform.position.y - pos, -1.97f, 20.97f);
           }
            transform.position = new Vector3(transform.position.x, (Mathf.Lerp(transform.position.y, targetPos, speed * Time.deltaTime), transform.position.z));
     }
}
Всё работает!Проверено.

Добавлено через 23 часа 58 минут
C#
1
2
3
 transform.position = new Vector3(transform.position.x, Mathf.Lerp(transform.position.y, targetPos, speed * Time.deltaTime), transform.position.z);
     }
}
Скобки лишние оказались.))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.07.2018, 09:18
Помогаю со студенческими работами здесь

Переделка скрипта LCD HD44780 под другие порты. (atmega8 - atmega328)
Помогите пожалуйста, переделать скрипт LCD HD44780. Подключаю как на рис.1. Но, это не очень удобно. Хотелось-бы как на рис.2. ...

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

Захват движения с камеры
Добрый день! Вопрос: Возможно ли написать команду которая будет фиксировать движение и делать подсчет этих самых движений? Пример: 1)...

Написать программу одновременного (по очереди) движения по вертикали на экране 5 точек с любыми координатами
Написать программу одновременного (по очереди) движения по вертикали на экране 5 точек с любыми координатами (&quot;капли дождя&quot;)....

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты 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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru