光照改进
volume翻译为体积,但它其实是一个空间,里面有很多特定的功能。例如之前的Nav Mesh Bounds Volume 可以控制机器人的移动(追踪)
选择 Volumes -> Post Process Volume 拖入场景
添加光蕴,它只在体积内有效
在detail中查unbound ,打上对勾,使效果不受体积影响,应用到整个场景当中
添加光斑
修改光斑颜色
还有一个办法,增加反射
添加到场景中之后,进行拉伸
何时将一个概念提取为一个类?
1、有自己的行为
2、有自己的状态
游戏中的枪是可以抽象为一个类的
面向对象编程的三个特征
封装-encapsulation
数据的修改应该只和相关的成员函数绑定,而不是由外部其他类修改
1、公开能做什么,隐藏如何做。
函数实现的功能公开,函数的内部实现隐藏。
玩家调用枪,只能调用startfire和endfire,而不能调用shootfire,枪对外只公布startfire和endfire两个行为,其他不公开。
2、减少依赖。
其他类只能依赖公开的东西,隐藏的东西没有办法调用,也就没有依赖。如果公开不该公开的东西,其他类就有可能调用,当你想修改实现的时候依赖引用这个地方的东西就都需要修改,依赖就变多了。提高可维护性。
继承-inheritance
目的:复用代码
可以造成复杂的层级结构
单继承 vs 多继承
蓝图只有单继承
多继承使用很少
单继承是说一个子类只有一个父类,多继承是说一个子类有两个或多个父类
多态-polymorphism
一个接口,多种实现
目的让代码更通用
UE4中的Actor
任何能放在关卡中的对象
UE4中的组件
用来组成Actor的子对象
USceneComponent
CapsuleComponent 胶囊组件
ArrowComponent 箭头组件
Mesh 骨骼组件
Camera 摄像机组件
UActorComponent
没有3D变换数据
CharacterMovement Component 控制角色移动的组件
UE4中的Pawn和Controller
可以被控制的Actor,放在关卡里的Actor不是都可以被控制的
例如 玩家和NPC(Non-Player Character,非玩家角色)
Controller:可以持有Pawn并控制它的行为的对象
PlayController 和 AIController
PlayController是Pawn和玩家之间的接口,通过posses和unposses两个函数对Pawn进行控制和释放
UE4中的Character
可以行走的Pawn
枪抽象为一个类
父类为Actor
ChildActor组件
让一个类成为另一个类的组件,在viewport中展示出来
枪负责处理射击,FppShooter负责触发射击。枪就可以通过ChildActor这个组件挂载到FppShooter上。
减少依赖
换枪需要做的事情
1、保存多把枪
2、换下去的枪要隐藏,状态和数据都需要保存,而不是销毁,
3、换枪要有动作
4、不同的枪有不同的行为
保存多把枪
需要用到容器:数组、集合、Map
集合:元素不重复、无序