欢迎光临散文网 会员登陆 & 注册

UE5.2《传送门-Creating Portal To Another Reality》教程

2023-05-16 16:28 作者:bili_3493273303780263  | 我要投稿

开篇先导:

本教程为,UE5.2 商城每月免费资产《Creating Portal To Another Reality》所作的中文技术指导简单教程。

因为缺少中文的教程,所以顺手做了一期,需要配合up的视频教程一期使用效果更加。

已经和作者本人联系授权,下面是传送门作者本人的youtube地址和资产链接,大家如果喜欢可以直接去支持关注他。

作者的YouTube账号:https://www.youtube.com/@Zegi/featured

Demonstration: https://www.youtube.com/watch?v=3c1telTrgYM
Update: https://www.youtube.com/watch?v=-d4uzt4YSvI
Documentation: https://docs.google.com/document/d/1dr241IMqIYZj3I0w0Q4lYjo-_wm8Lvnk47xL7YEgSLI/edit?usp=sharing

0.        该资产的特征

1.        快速入门 quick start

2.        材质演示 demo material

3.        添加大于3个unique portal

4.        See事件

5.        传送门的激活方法

6.        如果角色移动过快或FPS过低

7.        多个复杂的actor碰撞处理

8.        光源或则其他类型的actor

9.        后期处理volume

10.     Grab objects

11.     植被碰撞 Foliage Collision

12.     第三人称视角

13.     生成portal

14.     更改portal的形状

15.     Portal的有效距离(以及可能在距离上出现的问题的解决方案)

16.     将Portal附加到相机上

17.     VR(不演示和教程制作,无VR设备)

18.     Oculus Quest

19.     联系我们

20.     已知的漏洞和未来的更新

21.     不需要文档的补丁说明

22,    观众提出的问题

还没更新完,先上传存档下

0.  该资产的特征

    0.1 不使用RenderTarget和PostProcess,只使用材质函数和蓝图。

    0.2 如果玩家看到一个物体,就会产生碰撞。如果玩家看不见,就没有碰撞。

    0.3 可以自定义通过Portal的物体, StaticMesh SkeletalMesh, Foliage Simply put,                     everything you can apply the material to。

    0.4 Actors can also use the portal themselves without your participation.

    0.5 多个传送门可以链接同一个世界,一个传送门内也可以包含另一个传送门,不同的传送门可以链接到不同的世界。

2号传送门连接着另一个绿色世界
3号传送门连接的,2号传送门修改后的世界


1.  快速入门 quick start

第一步就是添加我们的一个可以响应传送门效果的actor

我们如何添加一个新的static actor。该actor 用来供我们的portal使用呢?

1.1 我们先来到我们的bp文件内

然后直接复制一分BP——cube这个模板类,自己改个名字,然后复用即可
复制后,双击进入蓝图
进入该界面,搞个自己要测试的mesh,然后在给他整个普通的材质。
找到demo material文件夹 里的M_StaticActorP1,然后直接CV里面的内容
复制这两块代码块即可。
需要提前做个工作,那就是把自己新建的材质输出端的混合模式,改成已遮罩
然后我们将他cv到你自己新建的材质里,链接到不透明蒙版

提示,portal的标签必须与actor的标签匹配(portal+数字),以便正确地进行碰撞操作。如果你不需要修改碰撞,那么就不必在actor上设置标签。

在场景中选中我们的对象,给他添加tag标签,为Portal1,portal1的意思是我们的一号传送门
测试对象的static还是inversion随你自己决定
把传送门拖出,勾上enable,portaltag=1
可以看见,效果已经实现

细节:

反向(Inversion)复选框:

    决定了物体最初在传送门Porta的哪一位面。如果你想要在传送门Porta的不同位面 观测 整个场景,那么MPC中的可见性选项将会很有帮助。

静态(static)     复选框:

    只会影响抓取Grab事件,该事件位于第一人称角色FirstPersonCharacter中,创建它只是为了演示物体通过传送门时,该物体的变化状态。

这两变量由蓝图类设置
MPC支撑传送门显示内容的参数集合,会在BP_Portal蓝图里用到


2. Demo Material

在demo materials 的文件夹中,你能够发现static actor的模板材质实例。

对于dynamic actor 他也能穿过传送门portal,(与static actor相同,但是具有“穿过portal瞬间Transition”的块),以及用于环境的模板。


使用环境模板,您可以创建2个完全不同的material,它们将根据您相对于portal的位置显示。


,我们能看见3个材质模板

3个模板的文件夹内

1:用于static actors 的模板

2:用于可以穿过传送门Porta的 动态actor的模板(与静态actor相同,但包含“在穿越传送门Porta时”的代码块)

3:用于environment的模板。

使用environment模板,我们可以创建出2个完全不同的材质,这些材质将根据你相对于传送门Porta的位置而显示。

 

可以看见当前的世界物体使用的p1的材质

如果我们要设置material分配给另一个传送门Porta,则必须修改Basic part中的“材质参数集”合。只需更改集合本身即可。参数名称将自动分配。

材质函数,搞美术的应该直接能看懂

如果我们要分配material材质给别的传送门,那就必须要先修改basic part中的材质参数集合。 只需要更改集合本身就足够了,参数名称他自动会分配。 

可以看见,我们只需要选择函数节点的材质参数集,将其应用上去即可,而mpc portal这个材质参数集,


3. 添加大于3个各自独立的portal

如果我们想要添加大于3个unique portal,每个传送门都通往不同的世界,那我们需要进行以下几个步骤:

  1. 复制文件夹DemoMaterials中的,”材质参数集合“文件(无需更改内容)。直接CV

  2. 在BP_Portal中,编辑PortalTag变量的范围。

变量--》滑条范围And值范围,英文版的自己脑内翻译即可

    3.在BP_Portal文件的三个位置复制代码(需要复制的位置已用绿色区域标记)。 

只需复制BP_Portal中已有的内容,并将MPC更改为你在第一步中创建的内容。 例如,在编号为1的块中添加第4个传送门将如下所示。

5. 创建material并在需要时标记角色。


4.   See事件

关于"See event"。 

它允许你决定玩家通过传送门时,看见物体时触发的事件。但是这个事件可能会对性能产生负面影响。

See event是在持续工作的,当subject状态发生变化时就会被subject自身所调用。这是通过射线追踪完成的。当玩家通过传送门时便会触发过渡。

"Transition event"在玩家穿过Portal时触发。

    在99.9%的情况下,你不需要考虑"Transition event",因为"see event"可以做相同的事情,但更高效。但是,如果你想进行性能上的优化,那可以放弃使用"see event"。 这些接口是在BP_Portal内调用的。

具体请看 :“Player Transition”和“Changes in visibility through the portal. Shutdown can greatly improve productivity”这两个代码块


此时,我们看着传送门

相反,我们可以使用Transition事件。 当可见性改变时,See事件会触发。你可以在子类actor中扩展它。 

BP_Actor蓝图类中,see 接口事件在我们观测门的另一端物体时,会调用此事件

默认情况下,仅触发碰撞切换。

您可以使用RealVisibility(真实可见性)变量来确定actor的状态。

如果在您的游戏中玩家可以拾取物品并通过传送门携带它们,我建议在RealVisibility变量变为False时添加自动解除附着的物体。

我没有将它添加到demo level中,因为我喜欢将物品管理在门户的隐形侧面。但这可能导致非常奇怪的结果,而且很难让所有玩家理解发生了什么

5. active portal

你可以同时激活具有不同标签的无限数量的传送门。

为了优化性能,我建议禁用远离玩家的portal。要做到这一点,只需将“Enable”变量更改为False。


6. 如果角色移动过快或FPS过低

    6.1 但是,如果有多个具有相同标签的传送门,则同一时间只能激活其中1个。 

            激活此类传送门的最简单方法是通过EnablePortal(启用传送门)事件。

    6.2 如果帧率过低,门户可能无法正常工作。

你可以通过增加BP_Portal中Box的宽度来解决这个问题。但最可靠的选择是连接BP_Portal中的2个红色块。

请注意,截图中的位置使用了角色的cast操作。不要忘记在那里放置你的角色。这是唯一一个在特定角色中使用cast的地方。



7.  组合的复杂actor碰撞处理

如果在你的actor类中有多个mesh,则你需要编辑构造脚本并添加一个通用碰撞体。 

你可以使用ShapeComponent、BoxComponent或复杂的StaticMesh作为通用碰撞体。负责此功能的函数位于BP_Actor->CustomOverlap中。

1. 关于actor的静态,动态

如果把WorldStatic设置成ignore而不是overlap的话
可以看见,double box 看似前面的那个穿过了门,但其实根本没过去
屁股还挂在树上呢

8. 光源或则其他类型的actor

    灯光和其他类型的角色 最简单的方法是更改已准备好的actor之一。

从左到右依次为单选static,单选inversion,双选staticAnd Inversion

1,单选static,只在绿色的世界的发光

白色世界不显示
绿色世界显示

2,inversion与之同理

3,双选则是两边都存在

绿色世界
白色世界

实现过程,

1:copy BP cube template
2:添加光源组件
3,设置可见性,set visibility ,boolvalue为 real visibility
4,给actor对象添加上Portal1 标签


9 Volume(体积)

如果涉及到体积对象,可能会遇到困难,因为它们不能正常作为组件工作。解决方法可以是创建一个控制体积的角色。观看PostProcess的示例。

transition事件控制volume
绿色世界响应了volume
而白色世界正常运转,无影响

抓取物体

演示关卡使用了一种基本的抓取物体的方式。你可以在以下文件中查看其实现: PortalsAR\DemoCharacter\FirstPersonBP\Blueprints\Blueprints\FirstPersonCharacter 但你可以根据自己的喜好编写任何关于抓取物体的逻辑。


植被碰撞 

如果想要更改植被的碰撞,需要为植被类分配一个组件,并激活portal。

然而,值得注意的是,只有当玩家穿越门户时,植被的碰撞才会生效。最简单的方法是观看一个短视频,了解工作原理。

没有穿越portal 在门外打的时候,我们观测到,子弹穿过了植被,没有与其发生碰撞
但是当我们走进门里时,再次对绿色世界内的植被射击,子弹与它们发生了碰撞


第三人称视角

该资源未设计用于第三人称视角,但仍可以做一些修改。最简单的方法是在门户上启用相机锁定。第二个选项较为困难,视频展示了需要做的事情。结果可能看起来奇怪,但效果良好。观看角色从白色世界到绿色世界再返回的移动过程,没有错误。


SpawnPortal 

在地图上放置第一个门户之前,应该已经放置了具有相同标签的门户,并且它应该是激活状态。放置门户后,必须使用EnablePortal事件。只有在具有相同标签的门户中最后放置的门户才能工作(视频末尾展示了解决此问题的方法)。

我们调用line trace for object函数,来实现我们要放置传送门的位置
然后在给定我们相机的方位与旋转值,设置给spawn actor函数,该函数在旋转bp portal类时,可以在bp portal类内,自己选择是否要公开一些变量,以便实现可自定义的操作,同时不要忘记生成后,开启enable portal



14.  更改portal的形状

我们可以将Portal制作成三角形或梯形,但需要稍微修改BP_Portal的代码。需要考虑socket的向量,而不是整个对象。


负责显示门的代码块,大家可以自行研究
可以看见,作责把门的形状用5个插槽来控制,我们可以修改或则旋转插槽的位置,以此来修改门的形状
在我们旋转50度后,门的形状被改变

作者还建议在3D编辑器中为StaticMesh Plane_Portal更改为你的新形状,并对BP_Portal进行一些小的修改。




传送门工作的距离


在通过传送门观察物体时,你可能希望增加或减小物体产生反应的距离。

为此,你需要编辑传送门的每一侧。例如,

让我们看到"Up Side"这个代码块处(已添加:现在只需更改线宽!)

你必须要在两个地方上更改所选值。在BP_Portal和MF_Portal中进行修改。

如果您在原理传送门远时看到错误,请尝试增加"BP_Portal"和"MF_Portal"中的线宽(默认值为30000)。

BP_Portal
MF_Portal


Blueprints: 3 basic ones and 7 demonstration childBP.


Material function: 2.


Material parameter collection: 3.


1 basic material and many varieties of it for demonstration.


Interface: 1.

22 观众提出的问题:

    

这老哥告诉我,他这个门只能实现静态光源的切换


UE5.2《传送门-Creating Portal To Another Reality》教程的评论 (共 条)

分享到微博请遵守国家法律