斯坦福UE4 + C++课程学习记录 2:移动与相机跟随-两个女人漫画

内容

创建玩家类

相机跟随

人物移动与转向

完整代码

参考链接

1. 创建玩家类

        在创建自定义的玩家类前,先简要了解一下UE中的常用class:

        Object:所有UE对象的基类        [1]Actor:可以在世界中放置或生成的object        [2]Pawn:可以被玩家或AI控制的Actor        [3]Character:实现了双脚行走的Pawn        [4]PlayerController:玩家与对应Pawn之间的接口        [5]GameModeBase:定义游戏的基础规则GameStateBase记录游戏的状态        [5]GameStateBase:记录游戏的状态

        要创建新的C++类,需要在UE中 -> 文件 -> 新建C++类 -> 选择Character(角色类)-> 设置名称和路径 -> 选择类为公共(public)-> 点击创建。这一步在设置类名称时建议加上前缀用于区分自定义类、UE类或插件的类等。

图2-1 创建自定义Character类

        创建完成后,UE会在相应目录自动创建相应的.h和.cpp文件,并打开VS2019。 关于.h和.cpp文件作用是C++基础知识,可以粗略理解为.h写声明用于编译和共享(public),.cpp写具体实现(private)。

图2-2 成功创建类

         打开.h文件后查看文件内容,在开头会看见类似下面的语句:

         可以发现UE在创建代码时,自动在原本的SurCharacter和Character类前添加了前缀A。这是因为UE遵守一系列代码编写规范,规定通过基类的种类或类的类型来确定前缀,进而可以区分类和实例。具体的规则可参考[6]官方文档,以下是常见的前缀:

        UObject:U                AAcor:A        SWidget:S               界面 Interfaces:I        枚举 Enums:E         模板 Templates:T

2. 相机跟随

        在创建相机跟随玩家前,首先需要建立一个关卡。我在content目录下依次创建了/SurkeaUE/Maps文件夹用于保存关卡。进入UE后的某人关卡是未命名(Untitled),我们需要把其中的默认的玩家出身点PlayerStart删除,因为我们要创建自己的玩家。PlayerStart在场景中的图标是一个游戏手柄,也可以在世界大纲视图中找到相应的组件。

图2-3 PlayerStart位置

        随后,文件 -> 关卡另存为 -> 选择建立的/SurkeaUE/Maps并命名为TestLevel,点击保存即可。更改后要及时点击内容浏览器中的“保存所有”按钮,防止各种意外丢失数据的情况,随手保存项目是个好习惯。

        然后需要创建玩家。在内容浏览器中右键 -> 蓝图类(Blueprint Class)-> 在下方所有类中选择自定义类SurCharacter -> 命名为Player。

图2-4 创建玩家

        创建完毕后,将角色从内容浏览器拖拽进世界中。此时的角色是个没有任何模型,由数根线条围成的胶囊体。最后在角色的细节面板中搜索Pawn,将“自动控制玩家”设置为玩家0,这样在运行关卡时就可以控制该角色。当然,目前还没有实现控制方法,所以在此处运行时,角色是不会对键盘输入有任何反应的。

图2-5 细节面板设置

         下面将转到VS中开始代码的编写,编写代码的总体方法是在.h中声明,在.cpp中实现,完整代码在文末附上。

        要实现相机跟随,可以通过代码直接创建UE中的弹簧臂对象和相机对象,并将弹簧臂attach(attach可理解为父子关系,你的确可以在角色的完整蓝图左上角的“组件”看到各个组件的层级关系)到自定义角色上、再把相机attach到弹簧臂上。

图2-6 自定义角色的组件

         这个场景可以想象成角色后面连着一根直线(弹簧臂),直线的另一端是相机。这样做的好处有两个:1. 相机与角色通过弹簧臂相连,实现了相机跟随; 2. 弹簧臂是碰撞体,因此我们的角色在靠近墙壁时,相机不会穿模到墙壁的另一边,从而保证玩家视野中不会因为墙壁遮挡自己的角色。同时,在代码中声明的对象可以利用UPROPERTY宏定义,使得该对象可以在UE中直接修改。本部分编写的代码如下,细节见注释:

        此时运行关卡(注意是保存在Maps中的关卡,而不是打开UE默认显示的关卡),可以发现角色和相机已经通过弹簧臂连接。

图2-7 运行结果

        通过在角色和相机的中间插入移除正方体进行阻挡相机的实验,可以更好地理解弹簧臂在其中的作用。如果不添加弹簧臂,正方体就可能从角色和相机中间穿过,从而阻挡玩家视线。

3. 人物移动与转向

        人物移动的相关代码需要编写在自动生成的SetupPlayerInputComponent函数中。这个函数中已经传入了PlayerInputComponent组件,所以不需要像上面自己创建新的弹簧臂和相机控件。人物移动对应UE中的轴(Axis)绑定,因为移动的幅度是个连续值,如使用游戏手柄时,不同程度推动摇杆可能对应不同的移动速度。这里需要注意,.cpp中编写的所有函数都需要在.h文件中进行声明。本部分编写的代码如下,细节见注释:

        随后,需要在UE中设置MoveForward的具体输入。在编辑 -> 项目设置 -> 输入 -> 绑定中添加轴映射 -> 输入MoveForward,即与BindAxis函数中第一个参数一致 -> 添加键盘输入W和S,两者的value分别为1.0和-1.0。这样设置后,在按下S的时候会调用MoveForward函数,传入-1.0,即角色前进负值,等同于后退。

图2-9 绑定设置

        此时运行关卡,就可以发现角色能够进行前进后退,且相机始终保持跟随。同理,利用UE中提供的GetActorRightVector()方法,可以实现角色的左右移动。大家可以自行尝试,注意编写完需要保存编译。

图2-10 角色移动

        最后,要实现角色通过鼠标转向则更简单。类似平移可以用XYZ轴度量,旋转也可以分解成这三个方向,UE中的Yaw方向表示绕Z轴旋转、即水平旋转,详细解释可参考一位UP主的文章。利用UE提供的AddControllerYawInput()函数可以得到Yaw方向的偏转;AddControllerPitchInput()函数可以得到Pitch方向的旋转。

        然后,同样需要在UE设置输入如下,鼠标X表示鼠标的横向(horizontal)移动,鼠标Y表示纵向(vertical)移动:

图2-11 输入设置

        此外,在设置LookUp输入后,还需要在弹簧臂的“摄像机设置”属性中勾选“使用Pawn控制旋转”。最后检查一下运行结果,发现角色可以移动和旋转,相机也始终跟随。

图2-12 最终运行效果4. 完整代码 

SurCharacter.h

SurCharacter.cpp

5. 参考链接

[1]Actor:https://docs.unrealengine.com/4.27/zh-CN/Basics/Actors/

[2]Pawn:https://docs.unrealengine.com/4.27/zh-CN/Basics/Actors/

[3]Character:https://docs.unrealengine.com/4.27/zh-CN/InteractiveExperiences/Framework/Pawn/Character/

[4]PlayerController:https://docs.unrealengine.com/4.27/zh-CN/InteractiveExperiences/Framework/Controller/PlayerController/

[5]GameModeBase:https://docs.unrealengine.com/4.27/zh-CN/InteractiveExperiences/Framework/GameMode/

[6]官方文档:https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/DevelopmentSetup/CodingStandard/

【Tenleid】 2B [26P 47MB]
2023-06-13
Vol.988 杨晨晨Yome[93P/643M]
2023-05-17
萌娘资源专业站点,致力于传播二次元文化,万物皆可萌
2023-05-21
【霜月shimo】 私服4 [15P 347MB]
2021-03-15
《只狼》于2019年发售,和FromSoftware的其他游戏一样大获成功。这款游戏还在TGA上击败了《死亡搁浅》等作品,获得了年度游戏大奖。随着《赛博朋克:边缘行者》《刺猬索尼克》《超级马力欧兄弟大电影》的成功,越来越多的游戏正在拓展到其他媒介。最近有消息指出,《只狼》将迎来动画,由一家日本公司打造,而且即将公布。消息来自于推主oecuf0,他曾准确泄露了多个动画消息,因此《只狼》动画的可信度非常高。值得一提的是,据他爆料,除了《只狼》外,《对马岛之鬼》也会有动画推出。
2023-05-21
「镜酱」《静夏》旅拍写真集 - 2 #美少女
2021-02-05
【Little Emo Kitten】 Megumin from Kono Suba [87P 131MB]
2023-06-01
[ARTGRAVIA] VOL.302 [90P-130MB]
2023-05-21
「桃沢樱呀」扇子绝配 [25P3V-123MB]
2023-05-26
演闹肚歪鸡I'm a little cheeky uhh yeahBut I can be a sweet like a tootsie roll ya坑得嫩内该 kid厉害林丹kid冷给爱你呀 奶So Imma be uh hot likeWoo hot like嘎的狗 囊怒内不 跳大步戒了I'm gonna burn this place 911饿穷比给了I got too much sauce yeah tell me who the boss yeah母要球 舔你哥look 挨踢骂你 那
2022-09-29