Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2019, 07:57   #1
realLarkin
Пользователь
 
Регистрация: 23.09.2019
Сообщений: 41
Сообщение Какую роль выполняет функция в этом коде.

В общем как бы все объяснить. Реализую стрельбу созданием экземпляра объекта на сцене. Работаю по руководству и пытаюсь разобраться что за что отвечает. У нас есть объект куб который передвигается по сцене автоматически, играет роль врага. В его скрипте прописано что при наведении рейкаста на объект со скриптом игрока, методом Instantiate создаётся экземпляр объекта сферы, играющей роль фаербола. Ссылка на экземпляр объекта сферы будет в переменной fireball.
Код:
fireball.transform.position = transform.TransformToPoint(Vector3.forward * 1,5f);
fireball.transform.rotation = transform.rotation;
И так эти две строчки кода записаны сразу после создания экземпляра сферы на сцене. Далее поправляйте меня если я не прав. Как я понимаю эти строки позволяют правильно его разместить. Вторая делает так чтобы сфера была развернута в том же направлении в котором развернут наш куб, то есть this.gameObject. А вот первая судя по описанию метода в официальной документации превращает локальные координаты в глобальные. И тут становится ничего не понятно. Как это работает ведь судя по тому что я видел, координаты размещения сферы становятся как раз локальными, то есть располагается она относительно куба. Vector3.forward на сколько я понял даёт расположение сфере прямо перед кубом, но зачем умножение на 1,5f не понимаю. И так помогите разобраться как все это оказывает влияние на созданный экземпляр. Где и по какой логике благодаря этому коду он появляется. Напоминаю что скрипт создания экземпляра через ссылку на префаб сферы написан на кубе который должен стрелять этой сферой.
realLarkin вне форума Ответить с цитированием
Старый 30.09.2019, 08:01   #2
realLarkin
Пользователь
 
Регистрация: 23.09.2019
Сообщений: 41
По умолчанию

Если кому надо, отправлю фул код
realLarkin вне форума Ответить с цитированием
Старый 30.09.2019, 09:32   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от realLarkin Посмотреть сообщение
координаты размещения сферы становятся как раз локальными, то есть располагается она относительно куба
Как это связано? Если одна точка в координатах (1, 0), а другой я задам глобальные координаты (1, 1) - это будут глобальные координаты или локальные относительно первой?

Цитата:
Сообщение от realLarkin Посмотреть сообщение
Vector3.forward на сколько я понял даёт расположение сфере прямо перед кубом
Нет, это единичный вектор, который дает направление.

Цитата:
Сообщение от realLarkin Посмотреть сообщение
но зачем умножение на 1,5f не понимаю
Перечитайте выше про вектор и, если все еще не сообразите, попробуйте поиграться - поставить там 3, 10, 15...
p51x вне форума Ответить с цитированием
Старый 30.09.2019, 09:38   #4
realLarkin
Пользователь
 
Регистрация: 23.09.2019
Сообщений: 41
По умолчанию

Если вы понимаете как здесь все работает то пожалуйста распешитк мне что дают объекту эти две строчки кода. Как работает функция TransformToPoint(). Потому что когда я играл с кодом пытаясь понять как что работает я так и не понял какой эффект оказывает эта функция
realLarkin вне форума Ответить с цитированием
Старый 30.09.2019, 09:50   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Она работает именно так, как написано в документации. Берет локальные координаты и преобразует в глобальные. Или вам интересна математика за этим стоящая?
p51x вне форума Ответить с цитированием
Старый 30.09.2019, 10:01   #6
realLarkin
Пользователь
 
Регистрация: 23.09.2019
Сообщений: 41
По умолчанию

Хорошо, а для чего тогда умножение 1.5f
realLarkin вне форума Ответить с цитированием
Старый 30.09.2019, 10:07   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вот сцена: |_| 0 1
Vector3.forward у них будет разный? Как задать координаты точек 0 и 1?
p51x вне форума Ответить с цитированием
Старый 30.09.2019, 10:33   #8
realLarkin
Пользователь
 
Регистрация: 23.09.2019
Сообщений: 41
По умолчанию

Извините конечно меня дурочка, но ваша иллюстрация сцены мне слегка не понятна

Когда я попробовал задать вместо этой функции просто = new Vector3(рандомные координаты) шарик стал появляться где-то в отдаленном месте из чего я сделал вывод что его распологает относительно начала координат.

Когда же я применял эти две строки, шарик всегда появлялся рядом с кубом на котором скрипт. Поэтому я и подумал что теперь он распологается относительно куба, ведь куб ещё и движется все время и сфера всегда рядом. А forward в моем понимании это z ось от чего я сделал вывод что параметр Vector3.forward позволяет всегда появляться сфере перед кубом. То есть впереди по оси z относительно его движения. Такова моя логика, но в нее ни чуть не вплетается определение того что этот метод преобразует локальные координаты в глобальные.
realLarkin вне форума Ответить с цитированием
Старый 30.09.2019, 11:00   #9
realLarkin
Пользователь
 
Регистрация: 23.09.2019
Сообщений: 41
По умолчанию

Прикрепил скриншот. Каким образом с помощью функции которая преобразовывает локальные координаты в глобальные здесь размещается шар прямо перед кубом
Изображения
Тип файла: jpg Screenshot_20190930-105512.jpg (101.3 Кб, 62 просмотров)
realLarkin вне форума Ответить с цитированием
Старый 30.09.2019, 11:24   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от realLarkin Посмотреть сообщение
Извините конечно меня дурочка, но ваша иллюстрация сцены мне слегка не понятна
O (<-это начало координат)__1(<-это первая точка, например с координатами (1, 0, 0)) ____2(<-это вторая точка, например с координатами (3, 0, 0))

Цитата:
Сообщение от realLarkin Посмотреть сообщение
Когда же я применял эти две строки, шарик всегда появлялся рядом с кубом на котором скрипт. Поэтому я и подумал что теперь он распологается относительно куба, ведь куб ещё и движется все время и сфера всегда рядом.
Т,е. вы совсем не видите разницы между "я взял рандомные координаты" и "я взял координаты куба + что-то"?

Цитата:
Сообщение от realLarkin Посмотреть сообщение
А forward в моем понимании это z ось от чего я сделал вывод что параметр Vector3.forward позволяет всегда появляться сфере перед кубом. То есть впереди по оси z относительно его движения.
Не ось, а координатный вектор. В остальном более-менее правильно.

Цитата:
Сообщение от realLarkin Посмотреть сообщение
Такова моя логика, но в нее ни чуть не вплетается определение того что этот метод преобразует локальные координаты в глобальные.
Тогда вам надо повторить математику. Потом узнать, что сцена рисуется по глобальным координатам и т.д.

Цитата:
Сообщение от realLarkin Посмотреть сообщение
Каким образом с помощью функции которая преобразовывает локальные координаты в глобальные здесь размещается шар прямо перед кубом
Что за бред вы пишите. Типа: каким образом с помощью проектирования на карту этот столб размещается прямо передо мной?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какую функцию выполняет код ciy Общие вопросы Delphi 1 24.04.2017 15:27
[C++]: Почему функция в этом коде принимает в качестве аргумента указатель на указатель? nwhta Общие вопросы C/C++ 5 04.01.2017 18:09
Что выполняет функция? KingBelt Общие вопросы C/C++ 5 29.11.2010 09:06
Что выполняет данная функция на JS Rock'n'rolla JavaScript, Ajax 1 31.03.2010 09:56