前言
前一篇是通过UMG编辑器制作的一个简单ui功能,记录Unity开发者使用BluePrint需要特别注意的地方,这一篇是分析和理解对于场景中的3D物体交互的BluePrint怎么制作,以及需要注意的一些关键点!个人觉得最快的学习方式就是对比,入门了之后就是一些蓝图节点和脚本API的熟练使用,重复练习的一个过程!说句题外话,人一定要学会给自己找事做,有计划,“要知道现在正在做什么,想要做什么,明天在做什么,明天要做什么”。
一、World Outliner 窗口给我们提供了哪些信息,细节面板有哪些重要的信息需要注意?
1.unreal中的World Outliner(世界大纲面板)对应的是Unity的Hierarchy(层次面板),主要是游戏中对象的显示和状态,Unity开发者使用Unity的时候,层次面板用来编辑GameObject的结构,和选中修改检视面板(Unreal中叫细节面板)中组件的属性值,还有就是在场景窗口中中聚焦到该对象!虚幻中我看了一下,感觉最重要的就是Type这一列的值,通过该值我们就知道了,对象是什么类型的,具体可以做哪些操作,Unity则为什么不需要知道它是什么类型??我觉得因为Unity中的所有的物体都是GameObject的原因,所有的对象都是通过挂载,把功能挂载对GameObject上的,Unreal虽然是所有的物体都是Actor,看蓝图的结构面板,物体更像是组合起来的,添加一个Component就会在下面添加一个,就像往列表里面添加元素,(界面上表现是这样的,实际底层是 啥样的,我也不知道,我猜都差不多,都是维护的一个集合类型的数据结构来管理组件)
2.细节面板的属性值是根节点的属性值,在该物体的蓝图界面中的属性面板和这个一样的,点到同意物体时,属性都是一样的。右上角Editor BluePrint按钮可以打开该蓝图,如果没有这个按钮,只能说明点击的物体不是蓝图类
3.BluePrint其实应该叫全名BluePrint Class,这样会好理解一点,一看就知道是一个类脚本,脚本里有函数,变量,逻辑,事件,回调,声明周期等,所以蓝图的编辑器就是在编辑的这些东西,创建一个蓝图的操作和在Unity创建一个脚本挂载在GameObject上,是一样的,Actor被添加到场景中,开始激活,执行生命周期
二、unreal的蓝图和Unity的预制体有哪些区别?
1.字面意思上解释,一个是可视化的脚本,不用一个字母一个字母的手动码代码,预制体则是对象模板,提前制作好的资源对象
2.制作蓝图包含着编辑代码和编辑对象结构两个方面,Unity的预制体则不会包含逻辑代码,因为最初的预制体是美术做的,给到程序这边才会附加一些功能逻辑(正规的流程作业规范是这样,不正规的都是程序自己做)
三、物体蓝图和UI的蓝图相同和区别,蓝图之间是怎么通讯的
1.看界面还真是不一样,但是个人感觉UI蓝图和3D物体的蓝图没什么区别一模一样,只是在层次面板中UI蓝图需要维护面板和控件的布局和层级,则3D物体的蓝图需要的制作的是每个功能,比如静态网格,碰撞器,还有就是组合式的组件,都会在成员面板暴漏出来,方便Event graph中使用。
特别需要注意:看节点的时候一定不要根据名字去判别节点,也不要根据节点的颜色去判别节点,最好的方式是鼠标悬停上面看节点的tip标签注释,不然的话,有的时候你会发现一样名字一样颜色的节点死活就是连不到目标引脚上,所以一定要类型一样才能连接,如果是继承的关系可以使用强转节点
2.蓝图之间的通信这个问题引出另一个重要的问题,就是在我们右键打开节点面板,点击节点创建节点,这一系列的流程,代码层发生了哪些关系?(先不区分函数和事件)。冥想三分钟!!!!我还没开始看C++代码,我也不知道^.^!个人的理解是不管是什么节点,只要是需要别人调你,你需要公开你的变量,别人拿到你的引用,代码层是这样的调用。而蓝图是需要创建一个事件类型,然后再其他的蓝图中添加这个事件节点,OK!就这样通信,每个公开的接口都会在节点面板里找到
注意:创建接口的时候需要注意,在细节面板接口的属性配置,需要什么形参和返回值
举例:官方示例中碰撞时用的两个节点,OnComponentBeginOverlap,OnComponentEndOverlap,发生碰撞时会掉用这两个节点,然后这两个节点本身在开发者创建的蓝图中使用,就相当于给事件注册了回调函数,物理引擎检测到碰撞时,会调用这两节点,所以通过这个就能分析出,我们自己要写的功能怎么给别人用,或者怎么使用别人的功能,可以映射到,自己的两个蓝图怎么互相通讯
3.3D物体的蓝图编辑包含很多窗口,比如上图的视口窗口,图标窗口,等等。最重要的是视口和图表,一个是编辑物体的形状,一个是编辑物体的功能逻辑,还有其他的窗口,可以编辑动画曲线等等
上面是TimeLine节点,以及该节点的编辑窗口,该节点通过输入控制,播放,从头播放,倒播,从末端倒播,停止,设置时间等,控制曲线的状态,实时返回曲线上的值,这个节点类似于Unity3d AnimationCurve对象,可以动态的返回曲线的值
4.脚本构造:编辑器在生成脚本的时候调用的回调事件,可以做一些默认值和初始值的设置,,类似于Unity,编辑器类的awake(我是这样理解的,不知道对不对)
总结
没有总结,只有一点,挺好学的,主要就是有一些unity操作的习惯思维,导致在Unreal中找东西找不着,这是最难受的,接下来,就是把曾经使用Unity做的一些有特点的项目,使用Unreal重新制作一遍,个人感觉做完三四个项目,应该会有很大的理解和提升!