demo视频地址:Learn How To Make A 2D Platformer In Unreal Engine 5学习记录#1
1.1Introduction
- 创建blank项目,platformer 2dproject(蓝图模式,默认选项,取消掉初学者内容包) 
- 更改自己喜欢的layout(这里就跟教程选择一样的ue4layout了),点击上方window->load layout 
1.2Setting up input player input
- 创建文件夹2DPlatfomerBlueprints 
- 创建蓝图,搜索paperCharacter,创建并命名2dCharacter 
- 设置输入:点击上方Edit->project settings->Engine->input 
- 添加Action Mapping:Jump:Space Bar和Up 
- 添加Axis Mapping:Moveright:Right(Scale 1)和Left(Scale -1) 
- 在初始目录新建文件夹Sprites,再里面新建PlayerCharacterSprites 
- 将HeroSprites中资源拖入文件夹 
- 精灵模糊解决:选中精灵图片->右键->Sprite Actions->Apply Paper2D Texture Settings 
- 为图片创建sprite:选中精灵图片->右键->Sprite Actions->create sprites 
- 为精灵创建flipbook,选中精灵序列,右键->create flipbook 
- 双击点开flipbook可以在右侧更改播放速度 
- 以同样的方式创建run、jump、full的flipbook 
1.3Setting up the player character pt1
- 双击之前创建的蓝图 
- 选择sprite并使用idle作为源sprite 
- 锁住scale并调整参数至5,调整精灵位置 
- 点击上方event graph 
- 右键创建节点,搜索jump,添加之前创建的action event:Jump 
- 点击Pressed连接Jump,点击released连接Stop Jumping 
- 右键创建节点,添加之前创建的Moveright,点击箭头(exec执行)创建新节点Add movement input,并将Moveright的Axis Value连接至Scale Value,将Add movement input中world Direction设置x=1 
- 在左侧components下点击add添加springArm并点击视图中上侧的旋转按钮,将方向旋转-90° 
- 在springArm添加camera并将投影模式设置为Orthographic(正交投影),Ortho Width设置为1000 
- 在sprites文件夹中创建新文件夹Objects,在里面创建GraySquare文件夹,在里面拖进资源graySquare,并用该图片创建sprite 
- 将之前创建的2dCharacter拖到场景中,在details处搜索pawn,将auto possess pawn设置为player0(游戏开始相机便会锁定角色) 
- 删掉地形(不能直接删父landscape,删不掉,得删完其下的所有,才能删),并将graySquare拖入 
- 更改人物和灰色地块的y为0,并将灰色地块拉长 
1.4Setting up the player character pt2
- 进入2dCharacter中的ViewPort,设置springArm的rotation type为world 
- 在左侧components搜索Character movement并拖到蓝图中,指向get velocity节点,右键split struct pin 
- 将event tick指向print string节点,并将刚才创建的getvelocity节点的x速度与print string的 in string连接便可以打印速度(试试就行了,可以删掉print string节点了) 
- 将get velocity的x指向compare float节点,将event kit指向compare float的exec(执行) 
- 创建get controler节点,return value指向is valid节点(带问号的)的input object 
- compare float节点的>指向isValid的exec 
- get controller节点的return value还要指向set control rotation节点target,isValid节点的isValid再指向set control rotation节点 
- set control rotation节点的new roatation指向make rotator 
- 复制一份get controler节点、is valid节点、set control rotation节点、make rotator节点 
- 将compare float的<指向复制的isValid的exec,并将复制的make rotator的z改为180 
- 以上是为了当x速度大于0时,人物朝右,小于0时,人物朝左 
- 我看接下来意思要搞一个状态机来判断朝左朝右 
- InputAxis Moveright节点指向branch,InputAxis Moveright节点的axis value指向greater节点并设置为0,greater节点指向branch的condition 
- 在my blueprint的variables中添加boolean:ismoveingright?并将这个变量拖入蓝图,使用set ismoveingright?节点 
- 将branch的true指向set ismoveingright?节点,并将ismoveingright?勾选 
- 最后将set ismoveingright?节点指向add movement input节点 
- branch的false节点指向一个新的branch节点(其实这里有点没搞懂) 
- InputAxis Moveright节点的axis value指向less节点设置为0,less节点再指向刚才新建的branch的condition,新branch的true指向一个新建的set ismoveingright?节点 
- set ismoveingright?节点指向add movement input节点 
- 新branch的false也指向add movement input节点(感觉这一条线会在松开小键盘右键时触发) 
- 前往更改朝向的蓝图区域,将compare float的==指向一个branch,branch的condition分支设置为Get ismovingright,如果true,就执行上方(朝右看)的is Valid,false就执行下方的is Valid 
- 点击左上角compile编译后,设置ismovingright的默认为true 
- 以上是为了当没有移动时,仅仅靠按左右键就能更改人物的朝向(比如现在跳跃时,之前按左右是不能改变朝向的,因为x方向的速度一直没有变的,但加了这部分蓝图后,只要按键就会改变) 
1.5Giving The Player Character Animations
- 选中下面这部分蓝图,按下C键,分组为处理输入事件 
- 新建节点custom event,命名Updateanimation 
- event kit指向一个新建的Updateanimation节点 
- 创建get velocity节点,指向vector length节点再指向greater节点 
- 将左侧component的sprite拖进蓝图,并指向新的节点set flipbook 
- greater指向新建select节点(三个分支),select节点和set flipbook的new flipbook连接 
- select节点true设置为run,false设置为idle 
- greater节点连接select节点 
- updateanimation节点连接set flipbook节点 
- 右键select节点的true,点击promote variable生成run的状态,同理生成idle状态 
- 点击左侧 my bluegraph中的variables,为run和idle创建种类文件夹(category)Animation 
- updateanimation节点指向一个branch 
- 将左侧components中的character movement拖到蓝图中,并指向is falling 节点,is falling 节点指向branch的conditon 
- branch的false连接set flipbook,true 
- 复制select和set flipbook节点(用于创建降落时的动画) 
- 创建get velocity节点,并split struct pin,如果z坐标less(新节点)0,连接select节点 
- 设置select节点true为fall动画(z的速度<0说明在下落),false为jump动画 
- 最后将branch的true连接set filpbook 
- 同上,为jump和fall创建variable(Jumping、Falling)(我不知道为啥这里首字母要大写,之前的run和idle不大写) 
1.6Changing The Player Characters Speed
- 点击左侧component中的character movement 在右侧details搜索speed可以看到速度 
- 将character movement拖入蓝图,指向新建的set max walk speed节点 
- 将event beginplay节点(本来就有)连接set max walk speed节点 
- 为max walk speed新建variable:Playerspeed 
- 编译后,点击playerspeed,然后就可以设置速度啦 
1.7Adding Sprinting
- 先利用graysquare创建个台阶 
- edit -> project settings -> input添加action mappings:sprint,按键为left shift 
- 进入蓝图的处理输入板块 
- 新建sprint节点 
- 拖进来character movement节点指向set max walk speed节点,为其创建variable:SprintingSpeed(我很费解为啥这里的s又大写了,感觉这老师就是随便写的哈哈哈,没太严格的规范) 
- sprint节点的pressed连接set max walk speed节点 
- 设置SprintingSpeed的数值 
- 复制冲刺的节点,改成冲刺完的节点,需要把SprintingSpeed换成之前创建的Playerspeed 
1.8Creating Dash Ability
- 打开蓝图,修改camera的width至2000 
- 编辑下地图 
- 创建dash的fipbook 
- 添加Action Mapping:Dash,按键为Z 
- 前往蓝图中的输入事件板块,创建Dash节点,指向新建的launch character节点(要split struct pin 嗷) 
- 创建get ismovingright节点,指向select节点,select节点的return value 连接launch character节点的launch velocity x 
- select节点的false和true都 设置为2500 
- 勾选launch character节点的XYOverride(试了下,勾没勾没啥区别啊) 
- 由于跳跃时冲刺会冲很远,所以要修改下摩擦力,在蓝图的component中找到character movement,在details中找到jumping/falling,修改falling lateral friction 为2.0 
- 在蓝图的变量中,复制jumping,改为Dash, 将details中的默认值改为dashflipbook(需要先编译一下) 
- 创建一个Boolean变量: isdashing? 
- 将isdashing拖入蓝图(set),使launch character节点指向isdashing?节点,并勾选(true) 
- 将Dash变量拖入蓝图,指向GetTotal Duration,获取动画时间 
- isdashing?节点指向retriggerable delay节点,并将GetTotal Duration的return value连接retriggerable delay节点的duration 
- 最后retriggerable delay节点再指向set isdashing?节点(这次就不勾了false) 
- 前往处理动画板块 
- 在Update animation节点后添加branch节点,拖入isdashing节点并连接该branch节点,false连接之前的branch 
- 拖入sprite,指向set flipbook节点 
- 将之前创建的dash变量(其实就是dash的flipbook)拖入,连接set flipbook节点的new flipbook 
- 修改下dash的距离:3300,并修改falling lateral friction 为2.5 
1.9Creating Wall Slide Mechanic
- 制作wallSlide的flipbook 
- 进入蓝图,创建custom event节点,命名WallSlidemechanic(不是很懂为什么最后一个单词首字母不大写了) 
- 向上找event tick节点,在Updateanimation节点后指向WallSlidemechanic节点 
- 回到WallSlidemechanic节点处,拖入character movement节点,指向is falling节点 
- is falling节点指向一个branch的condition 
- WallSlidemechanic节点执行branch 
- branch true指向line trace channel 节点 
- 新建节点:get actor location,其return value 指向line trace by channel 节点的start 
- 新建节点:get actor forward vector,其return value 指向multiply(就是乘个数呗)(split),x设置为50 
- get actor location节点添加add节点,连接multiply节点和add节点,最后将add节点连接至line trace by channel 节点的end 
- line trace by channel 节点的out hit指向break hit result节点 
- break hit result节点的Blocking hit指向 set Wallslide?节点(新建的变量),ine trace by channel 节点也要执行set Wallslide?节点 
- 在最开始的branch节点的false指向 set Wallslide?节点(不勾选意味着不是falling状态就不能是wallslide状态) 
- 回到处理动画板块,在判断是否在空中的branch的true后新建branch,用于判断 is Wallslide状态,false就跟以前一样 
- 拖进sprite并指向set flipbook 
- 添加wallslide动画(flipbook)变量 
- 向上找到event tick后面的 wall Slide Mechanic节点,指向一个branch,根据wallslide状态判断,如果false跟以前一样 
1.10Creating Wall Jump
- 前往处理输入事件,在Jump的pressed后添加branch,condition就是Wallslide?,false就跟以前一样,true指向launch character(velocity拆分) 
- 新建get actor forward节点(split(拆分) return value) ,x指向mutiply 节点,mutiply 节点设置为-1500(反向跳跃),再指向launch character的节点中的x 
- 为了跳跃时向上一点,将launch character的节点中的z设置为650 
- 勾选上launch character的节点的XYZ override,这样计算的就是绝对数值而不是相对数值 
- 角色在空中时很难控制,所以在蓝图的components中找到character movement,details中搜索air,将air control设置为1 
- 修改角色的碰撞胶囊在蓝图的components中找到capsule component,拖入动画处理板块中,指向set capsule radius节点,radius设置为1 
- 当is falling的branch是true时,连接set capsule radius节点(记得set capsule radius节点要连上之后的branch节点) 
- 复制capsule component节点和set capsule radius节点,当不再空中时,胶囊半径恢复 
- 将滑墙系统中mutiply节点的x从50改为5(这个距离就是碰撞检测的距离) 
 
 
















