UnrealEngine_学习笔记:
{
一、安装UnrealEngine4游戏研发软件
二、使用Unreal提供的Vs编译插件在VisualStudio中进行安装
三、在VisualStudio中配置UnrealEngine开发环境
四、启动UnrealLauncher 下载UnrealEngine对应版本的编辑器
五、安装完毕对应的编辑器版本后,创建第一个虚幻C++项目进行玩耍
六、开始走上UnrealEngine4的研发之路
七、初步认识UnrealEngine
{
(1)界面布局
{
1.世界大纲视图->场景内所有物件的显示面板
2.细节->场景内某一个物体身上的一些组件以及相关的属性信息
3.内容浏览器->项目所有工程资源内容
4.输出日志->log信息
5.工具栏->场景设置以及一些执行游戏相关的工具栏
6.关卡视图->当前打开的游戏地图视图
}
(2)知识点
{
1.在UnrealEngine中,一个地图等同于一个游0戏场景[关卡]
2.编程的 方式有两种
{
2.1蓝图[BluePaint]{适合美术以及策划制作游戏原型的开发}
2.2C++编程[CPlusplsu Program]{适合有基础的编程人员进行游戏原型的开发}
}
3.游戏中的游戏对象(物体)[Actor]
{
3.1每一个游戏对象拥有不同的组件以及相关的属性
}
4.关卡编辑时一些不起眼的快捷方式
{
4.1_Fps旋转相机视角
{
鼠标左键->旋转视野
}
4.2_Fps移动视角
{
W->前,
A->左,
S->后,
D->右
}
4.3_电梯移动视角
{
LeftMouseButtonDown + Q->向下降低视角,
LeftMouseButtonDown + E->向上抬高视角
}
4.4_定位搜索游戏对象
{
F->快速聚焦到一个游戏对象的所在位置
}
4.5_围绕着一个逗比看看长什么样子
{
Alt + LeftMouseButton_DragDown->按住 Alt + LeftMouse 不放可以围绕着一个游戏对象在它周围进行旋转
}
4.6_蹂躏一个游戏对象
{
W->拖拽游戏对象,
E->旋转游戏对象,
R->缩放游戏对象
}
4.7_极速落地操作
{
End->这个快捷键用作快速使一个游戏对象在处于腾空的状态下快速降落到这个游戏对象下面的一个游戏物体上,
如果当前游戏对象下面没有其他任何游戏对象,则不进行任何操作,也就是这个操作不生效了。
}
4.8_相机跟随操作游戏对象
{
Shift + LeftMouseButton_DragDown + W[移动坐标轴工具]->按住 Shift + LeftMouse(需要拖拽操作) + W[移动坐标轴工具]
则可以实现在进行使用坐标轴拖放游戏对象的时候达到相机跟随当前拖拽的游戏对象的效果
}
4.9_拷贝一个兄弟出来
{
Alt + LeftMouseButton_DragDown + W[移动坐标轴工具]->按住 Shift + LeftMouse(需要拖拽操作) + W[移动坐标轴工具]
则可以实现复制拷贝出一个新的游戏对象
}
4.10_游戏中操作游戏对象的方式
{
Shift + F1 ->
在实际编辑器进行游戏运行的过程中,无法直接操作游戏对象,需要使用热键 Shift + F1 热键弹出游戏画面,
在弹出游戏画面之后,可以按下 F8 热键 [弹出 或者是 拥有的操作]进入类似于游戏编辑设计的环境下,这时候就可以看到在编辑环境下运行游戏时的所有游戏地图内的游戏对象。
}
}
}
(3)UnrealEngine中的C++_Api
{
Ps:
{
1.如果在引入UnrealEngine所提供的头文件出错的情况下,请不要使用双引号来进行引入,需要使用尖括号来进行头文件的引入
2.如果要引入与虚幻引擎相关的游戏框架中的C++脚本,则需要通过 #include <GameFramework/Script.h> 来进行引入对应的C++脚本
3.如果要引入与虚幻引擎相关的C++组件脚本,则需要通过 #include <Engine/ComponentScript.h> 来引入对应的C++组件脚本
Ps:
1_需要注意的是->
所有引入的头文件必须放置在 #include "OpenDoorComponent.generated.h" 这个引入的头文件上方
2_需要注意的是->
如果虚幻引擎在编译过程中出现了项目工程崩溃的情况下,如果处于再次打开却打不开的情况下,
那么需要进行处理的手段需要将打不开的项目工程中的Content文件夹和Source文件夹拷贝一下,重新创建一个虚幻项目工程,
把新创建的项目中的Content和Source文件夹删除掉,把拷贝的两个文件夹放到新工程中来,做一个补救措施。
3_需要注意的是->
如果要获取游戏地图中的游戏对象不要再构造函数中获取游戏对象,而要在初始化函数中获取游戏对象。
4_需要注意的是->
在进行Unreal项目开发的时候,编写关于指针方面程序的时候,编程逻辑一定要严谨,
在使用指针方面的程序,需要先进行判断是否为空指针,然后在进行使用
不能有一丝疏忽,如果有一丝疏忽,就会导致整个项目崩溃损坏
}
0.理论知识点
{
0.1_获取游戏对象的两种方式[后期可能还会有更多,到时候再进行知识点的补充]
{
第一种:直接通过代码获取自身游戏对象
第二种:通过拖拽的方式获取其他游戏对象
{
声明定义一个游戏对象[Actor]后,在定义这个游戏对象的上方需要使用预定义宏[UPROPERTY()]来进行显示在当前游戏对象的细节面板上,
进行编译之后,就可以在当前游戏对象的当前C++组件脚本上看到这要通过拖拽获取的游戏对象插槽了,这时候就可以将对应的游戏对象拖拽到这个插槽中,然后既可以开始做其它相关的事情了。
}
}
0.2_C++中的两种方式来判断获取到的指针是否为空
{
0.2_1->需要使用 nullptr 关键字判断指针是否为空
0.2_2->直接在判断的地方传入指针对象即可,不需要使用 nullptr 关键字来进 行判断校验
}
0.3_获取游戏对象身上的组件
{
0.3_1->首先通过this->GetOwner()[获取自身游戏对象]->然后通过->FindComponentByClass<[ComponentName]>();
{
连起来基本就是这样子->this->GetOwner()->FindCompoentByClass<ComponentName>();
}
}
}
1.获取游戏对象自身:
{
1.1_每一个游戏对象都继承自Actor,所以获取游戏对象只需要获取Actor即可
1.2_Actor对象的类包含在"GameFramework\Actor.h"这个头文件中,获取之前需要先引入这个头文件库
1.3_AActor->用于获取游戏对象自身的Actor对象,通过指针接收获取的方式: AActor * Actor =GetOwner();
}
2.使游戏对象旋转
{
Ps:在虚幻四中,X,Y,Z不同于其他3D软件的坐标系,而是[Roll=X,Pitch=Y,Yaw=Z],还需要注意的是Y[Pitch]是前后坐标轴,而Z[Yaw]是上下坐标轴
2.1_构建FRotator对象,构建这个对象时需要传入三个参数(pitch=y,yaw=z,roll=x);
2.2_调用Actor自身的函数SetActorRotation(NewRotator[构建的FRotator对象]);
}
3.UnrealEngine中的射线检测机制
{
3.1_在虚幻4中实现观察射线检测的效果需要引入头文件 #include "Public/DrawDebugHelpers.h"
3.2_具体的实例
{
3.2.1_发射一条射线
{
//Todo: 需要发射一条射线
FVector StartPoint;//射线的起点位置
FRotator ViewRotation;//玩家角色控制器当前面向的方向
//获取玩家角色控制器的位置 并传入要发射射线的起点位置和玩家角色控制器当前面向的方向 并保存下来
this->GetWorld()->GetFirstPlayerController()->GetPlayerViewPoint(StartPoint, ViewRotation);
//取得射线终点的位置->以射线的起点位置开始 + 角色朝向的方向 * 1m的距离 发射一条射线
FVector EndPoint = StartPoint + ViewRotation.Vector() * 100;
//渲染出一条射线供显示观看
DrawDebugLine(this->GetWorld(), StartPoint, EndPoint, FColor(255, 0, 0), false, 0, 0, 10);
}
3.2.2_校验射线是否触发到一个游戏对象
{
}
}
4.UnrealEngine中的输入输出机制
{
4.1_映射按键
{
4.1_1在UnrealEngine的编辑器环境下->找到编辑工具栏->找到项目设置->找到引擎下的输入选项
{
4.1_1_1->找到Bingdings/ActionMapings[行为事件映射],添加行为映射事件
}
}
4.2_绑定按键行为事件
{
}
}
5.UnrealEngine中C++ 与 Blueprint 交互
{
5.1_先使用使用宏DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDoorEvent);定义一个委托事件
5.2_然后声明这个委托的对象
{
UPROPERTY(BlueprintAssignable)[BlueprintAssignable->可以在蓝图界面进行编辑的宏定义]
FDoorEvent OnOpen;[声明的委托对象]
}
5.3_然后需要在对应的蓝图中添加这个委托事件
5.4_使用构建的委托对象->Broadcast();[触发这个事件]
}
6.游戏对象之间的交互小Bug
{
两个游戏对象之间如果发生碰撞,则质量小的游戏对象则会被推开,
类似于Unity中的Rigidbody效果,所以需要将游戏对象细节面板的Physics属性栏中的约束的w=位置约束X Y Z都给勾选锁定。
}
7.在UnrealEngine/Blueprint中添加时间轴
{
7.1_时间轴
{
7.1_1可以认为是在一定时间内将一个游戏对象从一个游戏地图的位置移动到另一个游戏地图的位置[时间轴中添加Float类型的时间轴线]
7.2_2可以认为是当触发了一个游戏中的设定的事件后,在一段时间周期内发生某一些事。[时间轴中添加Event类型的时间轴线]
}
}
8.在UnrealEngine/Blueprint中播放音乐
{
8.1_先要有音乐
8.2_在蓝图中添加新的结点->PlaySound
{
可以选择在3D环境中播放音乐,也可以选在在单独的一个游戏对象自身上播放一段音乐。
}
}
}
}
}
}
UnrealEngine_学习总结:C++ + UnrealEngine 成功入坑。
记录人:Yaolongcolumn
记录时间:2018-01-13