• UE4学习笔记_04


    这几天用业余时间研究了一下BluePrint,想先试着做一个2D卷轴游戏的雏形(类似于官方的SwingNinja例子),但在研究了SwingNinja和TappyChicken之后发现它们包含的东西还是比较多,很难一下子看出主干脉络。于是就去研究了一下更简单的Blueprint Side Scroller示范工程(创建新工程的时候可以选择若干框架模板,其中就包括这个2D横版的,而且还分C++版和Blueprint版的)。

    这个示范工程看上去就非常简单了,但在实际深入研究的过程中还是碰了不少钉子,官方文档基本上又没什么用,只能自己摸索。以下是几个已经弄明白的要点:

    • 任何工程的起点都是Edit->Project Setting里设置的内容,其中最关键的是Map & Modes里面对Default GameMode的设定,这个GameMode指明了所有关键模块所要使用的类(或Blueprint),其中包括:
      • Default Pawn Class:默认的玩家对象类(定义人物模型、贴图、动画、音效、物理等要素的类)
      • HUD Class:HUD类(就是负责显示血、弹药等提示界面的类)
      • Player Controller Class:玩家控制器类(定义人物的操纵方法的类)
      • Game State Class:游戏状态类(保存、更新游戏运行时的状态和其他相关数据的类)
    • 在UE4里,任何游戏都必然包含上述关键类,引擎也提供了这些关键类的默认实现,但在绝大多数情况下,开发者都需要在默认实现的基础上编写符合自身需求的关键类,来实现希望的游戏逻辑和效果
    • 对于2D横版卷轴游戏,关键就在于摄像机的绑定和人物移动平面的限制上,这些都可以在自定义的Character类里实现
    • Character类默认包含了一些组件,可以控制人物的骨骼模型、动画、移动方式、移动限制、摄像机的偏移和绑定、对外界输入的响应逻辑等等,可以调整的内容相当相当多

    弄清了上述基本要点后,就可以尝试从无到有创建一个简单的2D横版游戏雏形了,以下是关键步骤:

    • 创建新工程,选择不要拷贝Starter Content,这样你就得到了一个只有一块地板、其他啥都没有的空地图
    • 在地图上放一个Directional Light,照亮场景;再放一个Player Start,位置在哪里都不重要
    • 创建一个继承自GameMode的新Blueprint(可以命名为BP_MyGameMode),再创建一个继承自Character的新Blueprint(可以命名为BP_MyCharacter)
    • 修改Edit->Project Setting->Map & Modes->Default GameMode为自己刚创建的BP_MyGameMode,然后在下方将Default Pawn Class修改为自己刚创建的BP_MyCharacter

    • 我们打算通过A键让人物往左走,D键往右走,Space键进行跳跃,所以需要在Edit->Project Setting->Input里进行绑定(这一步很重要,否则后面在BP里无法创建对应的触发事件)

    • 在绑定A、D键时,通过设置其Scale来为后面控制人物走向不同的方向做好准备,而“Jump”、“MoveRight”会在对应的按键被触发时作为事件名称被传递给Blueprint
    • 剩下的工作就是修改BP_MyCharacter了,首先我们需要一个人物的骨骼模型,这个可以从示例工程中借一个过来,方法是通过“迁移”命令,在示例工程中的骨骼模型上点右键,选择“迁移”

    • 当需要在工程间共享内容时,最好使用迁移命令,它会自动将关联的内容都拷贝到指定的工程目录中,并自动更新索引。绝对不要通过文件浏览器直接进行工程间文件的拷贝,会出问题的
    • 为了简单起见,这个例子里就不配置任何骨骼动画了,只使用一个静态的骨骼模型,下面就是BP_MyCharacter的Default设置界面中一些关键设置点:

    • 上图中,Mesh设置人物要使用的骨骼模型,Plane Movement则限制人物只能在YZ平面移动(X轴为YZ平面的法线),而Pawn页面下的Use Controller Rotation Yaw设置为False则表示人物不要随输入绕Y轴旋转
    • 然后就是设置BP_MyCharacter中的Component页面的内容,见下图:

    • 系统已经默认创建了很多组件,但我们还需要创建一个SpringArm组件和Camera组件(其中Camera要隶属于SpringArm),SpringArm类似于一个看不见的弹簧,可以将摄像机与人物模型之间以某种弹性的方式保持一定的偏移和距离。SpringArm的设置见上图,其中特别需要注意的是Transform参数组,其三个参数下面都有白色的下划线,可以通过鼠标点击在Absolute(绝对)变换和相对变换间进行切换,在这里我们需要切换成绝对旋转方式,否则摄像机会随着模型的方向而转向。读者可以自行修改这些参数看看效果
    • Camera的设置基本上默认就可以了,只需要改一个地方,让Camera不要随输入旋转即可,见下图:

    • 最后,在BP_MyCharacter的Graph界面,将输入消息和人物的动作绑定即可,见下图:

    • 一切设定好后,就可以运行游戏看看效果了。如果没出错的话,就能看到一个摆着十字架造型的绿皮模型根据你的按键在地板上左右滑动,同时摄像机会牢牢盯着它,并且不会随鼠标转动

    虽然人物没有绑定任何骨骼动画(Animation Blueprint又是一大坨复杂的要死的功能...),但这已经算是一个基本的2D横版卷轴游戏的雏形了,以此为基础不断增添内容、不断调优,就能创作出任何好看好玩的游戏出来。

    UE4真心不错,值得花心思深入研究,后续有时间再继续写。

  • 相关阅读:
    SetThreadAffinityMask设置线程亲缘性
    Delphi 获取北京时间(通过百度和timedate网站)
    delphi 实现微信开发
    翻书的效果:FMX.TSwipeTransitionEffect Animation
    [每日一题] OCP1z0-047 :2013-07-15 drop column
    Delphi获取当前系统时间(使用API函数GetSystemTime)
    Delphi代码中嵌入ASM代码
    Delphi Jpg和Gif转Bmp
    Delphi RichEdit的内容保存为图片
    Delphi 实现任务栏多窗口图标显示
  • 原文地址:https://www.cnblogs.com/vesnica/p/3627378.html
Copyright © 2020-2023  润新知