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

Перемещение по объектам через массив

16.01.2018, 11:52. Показов 3650. Ответов 5

Студворк — интернет-сервис помощи студентам
Привет, на сцене есть объекты и мне надо по нажатию клавиши моя камера перемещалась к 1 объекту, затем при нажатии еще раз клавиши перемещался дальше ко 2 объекту, и т.д. Может есть какие нибудь ссылки, на примеры.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if ((Input.GetAxis ("Mouse ScrollWheel") > 0) || (Input.GetKey (KeyCode.W))) {
        targetPos = target1.transform.position; 
        move = true; 
        if (move) 
            { 
                if (player.transform.position != targetPos) //Двигаем объект если цель и положения нашего плеера различны. 
                { 
                    player.transform.position = Vector3.Lerp(player.transform.position, targetPos, speed * Time.deltaTime); // Умножаем на дельтатайм так для того чтобы наш объект двигался одинаково в разных машинах. 
                    cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, zoom, Time.deltaTime * smooth);
 
                } 
                else
                { 
                    move = false; 
                    cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, zoom, Time.deltaTime * smooth);
                } 
            }
 
 
}
Миниатюры
Перемещение по объектам через массив  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2018, 11:52
Ответы с готовыми решениями:

Задание параметров объектам через цикл
Хочу задать текст объектам подобным образом: for(int i=0; i<=; i++) { array.text = @"алилуя"; } Но компилятор...

Перемещение мыши через sendmessage
Нужно эмулировать перемещение курсора с зажатой левой кнопкой мыши внутри окна, при этом курсор на экране двигаться не должен. public...

Перемещение данных через автозаполнение
Вcем добрый вечер, cтолкнулаcь c заданием в excel перенеcти данные c Лиcта 2 на Лиcт 1 НО так, чтобы можно было ввеcти номер на...

5
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
16.01.2018, 15:45
1) Все "точки передвижения" складываем в массив
2) При первом нажатии двигаемся к элементу [0]. При втором нажатии - к элементу [1] и т.д.

Добавлено через 12 секунд
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
public GameObject[] waypoints;
 
    private bool moving;
 
    private int i; //счетчик точек перемещения
 
    private void Start()
    {
        i = 0;
        moving = false;
    }
 
    private void Update()
    {
        //Если нажали ... и сейчас не перемещаемся
        if ((Input.GetAxis("Mouse ScrollWheel") > 0) || (Input.GetKey(KeyCode.W)) && !moving)
        {
            //перемещаемся в первую точку и увеличиваем счетчик. 
            StartCoroutine(MoveToWaypoint(player.transform.position, waypoints[i++].transform.position, speed));
        }
    }
    private IEnumerator MoveToWaypoint(Vector3 pos1, Vector3 pos2, float speed)
    {
        moving = true;
        while (pos1 != pos2)
        {
            player.transform.position = Vector3.Lerp(pos1, pos2, speed * Time.deltaTime); // Умножаем на дельтатайм так для того чтобы наш объект двигался одинаково в разных машинах. 
            cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, zoom, Time.deltaTime * smooth);
            yield return new WaitForEndOfFrame();
        }
        moving = false;
    }
Добавлено через 29 секунд
Как-то вроде того. Могут быть ошибки, не проверял)
0
1 / 1 / 1
Регистрация: 11.11.2017
Сообщений: 33
16.01.2018, 20:13  [ТС]
Цитата Сообщение от Serj190492 Посмотреть сообщение
1) Все "точки передвижения" складываем в массив
2) При первом нажатии двигаемся к элементу [0]. При втором нажатии - к элементу [1] и т.д.

Добавлено через 12 секунд
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
public GameObject[] waypoints;
 
    private bool moving;
 
    private int i; //счетчик точек перемещения
 
    private void Start()
    {
        i = 0;
        moving = false;
    }
 
    private void Update()
    {
        //Если нажали ... и сейчас не перемещаемся
        if ((Input.GetAxis("Mouse ScrollWheel") > 0) || (Input.GetKey(KeyCode.W)) && !moving)
        {
            //перемещаемся в первую точку и увеличиваем счетчик. 
            StartCoroutine(MoveToWaypoint(player.transform.position, waypoints[i++].transform.position, speed));
        }
    }
    private IEnumerator MoveToWaypoint(Vector3 pos1, Vector3 pos2, float speed)
    {
        moving = true;
        while (pos1 != pos2)
        {
            player.transform.position = Vector3.Lerp(pos1, pos2, speed * Time.deltaTime); // Умножаем на дельтатайм так для того чтобы наш объект двигался одинаково в разных машинах. 
            cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, zoom, Time.deltaTime * smooth);
            yield return new WaitForEndOfFrame();
        }
        moving = false;
    }
Добавлено через 29 секунд
Как-то вроде того. Могут быть ошибки, не проверял)
Выходит ошибка array index out of range
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
16.01.2018, 20:25
Цитата Сообщение от Creativeeart Посмотреть сообщение
Выходит ошибка array index out of range
1. Массив заполнен?

2. Надо проверку добавить, упустил:
C#
1
2
3
4
5
6
7
8
9
10
private void Update()
    {
        //Если нажали ... и сейчас не перемещаемся
        if ((Input.GetAxis("Mouse ScrollWheel") > 0) || (Input.GetKey(KeyCode.W)) && !moving)
        {
            if (i >= waypoints.Length) return;
            //перемещаемся в первую точку и увеличиваем счетчик. 
            StartCoroutine(MoveToWaypoint(player.transform.position, waypoints[i++].transform.position, speed));
        }
    }
0
1 / 1 / 1
Регистрация: 11.11.2017
Сообщений: 33
16.01.2018, 20:40  [ТС]
Цитата Сообщение от Serj190492 Посмотреть сообщение
1. Массив заполнен?

2. Надо проверку добавить, упустил:
C#
1
2
3
4
5
6
7
8
9
10
private void Update()
    {
        //Если нажали ... и сейчас не перемещаемся
        if ((Input.GetAxis("Mouse ScrollWheel") > 0) || (Input.GetKey(KeyCode.W)) && !moving)
        {
            if (i >= waypoints.Length) return;
            //перемещаемся в первую точку и увеличиваем счетчик. 
            StartCoroutine(MoveToWaypoint(player.transform.position, waypoints[i++].transform.position, speed));
        }
    }
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
if ((Input.GetAxis("Mouse ScrollWheel") > 0) || (Input.GetKey(KeyCode.W)) && !move) {
            for (int i = 0; i < waypoints.Length; i++)
            {
                StartCoroutine(MoveToWaypoint(player.transform.position, waypoints[i].transform.position, speed));
            }
        }
    }
    private IEnumerator MoveToWaypoint(Vector3 pos1, Vector3 pos2, float speed)
    {
        move = true;
        if (move) {
            while (pos1 != pos2)
            {
                player.transform.position = Vector3.Lerp(pos1, pos2, speed * Time.deltaTime);
                cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, zoom, Time.deltaTime * smooth);
                //yield return new WaitForEndOfFrame();
                yield return null;
            }
        }
        else
        {
            move = false;
        }
    }
Не переходит а тупо дергает камеру
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
16.01.2018, 22:44
Лучший ответ Сообщение было отмечено Creativeeart как решение

Решение

Берешь код, который я скинул 1й раз. Ctrl+C -> Ctrl+V.

Полностью удаляешь из него функцию Update и копируешь её из второго моего сообщения.

Добавлено через 1 час 41 минуту
Да, косяк в том, что в корутине pos1 всегда = одному значению.
Переписал немного.

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
public GameObject[] waypoints;
    public float zoom, speed, smooth;
 
    private Camera cam;
    private bool moving;
    private int i; //счетчик точек перемещения
 
    private void Start()
    {
        i = 0;
        moving = false;
        cam = Camera.main;
    }
 
    private void Update()
    {
        //Если нажали ... и сейчас не перемещаемся
        if (((Input.GetAxis("Mouse ScrollWheel") > 0) || (Input.GetKey(KeyCode.W))) && !moving)
        {
            if (i >= waypoints.Length) i = 0; //если вышли за границы - возвращаемся в первую точку.
            //перемещаемся в первую точку и увеличиваем счетчик. 
            StartCoroutine(MoveToWaypoint(waypoints[i++].transform.position, speed));            
        }
    }
 
    private IEnumerator MoveToWaypoint(Vector3 target, float speed)
    {
        moving = true;
        float sT = speed * Time.deltaTime; // Скорость с учетом deltaTime
 
        while (cam.transform.position != target)
        {
            cam.transform.position = Vector3.MoveTowards(cam.transform.position, target, sT); 
            cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, zoom, Time.deltaTime * smooth);
            yield return null;
        }
        moving = false;
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.01.2018, 22:44
Помогаю со студенческими работами здесь

Перемещение формы через собственный класс
Написал класс для динамического создания форм-подсказок. Подсказки появляются нормально, но когда я начинаю ее двигать по экрану (см....

Как включить перемещение курсора через тачпад?
Ноутбук HP 655 Notebook PC. Тачпад ведёт себя странно: кнопки работают, пробуждение из сна при прикосновение к тачпаду происходит, а мышка...

Перемещение элемента внутри flowlayoutpanel (через код)
На flowlayoutpanel єсть несколько panel и одна кнопка, как переместиь кнопку после ее нажатия на позицию 2 (flowlayoutpanel, location не...

Удаление, перемещение, копирование файлов с диска через listView
при написании программы файлового менеджера столкнулся с проблемой копирования, перемещения, удаления. хочу чтоб это всё происходило при...

Способ перехода к другому Activity через перемещение пальцем
Зажимаю активити и плавно отвожу в сторону(например, влево), а справа выплывает другой активити. Как такое организовать? :)


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru