277人参与 • 2024-08-06 • ue4
主要是介绍一下ue4中的一些常用概念。
参考的博客如下:
ue4世界的主要结构如下:
.umap文件,可以有多个sub-levels)
capsulecomponent和人物运动组件charactermovementcomponent)controller有两种类型,分别是playercontroller和aicontroller;
隶属于playercontroller的一些模块如下:
playercontroller和pawn的关系如下:

是所有object的基类;
功能包括垃圾回收、元数据、在磁盘和网络中的序列化、类属性和函数的运行时反射和蓝图集成等;
不能被添加到关卡level中,也不能在蓝图中使用,但可以包含数据和函数;
常用的宏:
uclass:声明类;ustruct:声明结构体;ufunction:声明成员函数;uproperty:声明成员变量;一个例子如下:
ustruct()
struct fvector2d
{
uproperty()
float x;
uproperty()
float y;
ufunction()
float getlength() const;
}
下面介绍一下一些常用宏的说明符;
(1) uproperty()的常用说明符如下:
visibleanywhere:在蓝图面板的详细信息和主面板的蓝图实例的详细信息窗格中都可见,也就是变量在所有的属性窗口中均可见,但无法编辑;visibledefaultsonly:仅在蓝图面板的详细信息窗格中可见,同时无法编辑,也就是蓝图类内变量可见,可以得知一个相对公共的设定值;visibleinstanceonly:仅在主面板的蓝图或c++类实例的详细信息窗格中可见,同时无法编辑,也就是蓝图对象内变量可见,只能得知一个相对私有的设定值;editanywhere:在蓝图面板的详细信息和主面板的蓝图实例的详细信息窗格中都可见且可被修改,也就是变量在所有的属性窗口中均可见且可被修改;editdefaultsonly:仅在蓝图面板的详细信息窗格中可见且可被修改,修改的是类的值,将影响该类之后生成的所有实例;editinstanceonly:仅在主面板的蓝图或c++类实例的详细信息窗格中可见且可被修改,修改对象的值,仅影响当前拖动到地图中生成的实例;blueprintreadonly:可在蓝图中读取值,但不能修改值;blueprintreadwrite:既可在蓝图中读取值,也可以在蓝图中修改值;category="xxx|xxx":将当前变量分组到文件夹中,|符号用于创建子文件夹,注意引号内的所有空格均有意义,注意删掉无意义空格;displayname="xxx":更改在信息窗格中显示的文本标签名字;tooltip="xxx":当鼠标悬停到信息窗格的对应属性时出现的提示信息文本,如果没有,则默认使用代码中的注释内容;参考:
一些补充说明:
edit的说明符和带visible的说明符不能同时出现,只能出现其中一种;blueprintreadonly和blueprintreadwrite起码要出现一个,不然在蓝图中右键是找不到这个属性的;(2) ufunction()的常用说明符如下:
blueprintcallable:该函数可以在蓝图中被调用;blueprintimplementableevent:这个函数只能用蓝图实现,不能用c++实现;blueprintnativeevent:这个函数必须用蓝图重写实现,有默认调用的方法(以_implementation为后缀,需要用c++实现),因此在蓝图中是重写实现,不能用c++重写;blueprintpure:这个函数在蓝图中没有接口,不能被其他函数调用,只能用它的返回结果,而且不会缓存它的计算结果,每次调用时均会执行一次计算,可以参考:【ue·c++】blueprintcallable与blueprintpure区别;displayname和tooltip均是元数据类型,使用时应写meta = (metatag1="xxx", metatag2="xxx", ...),更多关于元数据的介绍参考官方文档:https://docs.unrealengine.com/4.27/zh-cn/programmingandscripting/gameplayarchitecture/metadata/;参考:
一些补充说明:
blueprintcallable和blueprintpure只能出现一个,前者仅在第一次调用时计算结果,后者是每次调用均重新计算结果,因此计算的开销很大;(3) uclass()的常用说明符如下:
blueprintable:该类可以在主面板右键创建基于此类的蓝图类;参考:
uobject;
uscenecomponent * rootcomponent一个scenecomponent对象,因为scenecomponent对象能为actor提供变换信息(位置、旋转和缩放等);beginplay():actor对象首次在gameplay中存在时调用;tick():每帧调用一次;endplay():actor对象离开gameplay空间时调用;是所有component的基类;
不可以单独存在,只能作为actor中的成员变量使用;
派生的component类包括:
uscenecomponent:使actor有位置变换的能力,包括位移、旋转和缩放等;uprimitivecomponent:使actor有被渲染的能力;umeshcomponent:使actor有形状外貌的能力;ustaticmeshcomponent:静态网格体组件,继承前面3个类,是ue4的基本场景构建单位,最为常用;uchildactorcomponent:可以作为子节点搭建一棵组件树;它们的关系如下:

其他的组件介绍可以参考官方博客:https://docs.unrealengine.com/4.27/zh-cn/basics/components/;
aactor;apawn;uskeletalmeshcomponent:骨骼网络组件;ucharactermovementcomponent:人物移动组件,包括走、跑、跳、飞、游泳等;ucapsulecomponent:胶囊体(用于碰撞)组件;apawn和acharacter之间的关系如下:

a:派生自aactor的类;u:派生自uobject的类;s:派生自swidget的类;e:枚举类;i:接口类;t:模板类;f:除上述的其他类;b:布尔变量;is或者should:返回值是布尔类型的函数;bool:布尔类型;int8 / uint8:整数,8bit;int16 / uint16:整数,16bit,相当于short int;int32 / uint32:整数,32bit,相当于int;int64 / uint64:整数,64bit,相当于long long int;float:单精度浮点数,32bit;double:双精度浮点数,64bit;ptrint:和指针同样大小的整数;tchar:字符,相当于char;fstringftextfnametarray:动态数组,相当于vector;tdoublelinkedlist:双向链表,相当于list;tmap:字典,相当于unordered_map;tset:集合,相当于unordered_set;tqueue:队列,相当于queue;ffilemanagergenericfarchive:序列化相关操作类;tsharedptr:共享指针,针对普通的c++对象;tweakptr:弱指针,针对普通的c++对象;tweakobjptr:针对uobject对象;tautoptrtscopedptrtuniqueptrfvector:空间坐标向量,有三个成员变量,分别代表x轴、y轴和z轴;
frotator:旋转向量,有三个成员变量pitch、yaw和roll,分别代表绕y轴、z轴和x轴旋转;
fmath:数学函数功能类;
/*
* 函数功能说明
*
* @param 参数1 参数1说明
* @param 参数2 参数2说明
* @return 返回值说明
*/
返回值类型 函数名(参数1, 参数2);
/** 函数功能及参数说明 */
返回值类型 函数名(参数1, 参数2);
...
// 注释内容
代码内容;
...
资源均放在content文件夹下,每个资源文件的命名要加上前缀,如下:
l_:关卡(level / map);bp_:蓝图(blueprint);s_:静态网格(staticmesh);sk_:骨架网格(skeletalmesh);t_:纹理(texture);ps_:粒子系统(particle system);wbp_:组件蓝图(widget blueprint);存放资源的文件夹也要对应命名,如下:
maps:关卡;blueprints:蓝图;animations:动画;sounds:音频;materials:材质;textures:纹理;effects:特效;您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论