文章目录本文主要记录一下本人从Unity3D引擎到虚幻4引擎的转型路上心得体会,会涉及到两个领域间同类概念对比,学习方向与计划,以及一些开发上的技巧记录。
本文持续更新中…
- UI上的差异
- 编程语言的差异(TODO)
- 同类术语的概念差异
- C++的知识点(TODO)
- 1. 宏定义
- 2. 指针(TODO)
- UE里面的C++(TODO)
- 学习方向与计划(TODO)
UI上的差异
| U3D | UE4 | |
|---|---|---|
| 主要技术 | UGUI | UMG |
| 使用工具 | Unity Editor (即Unity编辑器) | Widget Blueprints (即界面蓝图) |
| 编辑流程 | 在场景里可以拖拽添加各种UI组件 | 在界面蓝图中切换到Designer视图去编辑UI |
| 加载方式 | 可以直接把界面放在场景中,也可以把界面保存为Prefab当成资源来加载 | 在代码或者蓝图中触发CreateWidget()和AddToViewport()函数 |
| 运行时调试方式 | 在Scene视图可以看到整个界面在世界空间下的状态,点选某个UI可以查看其运行时数据 | 通过WidgetReflector(控件反射器)点选某个UI查看其运行时数据 |
| 合并资源时的解决冲突方案 | 无论是Prefab还是Scene,都能以文本的形式查看差异,但是不能进行资源的合并操作 | uasset都是二进制文件,不能以文本的形式查看差异,但是内部提供了Merge工具合并蓝图,也有Source Control工具对蓝图资源进行锁定操作 |
编程语言的差异(TODO)
| U3D | UE4 | |
|---|---|---|
| 支持的编程语言 | C# / JavaScript | C++ |
| 可视化编程工具 | Bolt 插件 | 蓝图 |
同类术语的概念差异
官方教程:为Unity开发者准备的虚幻引擎4指南,其中的“术语简表”一节说得很清楚,不再赘述
C++的知识点(TODO) 1. 宏定义
参考链接:C++宏定义详解
可以理解为简单的字符串替换,如 #include
// xxx.h int a = 1; int b = 2;
以下两段代码是等效的:
int func()
{
#include "xxx.h"
return a + b;
}
int func()
{
int a = 1;
int b = 2;
return a + b;
}
注意宏替换是简单的字符串替换,不会进行任何运算。比如想用宏定义一个求平方数的函数,以下的宏定义就是错误的:
#define area(x) x*x
void main()
{
int y = area(2+2);//本该输出16,实则输出8
printf("%d",y);
}
上述程序本该输出16,实则输出8,因为宏定义实际上会替换成下面的代码:
void main()
{
int y = 2+2*2+2;
printf("%d",y);
}
正确的宏定义如下所示:
#define area(x) ((x)*(x))
注意最外层的括号不能丢掉,否则在计算除法时又会出错了:
#define area(x) (x)*(x)
void main()
{
int y = area(2+2)/area(2+2); //本该输出1,实则输出16
//实际上替换成了 int y = (2+2)*(2+2)/(2+2)*(2+2);
printf("%d",y);
}
2. 指针(TODO)
UE里面的C++(TODO)
- UE的特殊宏(TODO)
由于C++没有反射和垃圾回收机制,UE封装了一套以宏为基础的反射与垃圾回收架构。
UPROPERTY():
UFUNCTION():
UCLASS():
USTRUCT() :
GENERATED_BODY() :
学习方向与计划(TODO)
- 学习使用界面蓝图拼UI以及使用关卡蓝图生成UI到游戏画面中(已完成)
- 学习创建虚幻C++类,熟悉基本API(进行中)
- UnLua、热更
- TODO…



