background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Unreal Engine - Realistic Portal Tutorial (3/4)"

input logo icon
Теги видео
|

Теги видео

Unreal Engine
Unreal Engine 4
Unreal
Unreal Engine 5
UE4
UE5
Tutorial
How To
Blueprints
Reids Channel
Reid's Channel
Portal
Portals
Teleport
Splitgate
split gate
wormhole
worm hole
teleportation
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:01
хорошо, добро пожаловать в третью часть
00:00:04
руководства по порталу,
00:00:06
так что
00:00:07
давайте перейдем к нашему компоненту портала здесь,
00:00:10
а затем перейдем к порталу появления
00:00:12
с помощью векторной функции,
00:00:14
и, как вы можете видеть, наша функция триадного портала
00:00:16
теперь возвращает нам новый
00:00:18
портал, который был создан,
00:00:19
так что поехали вперед, щелкните правой кнопкой мыши на
00:00:21
этом парне и перейдите к локальной переменной,
00:00:24
а затем я назову его новым
00:00:26
порталом,
00:00:28
и что мы хотим здесь сделать, так это сначала мы
00:00:30
хотим убедиться, что этот новый портал,
00:00:32
который был создан,
00:00:34
действительно действителен, потому что он не мог бы
00:00:36
что-то породить, если бы
00:00:38
на стене больше не было места, поэтому мы скажем, что
00:00:41
он действителен,
00:00:43
а затем, если он
00:00:45
действителен, то
00:00:46
мы хотим
00:00:49
назначить этот недавно созданный портал
00:00:52
или мы хотим сообщить этому новому портал, который
00:00:54
связан с другим порталом в
00:00:56
мире, если он есть,
00:00:58
поэтому мы создадим небольшую функцию для
00:01:01
обработки этого, поэтому нажмите
00:01:03
здесь маленькую кнопку с плюсом, и мы назовем
00:01:04
эту функцию
00:01:06
свопом порталов, теперь причина, по которой я
00:01:08
его называют порталами замены, потому что,
00:01:11
допустим, у вас уже есть два портала,
00:01:13
фиолетовый и желтый, а затем вы создаете
00:01:16
новый фиолетовый, он заменит
00:01:19
старый фиолетовый портал на новый фиолетовый
00:01:20
портал, поэтому мы называем его
00:01:23
порталом обмена
00:01:25
и Итак, для этого парня
00:01:26
мы хотим, чтобы это использовало
00:01:29
портал, поэтому это кнопка «плюс», и
00:01:31
давайте возьмем портал bpd,
00:01:34
и мы хотим принять его
00:01:36
по ссылке, поэтому, если вы не знаете, что
00:01:38
это делает хорошо, в первую очередь вы можете видите,
00:01:40
когда я нажимаю на него, он меняет маленький
00:01:42
кружок здесь
00:01:43
на ромб,
00:01:45
а также он фактически
00:01:47
принимает его по ссылке, поэтому, если вы не
00:01:48
знаете, что такое ссылка,
00:01:51
обычно по умолчанию
00:01:55
переменные um передаются как копия
00:01:58
но если вы скажете ему передать ее по
00:01:59
ссылке,
00:02:00
то эта переменная на самом деле будет той же самой
00:02:03
переменной,
00:02:05
которую вы бы передали в нее здесь, поэтому,
00:02:06
когда мы передадим эту переменную в этот новый
00:02:08
портал, который мы собираемся сделать,
00:02:10
это будет точно такая же
00:02:12
переменная, поэтому, если бы мы присвоили этой
00:02:13
переменной какое-то значение, на самом деле
00:02:16
здесь будет установлена ​​та же самая переменная, потому что это прямая ссылка на
00:02:18
нее,
00:02:19
поэтому в любом случае мы хотим вызвать этот
00:02:21
портал, и я объясню, почему мы это делаем
00:02:23
это как ссылка через секунду здесь,
00:02:25
а затем
00:02:27
следующий, который мы хотим добавить, также является порталом,
00:02:29
и мы назовем его
00:02:31
новым порталом, а затем для этого нам
00:02:33
не нужно, чтобы он был ссылкой, поэтому мы
00:02:35
можем отменить его выбор,
00:02:36
поэтому у нас должен быть верхний
00:02:38
портал, а нижний — новый
00:02:40
портал, так что портал на самом деле старый
00:02:43
портал, так что, может быть, нам следует назвать этот
00:02:45
ой, куда это пошло
00:02:48
ой, окей, может быть, нам следует назвать этот
00:02:51
старый портал просто для ясности, и
00:02:53
что мы хотим Прежде всего,
00:02:55
мы хотим проверить, действителен ли старый портал,
00:02:58
поэтому давайте перетащим этого парня
00:03:01
и скажем, что он
00:03:02
действителен,
00:03:04
и если он действителен, то мы хотим
00:03:06
его уничтожить, поэтому
00:03:08
утащите этого парня и скажите «уничтожить
00:03:12
актера»,
00:03:14
например Итак,
00:03:17
после того, как мы это сделаем, мы хотим установить
00:03:19
ссылку на наш старый портал на новый,
00:03:22
чтобы мы могли просто утащить этого
00:03:25
парня
00:03:26
и сказать, что есть функция, называемая set
00:03:29
object
00:03:31
или как она называется, set by reference,
00:03:33
да, set by reference
00:03:35
и вот почему мы передаем его как
00:03:36
ссылку, потому что если бы это не была
00:03:38
ссылка, и мы должны были установить для нее
00:03:40
что-то,
00:03:41
хм, это просто установило бы это локально внутри
00:03:43
этой функции, и это
00:03:44
фактически не повлияло бы на переменную это
00:03:45
передается, поэтому всякий раз, когда вы хотите
00:03:46
установить функцию ссылок на что-то,
00:03:48
здесь есть удобная маленькая функция, чтобы
00:03:49
сделать это,
00:03:50
и тогда, конечно, значение, которое мы
00:03:51
отправляем,
00:03:53
- это новый портал,
00:03:56
вот так,
00:03:57
и тогда нам действительно нужно это перехватить
00:03:58
чувак, я просто добавлю
00:04:00
сюда небольшую последовательность,
00:04:03
чтобы мы могли сначала сделать эту часть,
00:04:06
а потом вторую, так что мы
00:04:08
продолжим и поменяем местами наши
00:04:09
порталы, чтобы уничтожить
00:04:11
старый, если он существует, и затем он
00:04:12
установит старый на тот, который является новым,
00:04:16
в качестве ссылки,
00:04:17
поэтому, вернувшись в наш портал появления по
00:04:20
векторной функции,
00:04:21
мы можем затем вызвать наш
00:04:23
портал появления или функцию порталов обмена,
00:04:25
и мы действительно можем сделать это
00:04:26
частным, что я забыл сделать так что сделайте
00:04:28
это одним частным
00:04:29
перетащите этого парня через
00:04:31
это соединение,
00:04:32
чтобы новый портал, очевидно,
00:04:34
был нашим новым порталом, который представляет собой ту локальную
00:04:36
переменную, которую мы только что создали,
00:04:38
а затем старый портал будет либо
00:04:43
фиолетовым порталом, который представляет собой a, либо
00:04:46
желтый портал, который равен b, поэтому мы хотим
00:04:48
отслеживать эти две переменные внутри
00:04:51
нашего компонента портала, поэтому здесь,
00:04:53
под нашими переменными, давайте добавим
00:04:56
портал a,
00:04:59
и мы сделаем это
00:05:03
ссылкой на объект портала,
00:05:05
вот так,
00:05:07
и продублируем этого парня,
00:05:10
назовем его порталом b.
00:05:12
и они оба могут быть частными,
00:05:16
и тогда мы хотим сказать здесь:
00:05:20
портал дракона-дракона a,
00:05:22
а затем перетащить портал b,
00:05:26
а затем щелкнуть правой кнопкой мыши и получить
00:05:29
портал a,
00:05:30
который является нашим логическим значением,
00:05:33
которое передается в эту функцию,
00:05:34
и мы хотим сделать выбор
00:05:38
вот так
00:05:39
и так, если это правда, мы, очевидно, хотим
00:05:41
создать портал a,
00:05:43
а если это ложь, мы хотим сделать портал b,
00:05:45
мы на самом деле переставляем их
00:05:47
вот так,
00:05:49
и тогда это перейдет в наш
00:05:51
старый портал, вот так,
00:05:54
хорошо, и теперь, когда мы
00:05:58
это просто переключение ссылок
00:06:00
здесь, так что теперь мы действительно хотим связать
00:06:01
их вместе, поэтому
00:06:03
перетащите портал a
00:06:07
и скажите git, перетащите портал b и
00:06:09
скажите git, потому что мы собираемся сделать это для
00:06:10
каждого из них
00:06:11
и затем, поскольку мы собираемся сделать это для
00:06:13
каждого из них, давайте просто создадим
00:06:14
здесь узел последовательности, поэтому, удерживая нажатой клавишу s, щелкните левой кнопкой мыши,
00:06:16
создайте последовательность,
00:06:17
поэтому мы хотим проверить каждый из них, мы
00:06:20
хотим сначала убедиться, что он действителен, поэтому щелкните
00:06:21
правой кнопкой мыши. преобразовать в проверенный, чтобы получить,
00:06:24
и если он действителен, тогда мы хотим вызвать
00:06:26
функциональный офис и, по сути, сказать ему: «
00:06:28
Эй, свяжись с другим, другим
00:06:30
порталом», поэтому я думаю, что нам нужно
00:06:32
очень быстро зайти внутрь нашего портала и просто написать
00:06:33
эту функцию,
00:06:36
и мы сделаем это очень
00:06:37
быстро, просто чтобы это выглядело красиво, когда мы вернемся,
00:06:41
хорошо, давайте зайдем в портал и
00:06:42
напишем функцию, чтобы мы могли связать
00:06:43
эти два портала вместе,
00:06:45
поэтому
00:06:46
откройте портал bp,
00:06:49
а затем слева здесь
00:06:51
давайте создадим функцию,
00:06:53
и мы назовем этот
00:06:56
портал ссылок
00:06:58
или, может быть, порталы ссылок,
00:07:00
а затем этому парню нужно взять
00:07:03
другой портал
00:07:04
для того, который будет связан с
00:07:06
ним, поэтому нажмите на этого парня, добавьте входной
00:07:08
параметр
00:07:10
типа портал
00:07:12
и тогда мы назовем его просто порталом,
00:07:16
и поэтому мы хотим взять этот портал, который
00:07:17
они нам предоставляют, и мы хотим
00:07:19
сделать его переменной, чтобы мы могли хранить
00:07:21
его, поэтому превратите его в переменную,
00:07:24
ох, что это не сработало, подождите
00:07:27
минутку удалите то, что
00:07:30
там только что произошло,
00:07:33
позвольте мне попробовать еще раз щелкните правой кнопкой мыши, продвиньте до
00:07:35
переменной,
00:07:37
почему это так,
00:07:40
почему он делает эту странную целевую вещь,
00:07:44
ну, я не уверен, почему он не позволяет
00:07:46
мне произносить такую ​​​​переменную,
00:07:49
так что давайте просто сделаем это мы сами, поэтому мы
00:07:50
просто скажем переменная,
00:07:52
и мы вызовем этот
00:07:54
связанный портал
00:07:56
и убедитесь, что вы установили его тип как
00:07:58
портал bp здесь, портал bp,
00:08:01
и мы можем сделать этого парня частным,
00:08:03
а затем мы сможем просто перетащить
00:08:04
это и скажите «установите
00:08:07
и подключите это, хорошо, так что это сработало, я
00:08:09
не знаю, почему это не работало раньше,
00:08:11
и мы хотим оттащить это и
00:08:12
проверить, действительно ли это так,
00:08:15
поэтому, если это действительно,
00:08:17
мы хотим
00:08:19
установить материал»
00:08:21
сетки нашего портала, чтобы она была
00:08:24
целью рендеринга того, что
00:08:26
рендерится другой портал, чтобы
00:08:29
мы могли
00:08:31
захватить наш портал как логическое значение,
00:08:33
и мы сделаем на нем узел выбора, вот
00:08:36
здесь,
00:08:38
и, как я уже сказал, мы хотим установить
00:08:39
материал нашей портальной сетки, поэтому перетащите нашу
00:08:41
портальную сетку и скажите «Установить
00:08:44
материал»,
00:08:46
подключите его
00:08:49
и подключите вот так,
00:08:53
а затем,
00:08:54
если это портал a, то мы на самом деле хотим
00:08:57
выбрать
00:09:01
цель рендеринга портала mi underscore b, поэтому мы хотим
00:09:03
выбрать напротив справа, поэтому для портала
00:09:05
a мы хотим выбрать цель рендеринга b,
00:09:07
а для портала b мы хотим выбрать
00:09:09
цель рендеринга a, поэтому убедитесь, что вы это делаете,
00:09:10
иначе ваши порталы не будут
00:09:12
отображать правильные вещи, поэтому я собираюсь
00:09:14
выбрать
00:09:15
цель рендеринга. target b для true
00:09:19
и рендеринг target
00:09:21
a
00:09:22
для false, поэтому они переворачиваются в основном
00:09:24
потому, что они хотят
00:09:26
визуализировать то, что другая сцена портала, а не
00:09:27
то, что они видят,
00:09:29
а затем, если это ложь или если это
00:09:32
недействительно, тогда мы просто хотим установить
00:09:34
материал Вернемся к этому черному цвету, поэтому я
00:09:36
просто скопирую эти два узла сюда,
00:09:38
подключим его к ложному, а затем мы
00:09:40
найдем наш mi подчеркивание,
00:09:43
как мы его называем, мы называем его темно-
00:09:45
серым, да, темно-серым
00:09:48
файлом и сохраните, все в порядке, теперь у нас есть
00:09:50
небольшая симпатичная функция для связывания наших
00:09:52
порталов вместе, поэтому, если мы вернемся к тому
00:09:58
месту, где находился этот компонент портала,
00:10:00
мы сможем закончить написание
00:10:02
этой функции здесь, позвольте мне вернуться к ней и
00:10:04
на другом экране,
00:10:06
хорошо, так что
00:10:08
перетащите поднимите этого парня и скажите «связать порталы»,
00:10:11
и поскольку мы находимся на портале А, мы хотим
00:10:14
связать его с порталом Б,
00:10:16
поэтому мы подключим портал Б,
00:10:18
а затем
00:10:21
для этого мы хотим сделать обратное,
00:10:22
поэтому мы собираемся связать его с а,
00:10:25
свяжите б
00:10:28
с а, вот так,
00:10:31
хорошо,
00:10:33
давайте продолжим, запустим это сейчас и
00:10:35
посмотрим,
00:10:36
как это выглядит,
00:10:37
поэтому мы стреляем в стену
00:10:39
и стреляем в стену, хорошо, чтобы вы могли
00:10:41
видеть, что у нас
00:10:43
здесь что-то происходит. очевидно, пока выглядит не правильно,
00:10:47
но просто чтобы проверить это и
00:10:49
убедиться, что мы находимся на правильной странице, давайте
00:10:51
просто возьмем небольшую коробку
00:10:55
и поставим ее здесь, на правой стороне
00:10:58
стены,
00:10:59
чтобы мы могли убедиться в этом. часть
00:11:00
работает, поэтому мы снимем одну здесь
00:11:02
слева и одну справа, чтобы вы
00:11:04
могли видеть, если мы посмотрим через левую,
00:11:06
хотя
00:11:07
сейчас она немного запутана,
00:11:09
вы можете видеть, что мы видим эту коробку, так что эта
00:11:11
коробка это окно, и мы можем видеть его,
00:11:12
потому что оно смотрит через этот фиолетовый
00:11:13
портал, но оно еще не совсем правильное,
00:11:17
и причина, по которой оно
00:11:19
еще не совсем правильное, заключается в том, что
00:11:20
в настоящее время единственное, что мы
00:11:22
делаем, чтобы попытаться заставить порталы
00:11:25
правильно отображаться,
00:11:27
находится
00:11:28
внутри Помните, что мы
00:11:32
позволили мне найти это, потому что я сказал вам, ребята, что
00:11:34
покажу вам, почему мы это делаем,
00:11:36
поэтому, если вы откроете цели рендеринга портала m,
00:11:40
так что этот узел здесь делает много
00:11:41
вещей, так что если мы удалим, если мы отцепляем это,
00:11:44
применяем и сохраняем,
00:11:46
вы можете увидеть, как бы это выглядело, если бы у
00:11:48
нас этого не было, поэтому, если я сделаю одно здесь
00:11:50
и одно здесь, вы можете видеть, что сейчас это
00:11:52
выглядит
00:11:53
почти как картина, верно, это
00:11:55
буквально просто изображение. не имеет
00:11:56
значения, как мы это видим, оно всегда выглядит
00:11:58
одинаково,
00:12:01
и вот как оно выглядит,
00:12:03
если мы не выполняем никаких математических вычислений для перемещения
00:12:05
камер внутри порталов в
00:12:06
зависимости от того, куда мы смотрим,
00:12:08
и поэтому этот шаг внутри материала
00:12:11
это своего рода первый шаг
00:12:13
к тому, чтобы это выглядело правильно: оно
00:12:15
как бы масштабирует изображение так, чтобы оно имело
00:12:17
правильный размер в зависимости от экрана,
00:12:20
поэтому теперь, если мы применим это, мы запустим это снова, вы
00:12:22
можете увидеть, так что это немного ближе к то, что
00:12:24
мы хотим, особенно если мы подойдем
00:12:26
к нему очень близко, это выглядит почти правильно,
00:12:28
но по мере того, как мы удаляемся, мы
00:12:30
должны быть в состоянии видеть разные вещи в
00:12:31
зависимости от того, как мы смотрим на эту
00:12:32
доску, и в настоящее время мы не можем, но это,
00:12:34
по сути, то, что и есть. должно выглядеть так, как
00:12:35
сейчас, и теперь нам просто нужно написать
00:12:37
математические вычисления, чтобы
00:12:40
заставить камеру внутри портала
00:12:41
вращаться в зависимости от того, где мы находимся,
00:12:43
так что давайте посмотрим,
00:12:46
поэтому давайте перейдем к нашему порталу, потому что нам
00:12:48
нужно сделать это внутри галочки потому что
00:12:50
это должно происходить в каждом кадре,
00:12:51
так что
00:12:54
давайте посмотрим, позвольте мне перейти к моему другому проекту,
00:12:58
а затем перейдем к проверке событий,
00:13:01
и мы можем удалить начало воспроизведения,
00:13:03
потому что нам это не нужно,
00:13:04
так что
00:13:06
давайте посмотрим,
00:13:07
давайте посмотрим, итак, первое, что нужно сделать мы хотим
00:13:09
проверить, действителен ли наш связанный
00:13:11
портал, поэтому давайте перетащим этого парня
00:13:13
и скажем git
00:13:14
и преобразуем в проверенный git, потому что, если
00:13:16
связанный портал недействителен, это означает, что
00:13:19
в игре только один портал, как будто в этом
00:13:21
нет смысла. сделать что-либо из этого,
00:13:22
потому что в любом случае он будет отображаться черным,
00:13:23
поэтому мы просто хотим сказать, что
00:13:26
убедитесь, что связанный портал действителен,
00:13:27
прежде чем мы действительно попытаемся что-то сделать,
00:13:30
а затем мы собираемся сделать две вещи, поэтому
00:13:31
давайте добавим узел последовательности
00:13:34
Итак, первое, что мы хотим сделать, это
00:13:36
переместить
00:13:38
нашу
00:13:40
камеру так, чтобы она оказалась в правильном месте. Я имею в виду, что
00:13:43
я постараюсь показать вам по
00:13:45
ходу дела, но если вы посмотрите на
00:13:47
портал, то он эта камера здесь,
00:13:50
так что эта камера должна правильно визуализировать сцену,
00:13:53
и вращение этой камеры в
00:13:55
его вращении и местоположении будут
00:13:58
меняться в зависимости от того, где находится игрок,
00:14:00
например,
00:14:03
если я запустил это,
00:14:05
и я здесь,
00:14:07
и я я просматриваю это слева,
00:14:08
вообще-то, позвольте мне сделать это вот так, чтобы
00:14:10
я мог проверить, и если я здесь, о,
00:14:14
вообще-то, позвольте мне показать вам мой другой
00:14:16
проект, потому что мне это нравится, это будет иметь
00:14:17
гораздо больше смысла, потому что вы можете
00:14:18
на самом деле я вижу
00:14:20
все в порядке, поэтому,
00:14:21
если я помещу один портал здесь
00:14:23
и один портал здесь, чтобы они оба
00:14:26
были по обе стороны от меня,
00:14:28
я поднимусь, иду к этому порталу
00:14:30
и смотрю прямо на него, так что я
00:14:32
собираюсь извлеките здесь, а затем давайте посмотрим
00:14:34
на
00:14:36
вращение этой камеры относительно
00:14:38
портала,
00:14:39
чтобы вы могли видеть, что вращение таково, что она
00:14:42
смотрит прямо на портал, поэтому эта
00:14:44
красная ось, которая является вектором вперед,
00:14:46
смотрит прямо на портал, и
00:14:48
вы Я также замечу, что камера
00:14:54
сейчас находится примерно в паре метров от портала, если мы пойдем и посмотрим на другой
00:14:56
портал, с которым она связана, и посмотрим
00:14:57
на захват его сцены,
00:14:59
вы заметите, что на самом деле она
00:15:01
снова за порталом. на том же расстоянии, на
00:15:04
котором наш игрок находится от своего портала,
00:15:06
и он повернут в том же направлении,
00:15:08
поэтому x смотрит вперед,
00:15:11
и аналогично, если мы возьмем нашего
00:15:13
игрока, повернем его на 90 градусов
00:15:16
влево и выбросим,
00:15:18
вы увидите
00:15:19
теперь его x смотрит влево,
00:15:22
и если мы посмотрим на это со
00:15:24
снимка сцены,
00:15:25
как если бы он был здесь, вы можете увидеть,
00:15:28
что его x тоже смотрит влево, поэтому
00:15:30
происходит то, что он помещает
00:15:32
этот снимок или эту камеру, которая я знаю, что
00:15:33
вы не можете видеть камеру, потому что она
00:15:34
скрыта, но вы можете видеть, в какую сторону она
00:15:36
повернута, она следит за тем, чтобы камера
00:15:38
портала, с которым мы связаны, имела то
00:15:40
же относительное местоположение и вращение,
00:15:43
что и игрок для портала, который
00:15:45
этот портал связан с этим, надеюсь,
00:15:47
это имеет смысл, поэтому, как вы можете видеть,
00:15:49
по мере того, как я удаляюсь от этого портала,
00:15:53
эта камера, прикрепленная к этому парню,
00:15:56
также отодвигается дальше,
00:15:59
и это часть того, как она дает вам такой
00:16:01
эффект,
00:16:02
как будто это просто как окно, через которое
00:16:04
вы просматриваете, и это что-то вроде того, что
00:16:06
мы собираемся
00:16:08
здесь сделать, надеюсь, это имеет
00:16:10
до некоторой степени смысл,
00:16:11
хорошо, так что позвольте мне снова открыть свой портал
00:16:14
и вернуться к графику событий,
00:16:18
так что, как я уже сказал, Первое, что вам нужно
00:16:19
сделать, это обновить местоположение и
00:16:21
вращение камеры другого портала,
00:16:25
поэтому в конечном итоге мы хотим
00:16:27
захватить наш связанный портал
00:16:28
и захватить его сцену,
00:16:32
которая по сути является камерой для захвата сцены попадания в этот
00:16:34
портал,
00:16:38
и мы хотим вызвать
00:16:40
установку
00:16:42
относительного
00:16:44
местоположения и вращения,
00:16:46
потому что опять же мы хотим, чтобы камера связанного портала,
00:16:49
мы хотим, чтобы ее относительное местоположение и
00:16:51
вращение соответствовали относительному местоположению
00:16:54
и вращению камеры нашего игрока
00:16:57
относительно другого портала, поэтому в
00:17:00
конечном итоге мы собираемся вызвать
00:17:01
это и теперь нам просто нужно вычислить
00:17:03
местоположение и вращение,
00:17:07
чтобы сделать это,
00:17:09
мы хотим получить диспетчер камеры игрока,
00:17:11
поэтому мы скажем получить
00:17:16
диспетчер камеры игрока, и мы хотим получить
00:17:19
преобразование камеры для игрока, чтобы мы
00:17:20
могли просто сказать
00:17:22
эээ, что это называется
00:17:25
компонентом трансформации,
00:17:28
и мы хотим, чтобы мир трансформировался,
00:17:32
и мы хотим, чтобы
00:17:36
камера игроков трансформировалась
00:17:38
относительно
00:17:39
нашего портала,
00:17:40
поэтому
00:17:43
я сделал одну небольшую вещь, которая сделала
00:17:45
это намного проще, так что на самом деле мы
00:17:46
собираемся пойти в область просмотра очень быстро,
00:17:48
и потому что порталы
00:17:51
или потому что камера смотрит в
00:17:53
сторону, противоположную порталу, как обычно,
00:17:55
игрок стоит здесь
00:17:56
справа и смотрит в сторону портала, но
00:18:00
эта камера на самом деле смотрит в
00:18:02
сторону, противоположную той, которую смотрел бы игрок.
00:18:04
смотрел, поэтому я не мог понять,
00:18:06
как выполнить математические расчеты, чтобы повернуть этот
00:18:09
трансформатор, поэтому в итоге я
00:18:11
сделал очень просто: я просто добавил
00:18:16
сюда компонент сцены,
00:18:18
а затем просто повернул его
00:18:21
так, чтобы он был на 180 градусов назад,
00:18:23
просто чтобы у меня было начальное
00:18:25
преобразование для работы, соответствующее тому, как
00:18:27
будет выглядеть игрок,
00:18:29
а затем я просто назвал это «сценой, обращенной назад»,
00:18:35
и теперь, когда у нас есть это,
00:18:36
мы возвращаемся к графику событий, чтобы получить изображение
00:18:38
игрока. камера относительно
00:18:43
этого портала, мы хотим
00:18:46
захватить эту сцену, обращенную назад, и сказать «получить
00:18:50
преобразование мира», а затем мы хотим использовать
00:18:53
функцию, называемую «конвертировать, э-э,
00:18:56
преобразование в относительное», чтобы
00:18:58
преобразовать преобразование камеры игрока
00:19:01
относительно этой сцены, обращенной назад,
00:19:04
и тогда это даст нам
00:19:07
новое местоположение и вращение для того, где
00:19:10
должна быть камера нашего связанного портала, поэтому,
00:19:12
если мы разделим этого парня,
00:19:15
мы сможем подключить его
00:19:17
к местоположению и вращению,
00:19:20
и у нас все будет хорошо, так что теперь, если мы запустим
00:19:22
это и посмотрим что здесь происходит,
00:19:27
поместите этого парня сюда
00:19:29
и этого парня сюда,
00:19:31
и вы увидите, что с близкого расстояния это выглядит довольно хорошо,
00:19:33
но если мы отойдем дальше,
00:19:35
вы увидите, что происходит что-то странное,
00:19:37
так что на
00:19:39
самом деле здесь происходит
00:19:41
камера, если вы представляете, что на самом деле я могу
00:19:43
просто показать вам, если я запущу это таким образом, мне
00:19:46
потребовалось некоторое время, чтобы понять,
00:19:48
так что
00:19:51
по большей части это выглядит правильно, но если я сделаю резервную копию, вы
00:19:54
увидите, что происходит что-то странное,
00:19:55
что-то вроде того, что мешает
00:19:56
обзору, и если мы смотрим, где находится
00:19:58
камера, поэтому я собираюсь катапультироваться,
00:20:00
чтобы мы получили
00:20:02
нашу ох, вообще-то, позвольте мне включить
00:20:04
камеру игрока, чтобы вы могли это увидеть, я
00:20:05
забыл это сделать,
00:20:07
так что давайте нажмем на камеру от первого лица
00:20:09
и выключим,
00:20:11
хм
00:20:13
сетка камеры скрыта, поэтому мы
00:20:15
действительно можем видеть камеру, как мы могли бы это сделать
00:20:16
в другом моем проекте, потому что это
00:20:18
значительно облегчит визуализацию того, что
00:20:20
происходит,
00:20:21
поэтому щелкните там, щелкните там,
00:20:24
а затем, если я нажму F8, я смогу выдвинуться, так что у нас
00:20:27
есть наш игрок, смотрящий на этот желтый,
00:20:29
поэтому давайте посмотрим, где находится камера этого портала.
00:20:32
Вы можете видеть, что камера портала находится
00:20:36
сзади, так что
00:20:37
происходит то, что
00:20:39
камера, если вы представляете, что она смотрит в
00:20:40
этом направлении, на самом деле она видит это
00:20:43
ящик, который нам не нужен, потому что
00:20:45
портал не должен видеть
00:20:47
этот ящик, потому что это не тот ящик,
00:20:48
технически он не мешает, но поскольку
00:20:50
эта камера находится совсем здесь,
00:20:52
она на самом деле видит вещи, которые находятся
00:20:53
за стена,
00:20:54
гм, и этот ящик просто оказался здесь, чтобы
00:20:56
вы могли его видеть,
00:20:58
поэтому, чтобы исправить это, в конечном итоге я
00:21:02
изменил ближнюю плоскость отсечения
00:21:06
камеры этого портала, чтобы она соответствовала
00:21:09
расстоянию
00:21:10
нашего игрока до этого портала, поэтому, если вы
00:21:13
представляете, если наш игрок на этом портале,
00:21:14
скажем, 100 единиц для простоты,
00:21:16
если он находится на расстоянии 100 единиц,
00:21:19
тогда я устанавливаю ближнюю
00:21:21
плоскость отсечения этой камеры на 100 единиц, чтобы
00:21:23
она начинала рендеринг только после того, как
00:21:24
получит, или она только начнется запускать вещи,
00:21:26
которые находятся на расстоянии 100 единиц от камеры,
00:21:28
и поэтому этот блок будет примерно на 50
00:21:30
единиц, поэтому он даже не будет пытаться его рендерить,
00:21:32
так что это следующий шаг, так что давайте вернемся
00:21:34
к нашему порталу
00:21:36
и мы хотим сказать,
00:21:38
ну или сначала Прежде всего, я хочу получить
00:21:39
расстояние между игроком и
00:21:41
порталом, через который он просматривает, поэтому еще
00:21:44
раз давайте просто перетащим,
00:21:46
давайте снова возьмем этого парня,
00:21:48
менеджер камеры игрока и его
00:21:50
компонент преобразования,
00:21:52
и мы хотим сказать,
00:21:54
получить местоположение в мире,
00:21:57
и мы хотим получить расстояние
00:22:00
как вектор
00:22:02
или расстояние между, или
00:22:04
вектор расстояния один, этот
00:22:07
и вектор два будут
00:22:10
местоположением актера получения, которое является местоположением портала,
00:22:12
так что опять же, это расстояние между
00:22:14
камерой игрока и порталом, на котором
00:22:16
находится игрок. просматриваем
00:22:18
и хотим
00:22:21
мы собираемся добавить
00:22:24
мы собираемся добавить еще один к этому,
00:22:27
и причина, по которой мы это делаем, заключается в том, что есть
00:22:29
небольшая свобода действий
00:22:32
между
00:22:33
ближней плоскостью отсечения и местом, где
00:22:34
находится портал,
00:22:36
и Я только что обнаружил, что он выглядит лучше
00:22:38
и избавляется от маленьких визуальных
00:22:40
артефактов, если вы добавите сюда еще один маленький
00:22:41
блок, поэтому мы добавим блок,
00:22:44
а затем это будет наша новая
00:22:45
пользовательская плоскость отсечения для захвата сцены связанных
00:22:48
порталов,
00:22:50
поэтому мы хотим использовать мы хотим
00:22:52
снова получить захват сцены нашего связанного портала, поэтому
00:22:54
перетащите этого парня
00:22:55
и скажите «получить захват сцены», который снова является
00:22:58
просто камерой,
00:23:01
и мы можем сказать «установить
00:23:03
настройки
00:23:04
рядом с плоскостью отсечения»,
00:23:06
и мы хотим подключить этого парня туда
00:23:10
и этот парень там вот
00:23:12
так, так что это должно выглядеть так: получаем
00:23:14
диспетчер камеры игроков, получаем местоположение
00:23:17
его компонента преобразования,
00:23:19
получаем расстояние между этим местоположением
00:23:21
и нашим местоположением, которое является
00:23:22
порталом,
00:23:24
а затем мы просто добавляем его к нему, а затем
00:23:26
мы установит пользовательскую ближнюю
00:23:28
плоскость отсечения нашего компонента электрической сцены
00:23:31
на это значение,
00:23:32
поэтому, если вы запустите это сейчас, на самом деле это не
00:23:34
совсем будет работать, вы увидите, что все
00:23:36
еще делает то же самое, что мы все еще видим в
00:23:38
этом поле,
00:23:39
и причина этого в том, что если вы наведете
00:23:41
на это курсор, он скажет,
00:23:44
что установите b переопределить пользовательскую ближнюю
00:23:46
плоскость отсечения в значение true, если вы хотите использовать
00:23:48
пользовательскую плоскость отсечения,
00:23:49
поэтому нам нужно щелкнуть
00:23:53
здесь по захвату нашей сцены
00:23:56
и выполнить
00:23:57
поиск по пользовательской,
00:23:58
и вы увидите, что она появляется как пользовательская
00:24:00
плоскость почти отсечения, поэтому для нее необходимо
00:24:02
установить значение true, вы можете просто оставить это поле
00:24:04
пустым, потому что мы перезаписываем его прямо
00:24:06
здесь, но важно, чтобы для этого параметра было
00:24:08
установлено значение true, и тогда мы фактически будем использовать
00:24:10
это значение,
00:24:12
так что теперь, если мы будем играть это
00:24:15
и мы просматриваем наш портал, вы можете
00:24:17
видеть, даже когда мы делаем резервную копию очень далеко, мы на самом деле никогда
00:24:19
не видим этот другой блок,
00:24:21
потому что он ничего не отображает,
00:24:24
пока не доберется до того места, где
00:24:26
начинается портал,
00:24:27
так что это выглядит правильно, и вы можете видеть, что мы
00:24:29
можем ходить вокруг и посмотрим влево и вправо,
00:24:31
и мы сможем увидеть через этот портал, если мы
00:24:33
прыгнем, мы сможем посмотреть вниз,
00:24:34
и то же самое с этим, так что теперь мы можем видеть
00:24:36
этот ящик под этим углом, так что
00:24:38
кажется, что все работает довольно хорошо,
00:24:40
хм,
00:24:42
итак, мы собираемся сделать одно здесь нужно исправить,
00:24:44
вы заметите, может быть, вы пока не можете точно
00:24:46
сказать,
00:24:47
гм, давайте изменим несколько
00:24:50
настроек, поэтому вы можете заметить одну вещь:
00:24:51
изображение выглядит немного размытым,
00:24:53
поэтому по умолчанию в Unreal включено размытие в движении,
00:24:57
и мы просто хотим выключите это,
00:24:58
потому что это сделает его намного
00:24:59
лучше, я обнаружил, поэтому, если вы зайдете в настройки проекта
00:25:02
и вы ищете размытие в движении, мы можем
00:25:04
отключить этого парня,
00:25:06
а затем вы тоже захотите, пока мы
00:25:07
здесь, если вы ищете рядом плоскость отсечения,
00:25:10
мы также хотим установить ее довольно низко,
00:25:12
поэтому 0,000,
00:25:15
вероятно, является хорошим значением, и причина, по которой
00:25:17
мы устанавливаем это низкое значение, заключается в том, что как только мы доберемся до
00:25:19
точки, где мы начинаем проходить через
00:25:20
порталы, нам нужна ближайшая
00:25:22
плоскость отсечения для нашей камеры. быть очень низким, чтобы он
00:25:24
не начал отсекать
00:25:26
портал, который находится прямо перед нашими
00:25:28
лицами, потому что в какой-то момент, когда мы
00:25:29
начнем проходить через него, мы
00:25:30
подойдем очень-очень-очень близко к этому
00:25:32
порталу, и мы хотим мы все еще можем
00:25:34
видеть его, мы не хотим, чтобы он обрезался,
00:25:36
поэтому мы собираемся установить его очень
00:25:37
низко, а затем, я думаю, чтобы это
00:25:39
вступило в силу, вам нужно будет
00:25:40
перезапустить двигатель для ближайшего клипа
00:25:42
плоскости вступит в силу, но мы в
00:25:44
любом случае перезапустим ее здесь через секунду, когда
00:25:46
настроим
00:25:47
плюсовую сторону процессора, которая, опять же,
00:25:49
будет очень-очень незначительной, но
00:25:51
поэтому нам пока не нужно ее сбрасывать,
00:25:53
но вы это сделаете. обратите внимание, что мы отключили
00:25:55
размытие в движении, оно выглядит намного более плавным,
00:25:57
но вы можете увидеть некоторые визуальные артефакты,
00:25:59
особенно как здесь,
00:26:01
вы можете видеть землю там, когда я смотрю
00:26:02
вверх, это как будто что-то
00:26:04
не так,
00:26:06
причина, по которой это происходит, в том, что,
00:26:09
хм, это то же самое, из-за чего
00:26:11
сейчас это выглядит немного строго, потому что помните, что
00:26:13
с самого начала мы установили для наших
00:26:15
целей рендеринга жестко запрограммированное разрешение 1920x1080,
00:26:19
и если мы действительно запустим его в новом
00:26:20
окне редактора, то
00:26:22
мой монитор довольно близок к 1920 году.
00:26:24
1080 я думаю,
00:26:25
и мы смотрим на это, это на самом деле делает
00:26:27
проблему намного ближе к
00:26:29
решению,
00:26:32
но она все еще не идеальна, и вы
00:26:34
заметите, как если бы я взял окно
00:26:36
и перетащил его, чтобы немного перекосить,
00:26:41
вы Я замечу, что
00:26:42
через портал он действительно выглядит запутанным,
00:26:44
как
00:26:45
здесь. Коробка выглядит довольно идеально
00:26:48
квадратной, но через порталы он
00:26:50
выглядит совсем не
00:26:51
правильно, и
00:26:52
причина этого в том, что
00:26:54
мы все еще используем разрешение 1920 на 1080
00:26:56
для цель рендеринга, когда на
00:26:58
самом деле мы хотим соответствовать любому
00:26:59
разрешению окна,
00:27:01
поэтому для этого нам нужно сделать
00:27:03
немного c плюс, так
00:27:05
что давайте продолжим и сделаем это, теперь это
00:27:06
будет действительно очень
00:27:07
просто,
00:27:09
нам просто нужен доступ к функции внутри
00:27:12
цели рендеринга, к которой у нас нет
00:27:14
доступа в чертежах, по какой-то
00:27:15
причине они просто решили не раскрывать
00:27:17
ее, поэтому
00:27:18
мы собираемся создать библиотеку функций C Plus,
00:27:21
подобную этой, но на C Plus,
00:27:24
и мы мы просто собираемся написать очень простую функцию, я просто покажу ее вам
00:27:26
очень быстро, чтобы вы не слишком волновались,
00:27:29
хм, это будет выглядеть так,
00:27:31
и это будет называться resize
00:27:33
render target, и это займет
00:27:34
цель рендеринга - новый размер для x
00:27:36
и y, и он просто вызовет
00:27:38
цель изменения размера для цели рендеринга, чтобы
00:27:41
сделать это,
00:27:42
надеюсь, у вас уже есть Visual
00:27:44
Studio, Writer или какая-то IDE,
00:27:46
настроенная для C плюс, если вы этого не сделаете у меня еще нет
00:27:49
такой настройки, у меня на
00:27:51
канале есть руководство о том, как настроить ide
00:27:54
с Unreal, если вы
00:27:55
впервые используете c plus, потому что
00:27:57
вам нужно установить Visual Studios или
00:27:58
что-то вроде Я хочу на самом деле ввести
00:28:01
код, поэтому я постараюсь не забыть указать
00:28:03
его в описании, если вам нужно
00:28:04
сначала его настроить, но
00:28:07
если предположить, что вы это настроили, все, что вам
00:28:08
нужно сделать, это перейти сюда к
00:28:10
инструментам и новому c плюс класс, я думаю, если
00:28:13
вы используете Unreal Engine 4, это
00:28:15
похоже на файл нового класса sql, но они переместили
00:28:18
его сюда, так что новый класс cps plus
00:28:20
и для типа, я думаю, если вы прокрутите
00:28:23
вниз, да, там
00:28:25
просто библиотека функций чертежа идите вперед
00:28:27
и выберите этого парня, нажмите «Далее», а затем
00:28:30
вы можете называть его как хотите,
00:28:32
я думаю, я назвал свою
00:28:36
библиотеку функций портала, и создайте класс,
00:28:41
если вы не знаете, что такое
00:28:42
библиотека функций, это, по сути, просто
00:28:44
набор функций к которому можно получить
00:28:45
доступ откуда угодно,
00:28:48
так что это хорошее место, чтобы просто добавить
00:28:49
случайные функции, к которым вам
00:28:51
понадобится доступ в нескольких
00:28:52
местах,
00:28:54
если вы действительно делаете этот проект,
00:28:56
как в настоящей настоящей команде, или что-то вроде
00:28:58
того, как
00:28:59
я бы сделал вероятно, поместил эту функцию
00:29:01
в мой класс портала, потому что у меня,
00:29:02
вероятно, есть класс портала b c plus,
00:29:05
но поскольку я не хочу прилагать
00:29:07
все усилия по созданию
00:29:10
портала на языке c plus, мы просто
00:29:12
поместим его в библиотека функций, чтобы
00:29:13
все было красиво, красиво и просто,
00:29:16
чтобы вы могли видеть, как она компилирует код c plus,
00:29:20
и как только это будет сделано, я объясню,
00:29:22
что делать дальше,
00:29:25
хорошо, так что, как вы видите, она
00:29:26
запустила Visual Studio,
00:29:28
так что у нас все еще есть здесь проект работает в
00:29:30
фоновом режиме, но теперь у нас
00:29:32
работает визуальная студия, не
00:29:34
путайте, у меня их два, это тот
00:29:37
пример, который я показал в
00:29:38
начале, поэтому у меня их два, но
00:29:41
ваш должен выглядеть именно так
00:29:43
и у вас должны быть портал function.h
00:29:45
и
00:29:46
портал functionlibrary.cpp, и вы
00:29:48
также можете увидеть эти файлы здесь
00:29:49
слева, так что эти два парня здесь, так что это
00:29:52
те, которые мы собираемся снова заполнить, это будет очень просто,
00:29:54
мы просто хотим добавить одну функцию, чтобы иметь возможность
00:29:56
изменять размер целей рендеринга, поэтому,
00:29:59
чтобы иметь возможность вызывать эту функцию
00:30:01
в чертежах, нам нужно добавить
00:30:04
макрос функции u над ней, а затем нам нужно
00:30:06
добавить
00:30:11
вызываемый тег blue print вверху,
00:30:12
а затем мы также можем добавить ее в
00:30:14
категорию
00:30:20
библиотеки функций портала, например,
00:30:23
а затем,
00:30:24
чтобы создать
00:30:26
функцию внутри
00:30:28
библиотеки функций, она должна быть статической, чтобы к
00:30:30
ней можно было получить доступ из
00:30:32
любого места,
00:30:33
и для этого мы нам не нужно
00:30:34
ничего возвращать, поэтому мы просто скажем void
00:30:36
в качестве возвращаемого типа,
00:30:37
а затем в качестве его имени мы
00:30:38
назовем его resize
00:30:41
render target,
00:30:43
а затем это должно принять u-
00:30:46
текстуру
00:30:47
render target 2d и это будет
00:30:50
указатель на него,
00:30:52
и мы просто назовем эту
00:30:53
цель подчеркивания рендеринга,
00:30:55
а затем он также должен принять
00:30:57
подчеркивание размера с плавающей запятой x и подчеркивание размера с плавающей запятой
00:31:02
y,
00:31:04
а затем мы также хотим убедиться, что
00:31:05
мы делаем это общедоступным Итак, мы скажем общедоступный,
00:31:08
а затем поставим двоеточие,
00:31:09
вот так,
00:31:11
и начнем, вот как это
00:31:12
должно выглядеть,
00:31:13
я не знаю, нужно ли нам включать
00:31:15
это или нет, я думаю, он сообщит нам об
00:31:17
ошибке, если это необходимо to
00:31:19
так что это наша точка h, а затем наша точка cp
00:31:22
точка cpp, мы просто хотели найти эту
00:31:23
функцию,
00:31:24
поэтому,
00:31:25
если вы просто скопируете этого парня, а затем перейдете к
00:31:28
cpp,
00:31:29
мы сможем затем
00:31:31
вставить его
00:31:32
сейчас для cpp, нам не нужны статические
00:31:34
ключевые слова, мы можно избавиться от этого,
00:31:36
а затем перед этим мы просто хотим
00:31:38
ввести имя нашего класса, поэтому
00:31:43
двоеточие библиотеки функций портала, чтобы охватить его,
00:31:46
а затем очень важно, мы хотим
00:31:48
избавиться от точки с запятой в конце здесь,
00:31:50
поэтому удалите точка с запятой,
00:31:52
а затем открывающие и закрывающие фигурные скобки,
00:31:56
все в порядке,
00:31:57
поэтому
00:31:58
мы просто хотим сначала убедиться, что наша
00:32:00
цель рендеринга действительна, поэтому мы скажем, что если
00:32:04
цель рендеринга
00:32:05
равна нулю,
00:32:08
то просто продолжайте и возвращайтесь,
00:32:11
потому что делать нечего,
00:32:12
а затем в противном случае мы хотим на самом деле
00:32:14
изменить его размер, поэтому мы собираемся сказать «рендерить
00:32:16
цель подчеркивания»,
00:32:18
а затем стрелку,
00:32:20
и тогда похоже, что нам
00:32:21
придется включить это, но имя
00:32:22
функции просто называется «
00:32:24
resize
00:32:25
target», и она принимает x и y,
00:32:27
поэтому мы передадим наш размер x
00:32:30
и наш размер y,
00:32:33
размер y,
00:32:34
точно так же, и
00:32:36
если вы посмотрите на эту ошибку, это просто
00:32:37
говорит о том, что точка на неполный класс не
00:32:38
разрешена, так что это просто потому, что нам нужно
00:32:40
включить цель рендеринга Итак, здесь
00:32:43
мы просто скажем, что фунт
00:32:44
включается, а затем путь - это движок, косая черта,
00:32:48
текстура, цель рендеринга, 2d
00:32:52
точка h,
00:32:54
и все, итак, на этом этапе мы
00:32:57
должны быть в состоянии
00:32:59
скомпилировать эту вещь, поэтому, если мы сохраним это,
00:33:02
а затем вернемся назад к нашему
00:33:04
проекту нереального движка, и давайте нажмем на
00:33:07
файл и сохраним все, потому что мы собираемся
00:33:09
закрыть это и собираемся перезапустить
00:33:10
его через Visual Studio,
00:33:12
поэтому, как только вы все сохраните,
00:33:14
закройте его,
00:33:16
а затем здесь, в Visual Studio
00:33:19
мы собираемся переключить это на отладку игрового
00:33:20
редактора на всякий случай, если нам понадобится его отладить,
00:33:23
а затем, как только он переключится, мы
00:33:25
нажмем эту маленькую зеленую кнопку
00:33:27
здесь, чтобы запустить его,
00:33:28
а затем нам просто нужно подождать, пока нереально,
00:33:30
чтобы посмотреть
00:33:32
все прямо сейчас Unreal запущен, но
00:33:35
теперь он запускается через визуальные
00:33:36
студии, поэтому, если вы посмотрите на свою визуальную
00:33:38
студию, вы увидите, что
00:33:40
ее верхняя часть должна выглядеть так, если
00:33:42
вы используете визуальную студию, поэтому у вас есть
00:33:43
кнопка остановки и все такое это означает, что
00:33:45
он работает, и на самом деле он запускает
00:33:47
вашу версию Unreal,
00:33:49
так что здесь у нас должен быть доступ
00:33:51
к этой функции сейчас, поэтому мы хотим сделать
00:33:53
это внутри порталов, отметьте галочку там,
00:33:55
где мы делали все остальное, поэтому
00:33:57
вернитесь к нашему
00:33:58
портал bp
00:34:01
и обратно сюда, в наш график событий, поэтому,
00:34:04
прежде чем мы сделаем все это
00:34:06
прямо перед этой последовательностью,
00:34:10
давайте,
00:34:12
я думаю, мы можем сделать это после последовательности,
00:34:14
может быть, да, поэтому после последовательности
00:34:17
мы хотим назвать эту цель рендеринга изменения размера,
00:34:19
так что давайте убедимся мы видим
00:34:20
эту функцию, которую мы только что написали, поэтому
00:34:22
щелкните правой кнопкой мыши и найдите
00:34:24
цель рендеринга изменения размера, и вы можете увидеть
00:34:26
здесь, что она находится в нашей библиотеке функций портала,
00:34:28
поэтому мы можем нажать на этого парня,
00:34:31
и все, что мне нужно сделать, это предоставить ему
00:34:33
цель рендеринга
00:34:35
и новый размер x и y, который нам нужен,
00:34:41
поэтому
00:34:42
для цели рендеринга это будет
00:34:44
наша
00:34:49
цель захвата сцены, получение текстуры
00:34:53
вот так,
00:34:54
и давайте просто подключим этого парня вот
00:34:58
так,
00:35:01
а для x и y это будет
00:35:03
основано на нашем окне просмотра размер, чтобы мы могли
00:35:05
просто щелкнуть правой кнопкой мыши и сказать: получить
00:35:09
размер области просмотра,
00:35:11
и мы можем разделить этого парня,
00:35:13
теперь мы можем просто перетащить x в x
00:35:16
и y в y,
00:35:19
и это сработает нормально, на самом деле,
00:35:20
давайте просто сделаем это здесь, чтобы я мог вам показать, так что
00:35:22
перетащите эти ребята вернулись
00:35:25
и давайте нажмем кнопку воспроизведения,
00:35:27
чтобы он все еще оставался в этом странном размере,
00:35:28
что на самом деле хорошо для тестирования,
00:35:30
поэтому,
00:35:32
когда мы просматриваем портал, вы можете
00:35:33
видеть, что куб выглядит
00:35:35
так же, как и
00:35:36
в обычной сцене, и это потому, что
00:35:39
мы теперь обновляет размер
00:35:40
цели рендеринга всякий раз, когда
00:35:42
изменяется порт v, и вы можете
00:35:44
беспокоиться, что мы делаем это
00:35:45
внутри тика, и что он просто
00:35:46
постоянно меняет размер этой текстуры, но на
00:35:49
самом деле это не так, если вы действительно посмотрите
00:35:51
на изменить размер целевой функции в C плюс,
00:35:53
плюс это внутри движка,
00:35:55
он немедленно проверяет,
00:35:57
первое, что он делает, самое первое, что
00:35:59
он делает, это убеждается, что размер
00:36:01
на самом деле разный, поэтому, если он одного и того же
00:36:03
размера в каждом передаваемом кадре
00:36:04
на самом деле он ничего не делает, он
00:36:05
просто выходит из строя раньше времени, и поэтому на
00:36:07
самом деле нет никаких затрат на вызов этого каждого
00:36:08
кадра,
00:36:10
но в любом случае мы можем, ну, мы можем попробовать
00:36:12
изменить размер этого окна,
00:36:14
и вы увидите, как только вы измените его размер,
00:36:17
все по-прежнему выглядит правильно,
00:36:19
и мы не надо, также у нас нет такой
00:36:20
странной проблемы, как способность видеть
00:36:22
сквозь землю,
00:36:24
так что теперь рендеринг нашего портала довольно
00:36:26
хорош, но я хотел отметить одну вещь:
00:36:30
вы, возможно, захотите предоставить эту опцию или
00:36:32
захотите иметь возможность снизить
00:36:34
разрешение порталов, потому что
00:36:37
рендеринг порталов на самом деле может быть довольно
00:36:38
дорогим, потому что вы на самом деле
00:36:39
перерисовываете сцену еще два раза, по
00:36:41
одному для каждого портала, поэтому, если вы хотите
00:36:43
снизить разрешение этих порталов,
00:36:45
вы можете сделать это довольно легко,
00:36:48
просто разделив это на какое-то постоянное
00:36:50
число, чтобы мы могли сказать, что
00:36:52
на самом деле давайте просто умножим это на
00:36:54
десятичную дробь, а не на пи,
00:36:57
давайте посмотрим, как умножается,
00:37:00
поэтому давайте создадим узел умножения для каждого
00:37:01
из них, вот
00:37:03
так,
00:37:06
так что один для x и один для y, а
00:37:08
затем любое число, которое вы здесь поставите, так что
00:37:10
давайте просто щелкнем по нему правой кнопкой мыши и
00:37:12
повысим его до переменной,
00:37:13
и мы назовем это, э-
00:37:16
э,
00:37:19
качеством портала,
00:37:20
так что, поскольку мы умножаем его, э-э, на
00:37:22
большее число мы поместим здесь более высокое
00:37:24
качество, оно будет более высоким, поэтому, если мы поместим
00:37:25
один здесь, упс, на самом деле убедитесь, что он
00:37:27
находится здесь, а также
00:37:29
убедитесь, что он подключен к обоим,
00:37:30
поэтому, если мы поставим здесь 1, это будет выглядеть
00:37:32
точно так же, как мы раньше, потому что мы
00:37:33
просто умножаем размер области просмотра на
00:37:34
единицу,
00:37:36
но если мы уменьшим его примерно до 0,25,
00:37:38
качество уменьшится до 25,
00:37:41
поэтому, если мы поиграем в это сейчас
00:37:43
и посмотрим через порталы,
00:37:45
вы увидите, что качество упадет. быть
00:37:46
намного ниже, у нас возникают некоторые странные проблемы с
00:37:48
тенями, так что, возможно, это
00:37:50
слишком низко, но это намного более оптимизировано,
00:37:53
и компьютеру намного легче
00:37:54
справиться, потому что текстуры
00:37:56
намного меньше, поэтому вы можете захотеть
00:37:57
Остановитесь на чем-то вроде 0,6 или на
00:37:59
чем-то таком, что все еще выглядит довольно хорошо,
00:38:01
но
00:38:02
вы знаете, что вам не обязательно нужно
00:38:04
полное максимальное качество для ваших порталов,
00:38:06
если только это не то, к чему вы стремитесь, тогда
00:38:07
вы можете увеличить его до одного или даже
00:38:09
двух, если хотите ты чувствуешь себя сумасшедшим,
00:38:11
но я рекомендую что-то около шестидесяти
00:38:13
процентов,
00:38:15
хм, но да, вот как ты это делаешь,
00:38:18
а потом давайте посмотрим здесь,
00:38:20
хм,
00:38:22
окей, на самом деле я думаю, что мы, я
00:38:24
думаю, мы хороши, позвольте мне попробовать еще несколько
00:38:28
ориентаций этой стены, очень быстро
00:38:31
просто чтобы убедиться, о
00:38:32
нет, почему это происходит, видите, у меня была
00:38:35
эта проблема в другом моем проекте, где
00:38:38
в какой-то момент
00:38:39
он перестал позволять мне перетаскивать вещи,
00:38:42
как будто я не могу перемещать вещи, я не знаю, есть ли у
00:38:44
вас, ребята, такая проблема, но я думаю
00:38:46
это как-то связано с Unreal
00:38:47
Engine 5
00:38:48
и использованием Visual Studio,
00:38:50
но
00:38:52
в любом случае
00:38:53
я думаю, что могу просто
00:38:55
добавить новую стену вручную, я не знаю,
00:38:57
хорошо, я просто отредактировал ту часть,
00:38:58
где я добавил эту другую стену, я не
00:39:00
знаю, почему это не позволяет мне перетаскивать вещи,
00:39:01
когда я работаю в визуальной студии.
00:39:04
Если у вас, ребята, тоже есть такая проблема, мне было бы
00:39:05
интересно узнать об этом, но я
00:39:06
почти уверен, что это просто не имеет ничего общего
00:39:08
с моей версией Unreal at в данный момент
00:39:09
или, может быть, это просто ошибка на моем компьютере,
00:39:11
я не знаю, почему это происходит, но я
00:39:13
просто вручную ввел координаты
00:39:15
и добавил новую стену, просто чтобы мы могли
00:39:17
это проверить, надеюсь, у вас, ребята,
00:39:18
тоже нет этой странной проблемы, но
00:39:21
в любом случае мы можем создавать порталы, и вы можете
00:39:24
видеть, что порталы выглядят
00:39:26
правильно, поэтому мы можем видеть каждый портал
00:39:29
сквозь себя,
00:39:30
и вы замечаете, что это не похоже на эффект бесконечного
00:39:32
зеркала,
00:39:33
он показывает черный цвет внутри
00:39:36
портала во второй раз, когда он не
00:39:37
пытается заново - отрендерите его еще раз, но он должен
00:39:39
работать хорошо, и когда вы создаете новый
00:39:40
портал, он должен удалить старый портал,
00:39:44
вот так,
00:39:46
поэтому убедитесь, что все это выглядит хорошо
00:39:48
и правильно для вас, и на этом этапе мы
00:39:50
можем продолжить и настроить
00:39:54
телепортацию через порталы, поэтому
00:39:56
телепортация будет
00:39:58
самой последней частью этого урока, так что
00:40:00
увидимся
00:40:02
в четвертой части.

Описание:

Support the channel through donations. Crypto accepted! PayPal: https://www.paypal.com/paypalme/reidschannel?locale.x=en_US Patreon: https://www.patreon.com/reidschannel Bitcoin: 1JFwWHr4X6uAeoZadukzqKjzFBj3Qjy7Sk Ethereum: 0x2B2Bc108F1Cc0fF899959dEF3226637787d8C3dE Dogecoin: DNQ33YnhpWoTBokBNVkZP5ub8KTLkpyjpv Join our community discord! Discord: https://discord.com/invite/PdvudWx Portal Assets: https://www.dropbox.com/scl/fi/fir75uqwcbva7l60p7bcw/PortalAssets.zip?rlkey=82jvfy79enp12td0qz4bjw9s1&dl=0 C++ Tutorial: https://www.youtube.com/watch?v=l2YwFOHDC5w

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Unreal Engine - Realistic Portal Tutorial (3/4)"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Unreal Engine - Realistic Portal Tutorial (3/4)" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Unreal Engine - Realistic Portal Tutorial (3/4)"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Unreal Engine - Realistic Portal Tutorial (3/4)" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Unreal Engine - Realistic Portal Tutorial (3/4)"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Unreal Engine - Realistic Portal Tutorial (3/4)"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.