蓝图到底是个啥,掰开揉碎来讲解一下蓝图内部的具体性质
1,蓝图性能差:while循环执行次数多带来的性能消耗+大量虚函数使用运行时的开销+每次用到Cast时做动态类型检查的开销。蓝图适用的场景为实现较为简单的逻辑,例如一个小玩法,UI,LevelSequence等
思路:蓝图应该怎么写?
很多人包括我自己在内,对蓝图感觉束手无策,始终无法真正掌握
原因在于,不是想的不够复杂,而是想的不够简单
在代码中,做出来一个烂东西比想要做完美更好
蓝图中是什么?节点
节点是什么?函数
函数实现什么功能?不知道——>那就调用,不管三七二十一直接调用,至于需不需要返回值,需要什么值,都不需要理会,你甚至可以直接给一个0作为返回值
学习蓝图,先看蓝图的功能,之后一步一步慢慢来,看需要提供什么值,这个值是不是需要要的?
首先需要明确一点,在实际的开发工作中,代码或者蓝图,以及类的编写,都是以实际功能为导向,即都是为了实现某一个确定的功能,例如实现一个UI,点击触发各种事件,或者人物移动,开枪,烟雾特效等等,诸如此类。也因此,我们围绕功能去做实际的开发工作。
首先C++中最常用的一个概念就是类,类本身也就是一个蓝图,并不占用内存,只有实例化之后才会真正的占用内存空间,在实例化之前,它只是一种设想,并不真正存在。而根据开发的需要以及C++追求的代码复用,还有高效的特点,又衍生出类的继承,引申出父类和子类的概念。以及类的改写,引申到虚函数的实现
那么这些特点在UE中如何展现呢,在UE中,类是以怎样的形态出现,又如何使用呢
在【内容浏览器】中,右键,可以选择添加Blueprint Class,在弹出框中就可以选择父类
(值得一提的是,所有的类,都或直接或间接的继承自Object)
首先记住一个顺序:Object>Actor>Pawn>Character
Actor可以是任何物体,或者任何概念
Pawn继承Actor,相当于一个对象类,可以是人,或者妖怪等。举例:我们经常使用PlayerController发出指令控制Pawn移动
Character继承Pawn,这个类提供了一些基础又进阶的封装好的移动功能,例如移动,跳跃等。通常可以用来创建角色类,编写一些角色类通用的逻辑,也是PlayController来控制
PlayController获取玩家的输入指令
Pawn使用技巧:一些通用的大量采用到的代码,例如无论是人还是怪物,都拥有生命,外观,移动等属性。例如无论什么网页,都会有一些通用的图形UI以及可视化元素方框圆圈等
Character就是一些对象特有的功能,例如怪物可以飞翔,但是人类不可以
实操:
1,EventBeginPlay,在创建任意蓝图时都会自带的一个节点,蓝图代码大多数都从这里开始执行
2,OnActorBeginOverlap,触碰开始时执行:进入区域触发事件,是指当指定对象与另一个对象产生重叠
与之对应的,3,OnActorEndOverLap,触碰结束时执行事件:退出区域事件
可以应用到的场景:例如靠近显示互动UI,靠近机关遭遇陷阱,与武器碰撞产生伤害,碰撞检测等
3,Set Visbility,设置目标是否可见,可以是任意对象,例如隐藏怪物,提示等
4,Destory Actor,字如其名,删除Acrtor
5,Delay,延迟,作用是延迟下一个节点的执行时间
6,Sequence序列,其作用是解决一个蓝图节点只能有一个输出的痛点
区分节点:
红色的节点:事件节点
蓝色带f的节点:功能节点
绿色节点:获取角色控制器
单独的椭圆节点:变量
灰色带工具的节点:宏
紫色节点:脚本(不可被删除且永远存在)
未完待续