虚幻5-内容示例-蓝图进阶(UE5-content example-blueprints ...
1.1: Randomly scattered meshes(1)如何使用“构造函数”,添加一个staticMesh。
注意:StaticMesh是一个component,需要在里面装一个具体的StaticMesh,因此使用两个节点:
constructionScript——add Static Mesh Component——Set Static Mesh
(2)clamp:
让所选的变量,值在一个固定区间。
(3)分析别人的程序,如果我怎么也找不到这变量在哪设置的(右键-find reference),那么很可能是设置了公开,并在level viewpoint显示,或者直接在细节(details)面板设置
本例当中的【meshes to spawn】
(4)我可以创建一个数组,数组类型是staticMesh,然后,我在细节面板,给这个数组添加七八个不同的mesh,然后我创建一个随机函数,可以随机选择里面当中的某一个mesh,显示在level当中。
本例当中的【meshes to spawn】
注意,这里右边橘色mesh,并没有在外面public选择,所以,不会出现在随机当中。
再次证明public的优先级,大于内部details细节面板的修改。
(5)随机:
random float/integer in range,很好用。
??问题:from stream 和seed,在哪里用,没有详细研究。用到再说吧。
随机可以配合clamp使用
————————————————
1.2 automatic wall
1.3 automatic ring
1.4 customizable spotlight
construction script 的各种使用方法,创建篱笆,创建围墙,创建点光源。可以在“加载”页面实现这些东西。
——我没有细看,先跳过。
————————————————
2.5Child BluePrint(比较详细)
这个项目主要是展示:如何创建一些可以拾取的物品。Ctrl+B找到子类在内容界面本体,然后按照名字,找到父类。点开看看。
parent类的构造函数的作用是:更换staticMesh,更换light。
函数图表(EventGraph)中:
。。。
(1)TimeLine节点的学习:
关于timeLine的官方示例:这里有【灯光闪烁】【开门】两个实例可以练习,是官方文档少有的写的比较详细的部分。(更新,还是不够详细,啥都没有,只能自己研究)
时间轴
紫色部分的按钮搞明白了含义
A:最左边的可以添加4种不同的轨迹,第一个是数值,第四个是颜色,感觉还比较有用。
B:长度是时间长度,如果不设置到最后一帧,那最后一帧就无效了
C:“使用最后一帧”,如果你的上一条选错了,可以把这个按钮点上,上面的错误就无效了。
——备注:虚幻引擎有大量的这种功能。如果你没点这个,你就可以点另外一个冗余。比如碰撞的设置和【AddLocalOffset】节点里面坑爹的sweep选项。
这种设计极为错误!让引擎看起来功能强大了3-5倍,但实际上,增加了使用的学习成本,还不知道哪里√错了,只能硬背,典型的拿自己当聪明人生怕傻子不知道的设计行为。
添加了一堆功能,又不告诉你功能怎么用。但是不点这个,不点那个,又做不了事,极为愚蠢,关键是我自己还没本事写引擎,不会画三角形,做不到他的实时渲染效果附带逻辑运算,只能用他家的,气死!
简单来说,就是做游戏这么一件简单的事情,被他生生给搞复杂了。
D:timeline可以自动启用!可以自动启用!无需添加EventBegin或者手动触发事件。
E:点上这个loop,可以自动播放
F:timeline可以同时影响后面所有的节点,而不是像Loop那样只能影响后面一个节点:测试图:
总结:TimeLine可以让我不用学习他的动画模式,还能制作一些简单动画(实际上也够用了),还是很值得学习的。为后面学骨骼什么的打基础,可能这是虚幻最开始做那么多冗余功能的考量吧。
G:timeline基本上可以当成一个限制时间的tick使用。比如timeline连【AddLocalOffset】就是定时位移了,还挺方便的。
。。。
(2)Playback节点:
这里有一个严重问题:
请看图:上面一部分,设置一个随机的播放时间;下面一部分,设置component的移动和旋转。问题在于,上面【setPlayBackPosition】节点没有连接到下面的timeLine节点,功能却可以使用,怎么回事?
实际测试下来:小十字星的每一次生成的旋转和位置确实不同。
查了一下,我的天,懂了。
这里面的floating是一个变量,这个变量是timeline……
timeline竟然可以是一个变量,也就是说,变量可以是常见的整数,浮点,数组。类,struct。也可以是节点?节点也可以是变量?看了一下,好像只有timeline可以这样。
找到一个youtube视频,当我创建一个timeline的时候,自动在变量区(variables)那边生成一个timeline变量。如果我想用函数对timeline操作,我直接把变量拖出来,然后就可以找到我能做的事情了:
所以,结论。我想修改timeline里面的数值,可以把它变成一个变量,然后修改playbackPosition。
。。。。
(3)靠近小十字,十字会朝我飞过来,在viewport里面把trigger扩大5倍,这个效果就比较清晰了。来研究一下官方是如何实现这个功能的:
A:trigger并不是一种特殊物体,也是一个类。所以并没有trigger这个东西,而是分了三种基础碰撞;
capsule collision,sphere collision,box collision。然后在右边details面板拖到最下面,一堆绿色“+”,选第二个On component begin overlap,就可以当触发器用了。
这里应该destroy component,并不会影响后面print 22222的事件。所以显然这个蓝图是写在大的actor里面的。之前我用【destroy actor】然后各种报错,印象深刻。可以尽量使用【destroy component】节点,并不会影响后面使用执行节点。
(4)call on PickUpEvent:不懂,跳过,写的是触发一个委托?事件可以在子类或者关卡蓝图调用,看了一下,没有pickupevent这件事,也不能编辑,不知道咋回事。
(5)【Lerp】:取平均数怎么简单的东西,为什么要起线性插值这么高大上的名词?俩数(向量……)一减再除以2呗……
自己创建一个测试学习的节点,排成这个样子,可以明显看到物体向上移动的速度最开始很慢,然后很快。
。。。
这样,父类的代码就研究完了。现在来看一下2.5项目核心要学的内容父类子类……进度是真慢啊……
(6)子类父类继承的问题:之前自己研究过,再看一遍官方是怎么做的:
点开子类看看。
原来(4)那里不理解的东西,看到父类子类这里,就理解了。一点一点来吧:
A:土黄色节点【Parent:BeginPlay】是自动创建的,不能删,删了,父类代码就子类就没法用了。
B:【自定义事件】和【bind event to】
这个父类子类通过事件传递,还是挺强的。想了一下。
我之前只能在父类里面写代码,子类里面添加代码。
现在我可以在父类里面写条件判断,某种情况下,发消息,传递到子类。子类里面也可以有不同的功能,很不错。
C:【apply damage】:不懂。可能和《内容示例》当前关卡的主角有关吧,暂时先不研究这里。
————————————————
2.4时间轴开关门
。
这不就是好多教程里面讲的开关门么……稍微研究一下就能看懂吧……
看完了,确实差不多。和上面一样,把时间轴变量拖出来变成一个节点,用stop控制时间轴,就这一点不太一样了。剩下的算法没细看。感觉很容易,用到再说了。
————————————————
2.3蓝图接口示例:可能在blueprint_communicaiton里面学习会好很多?
。代码略显复杂,蓝图接口我也不明白。跳过,回来再补。
————————————————
2.2,控制聚光灯,始终照在我身上!
。
大致看了一下:构造函数里有六个功能,事件图表里面有4个功能,还有11个变量,怎么会如此复杂呢?先点个吃的。然后慢慢看一下。
小卖部关门了。只好自己做饭了。煮了点饭,回来继续看。现在我发现public变量的好处了。7个public变量,如果全部都在函数里面调整,确实比较麻烦,在外面调整,很快就能调整出自己想要的灯光效果。
外面的7个变量分别是
Yaw:初始z轴
Pitch:初始x轴
light Radius:光源半径
light color:
detected color:检测光源颜色,这个有点强。正常情况下是暖黄光,看见我就变成血红光芒。
turn of开关
Detection Range检测半径。
有点那种巡逻小怪的样子了。很不错的一个小功能。
。。。
先来看一下构造函数
(1)公共变量public,可以用clamp夹起来,这样就不会出现调整过大过小的情况。
(2)这块儿是啥意思?昨天看到一段类似的代码,写在B站上了。结果没有自动保存草稿被吞了,所以才在知乎上写文档。忘了啥意思了,伤心……。
看明白了。无语,那么小的灯的材质,你也要动态设置一下么……随便弄个基础白色呗,浪费代码资源!
(3)后续有一些基础设置,没啥好说的。light beam mesh不知道为什么要用。去掉看一下。
哇哦,这个作用还是很大的。没有,就是照在空处,有了以后,就有光柱的效果了。light beam mesh,不错!
先记住这个东西,等到专门学灯光的时候,再用。
。。。
(4)来看一下事件图表部分(event graph)
代码分成4块,注释很全面。这才是帮新手学UE的样子嘛!难得了您嘞,研究一下。
A:
这一部分。
【is valid】节点。
这个节点有没有,完全没影响。
判断,只有在pawn存在的时候,才能继续执行。可能是为了稳妥起见吧,我自己写程序肯定是暂时不会写这些的,只有在什么时候吃亏了?才开始用这些东西。
B:
【RinLerp to】官方说明是:
Tries to reach Target rotation based on Current rotation, giving a nice smooth feeling when rotating to Target rotation.
nice smooth feeling十分扎眼。应该比取平均数高级一点的差值?尝试替换成普通的lerp,看看能不能用。
实验结果:稍微好用一点点。普通的lerp,比较突兀,RinLerp to稍微平滑一点点。凑活吧。
C:
【find look at rotation】节点,看到过很多次,这次就彻底研究一下吧。
——PS:Mathew Wadstein:这个家伙,我搜问题的时候,已经两次搜到这个人了。youtube大致点开他的主页看看。都是几分钟的短视频,讲解UE知识点,这很好,比动辄几小时的长篇教程强很多,是干货,要找机会看看。这样吧,我先花点时间搜搜UE的优秀up。
没搜到什么。先这样吧,回来继续研究find look at rotation。这个节点。
我应该如何让一个物体旋转呢?
午觉睡起来,天都黑了,继续:【findLookAtRotation】的简单用法(不是这关里的这个复杂用法)见下图:
拿到物体的位置向量,减去目标物体的位置向量,得到一个旋转向量YawPitchRoll,然后直接【setWorldRotation】就可以了,直接连完以后,是瞬间转移过去。因此再加上Timeline,每帧一点一点动过去,3秒到达位置。timeline设置为自启动。
timeline设置,十分简单,(0,0)和(3,1)
数学上不应该消耗太多功夫,显然,后面学了C++,比在蓝图里面敲数学要容易的多。差不多就停了。
然后,这个控制节点,就没什么可看的了。
。。。。。。。。。。。
剩下的内容先空着。打算稍微复习一下这两天的内容,总结一下我会的功能,尽快开始学“蓝图通信map”和“蓝图输入map”。
页:
[1]