目录
步骤
一、创建UObject
在内容浏览器中新建一个C++类
![](https://file.jishuzhan.net/article/1790280906250915841/bf31c5385b9ba7f792135ed55b41c790.webp)
父类选择"Object"
![](https://file.jishuzhan.net/article/1790280906250915841/771b2d91db431fa38a6907acf1a6f00a.webp)
类的类型设置为公有,这里就命名为"MyObject",点击"创建类"来创建头文件和源文件
![](https://file.jishuzhan.net/article/1790280906250915841/0067a1f5d84dd13d1c15cb9c18d4943d.webp)
在打开的VS中点击"全部重新加载"
![](https://file.jishuzhan.net/article/1790280906250915841/b0c1abfb5c4c62b9f439922ee5326e52.webp)
创建的MyObject.h代码如下:
![](https://file.jishuzhan.net/article/1790280906250915841/86d1eedf6bdcbacb68b44ea126550e7b.webp)
创建的MyObject.cpp代码如下:
![](https://file.jishuzhan.net/article/1790280906250915841/efb6f6556d2190889052991b2093258a.webp)
二、创建基于UObject的蓝图类
在内容浏览器中对新建的"MyObject"点击鼠标右键,可以看到无法使用"创建基于MyObject"的蓝图类
![](https://file.jishuzhan.net/article/1790280906250915841/859df6b2f34b1afa556ebefc01cd4179.webp)
如果想把"MyObject"这个C++类蓝图化,我们需要使用UCLASS宏与Blueprintable修饰符一起使用,可以将一个类标记为可在蓝图中使用。
![](https://file.jishuzhan.net/article/1790280906250915841/07198f78d096adb92b67cb6f2e9d3395.webp)
添加完代码后保存,然后点击编译按钮
![](https://file.jishuzhan.net/article/1790280906250915841/038fa31c2c0444dccfd431ce0d010813.webp)
在弹出的"LiveCoding"面板可以看到编译成功的提示
![](https://file.jishuzhan.net/article/1790280906250915841/740ad2ba96894fff245a6cd8a2ae970f.webp)
此时我们就可以基于MyObject创建蓝图类了
![](https://file.jishuzhan.net/article/1790280906250915841/a01623da667d213aa9e3e3eed786be27.webp)
点击后需要我们命名基于MyObject创建的蓝图类的名字,并且还要设置文件保存位置
![](https://file.jishuzhan.net/article/1790280906250915841/052560e724cca2921e2f3056a35373f8.webp)
打开"BP_MyObject",可以看到和基于Actor的蓝图类的不同之处是无法添加组件
![](https://file.jishuzhan.net/article/1790280906250915841/c3edac2986a5b77e78f57a8e1bf28370.webp)
而且也无法像基于Actor的蓝图类那样直接拖入场景
![](https://file.jishuzhan.net/article/1790280906250915841/0256fc73e339a90bda09995bdd9dabd8.webp)
三、在UObject中使用变量和函数
我们可以在MyObject.h中申明构造函数,以及一个浮点型变量和一个函数。通过BlueprintReadWrite标记浮点变量在蓝图中可读可写,通过BlueprintCallable编辑函数在蓝图中可以被调用。
![](https://file.jishuzhan.net/article/1790280906250915841/35e16334a94da217517af8daef6d06f0.webp)
在MyObject.cpp中,在构造函数中初始化了类的成员变量MyFloat为0
![](https://file.jishuzhan.net/article/1790280906250915841/ed3a1de98ac1e9850a8380b46afddf9c.webp)
编译后,我们可以"BP_MyObject"中搜索并使用变量和函数
![](https://file.jishuzhan.net/article/1790280906250915841/9fbde3dde0c4f6f91c83e8fabffe980e.webp)
![](https://file.jishuzhan.net/article/1790280906250915841/fdf43ba5c0eb8c397459168a6a91b753.webp)
也可以通过设置"显示继承的变量"来直接获取父类中的变量
![](https://file.jishuzhan.net/article/1790280906250915841/c779e902b71dff90c2833f3f67dfb911.webp)
此时我们就可以在图表中使用UObject类中的变量和函数了
![](https://file.jishuzhan.net/article/1790280906250915841/14f08ce85aa8740d6229dd8eb06cd265.webp)
为了方便在图表中搜索变量和函数,我们可以在定义变量和函数的时候加个分类:
![](https://file.jishuzhan.net/article/1790280906250915841/410bcf4076ae8a3b494d505584a862de.webp)
编译后,当我们再在图表中搜索变量和函数时,可以发现它们都被分类了
![](https://file.jishuzhan.net/article/1790280906250915841/140eb778a667c2ff1f6c207088aff987.webp)
接下来我们可以让函数打印一句话,我们可以在源文件中添加如下代码:
![](https://file.jishuzhan.net/article/1790280906250915841/5dc314d3931e9f42eb19c11f82730b48.webp)
由于继承于Object类的蓝图类"BP_MyObject"无法在场景中直接实例化,因此为了输出打印,我们可以先新建一个继承于Actor的蓝图类,这里命名为"BP_MyActor"
当"BP_MyActor"实例化后,再构建"BP_MyObject"对象并调用方法
![](https://file.jishuzhan.net/article/1790280906250915841/5116d9c6cbde4c3bf18c5944fe266632.webp)
运行后在输出日志中可以看到打印信息。
![](https://file.jishuzhan.net/article/1790280906250915841/ec2714e1eaf2945c98cc3edc1017fdf4.webp)
参考视频: