首先得有一个场景

一个最基础的关卡 引擎文档 引擎API文档 视频教程

在Corgi Engine中如何搭建最简单的场景?引擎已经为我们准备了配置好基础数据的预制件,我们可以直接拖入新建场景中,一个场景最少所需的预制件分别是:

  • 路径:CorgiEngine/Common/Prefabs/LevelManagers/GameManagers

  • 包含了Game Manager、Sound Manager、Achievement Rules 和 Time Manager,以组件的形式添加在物体上。

  • 负责处理得分、时间系数(游戏时间快慢)、暂停、设置解锁成就/增加进度的条件等功能。如果不需要其中的某些管理器,可以删除。

  • 路径:CorgiEngine/Common/Prefabs/GUI/UICamera

  • 不论游戏是否有UI,UI相机都需要加入场景中,因为预制件上附加了InputManager,这是玩家控制角色的关键组件(我也不知道为什么引擎不把这个mgr放到GameManagers上)。

  • 你可以把所有GUI相关的元素放到这个相机底下的Canvas里。

  • 这是个例外,我们无法找到LevelManager预制件,所以需要在场景中自行创建。

  • 新建空物体,然后添加“LevelManager”脚本即可。在脚本中可以设置游戏关卡的边界

  • 路径:CorgiEngine/Common/Prefabs/Camera/RegularCamera

  • 我们还需要往游戏中加入相机,这样才能看到关卡样貌。Corgi Enging提供了名为CameraController的脚本,可以追踪我们放在游戏中的角色,让视觉效果更好。

  • 引擎提供了两个相机,其中MainCamera支持后处理效果,RegularCamera实现了常规相机的功能。

  • 一个简单的平台即可,这样玩家就可以有地方站立了。

  • to do so,创建一个square(或者任何2d形状),将Layer设置成Platforms(否则玩家会无视这些图形),再添加collider 2d即可。

然后得有一个角色

引擎文档

我们最好按照官方文档推荐的结构(也就是以下方式,将sprite和控制相关组件分开)创建新角色,这有助于统一角色层级并方便后续管理(当然也可以按自己想的来,问题不大):

  1. 创建空对象 MyCharacter,将 Tag 和 Layer 设置成“Player”
  2. MyCharacter 节点下创建 MyModel 空节点并加上 SpriteRenderer 组件。该组件用于渲染角色的sprite
  3. MyCharacter 上添加 Character 脚本,可以找到一个叫 AutoBuildPlayerCharacter 的按钮,它可以帮助你自动创建一系列角色功能。先不要点image.png
  4. MyModel 赋值到 MyCharacterCharacter 脚本的 CharacterModel 字段上(如果有动画,记得在Character Animator上也赋值)
  5. 如果你刚才没有点 AutoBuildPlayerCharacter 按钮的话,现在在 MyCharacter 上添加 BoxCollider2Dx 偏移量 设置为零) 、 Rigidbody2DCharacterLevelBounds(控制玩家触边后的反应) 和 CorgiController 组件。确保 BoxCollider2DRigidbody2D 是这样的:image.png

现在,你已经创建好了一个角色的雏形了,你可以选择将其进一步设置为可玩角色(玩家)AI(敌人等)
image.png

在场景中自动生成的可玩对象

我们刚才创建了一个基础角色 MyCharacter 。现在,我们将尝试将其设置为关卡自动生成和管理的可玩角色。在经过这个设置之后,关卡管理器就可以在指定的开始位置生成玩家:P

  1. 确保CharacterType为Playerimage.png
  2. MyCharacter 制作成预制件(直接拖到文件系统里就好
  3. 找到基础场景(上一节所创建的)里的 LevelManager 脚本,将预制件赋值到 PlayerPrefabs[0]SceneCharacterimage.png

这样,我们在开始游戏之后就会发现场景中生成了玩家(的预制件)!并且引擎自动为生成的玩家附加了target camera,当我们控制玩家移动的时候,相机就会跟随玩家一起运动。

代码引用

获取场景中的玩家(只有一个时)的方式::

1
LevelManager.Instance.Players[0]

在场景中创建AI

引擎文档 视频教程

我们可以利用Corgi Engine在场景中创建并管理AI(例如敌人),为它们设定一定的行为逻辑。要创建一个AI,我们先按照刚才的步骤来一遍直到创建完 Character 组件。这时我们需要设置 Character 组件的 CharacterTypeAI 而不是 Player :
image.png

别忘记给 CharacterModelCharacter 组件的字段赋值。
接着,点击 Character 组件最下方的 AutoBuildAICharacter 按钮。

相比于自动创建的可玩角色,AI多出了两个功能,DamageOnTouchAIWalk。顾名思义,第一个脚本代表接触伤害,第二个则控制了 AI 的移动。

我们可以设置 AIWalk 组件的 Avoid Falling 选项为true,这样敌人就可以在一个平台上来回巡逻:
敌人自动巡逻

不会掉下平台的小怪

玩空洞骑士的时候对这个怪很有印象:

有没有办法在Corgi引擎里实现这种行走模式呢?隆重介绍:SurfaceCrawler组件!不过在用他的时候需要关掉很多其他组件(比如CorgiController,否则有冲突)
敌人贴平台走

让角色动起来

能力文档 引擎文档 视频教程

有以下三种方法能让AI/可玩角色在场景中动起来:

  • 手动创建角色属性
  • 自动创建(AutoBuildPlayerCharacter)
  • copy一个(有什么不行的?

该方法要求我们通过附加组件的方式为角色添加我们所需要的功能,我们可以有所选择,不用一股脑全加上去。虽然有点麻烦,但是是最贴合实际需求的定制化方法。

  1. 为你的角色 MyCharacter 添加 CorgiController 组件,在之后的章节中我们将详细介绍如何配置该组件
  2. 确保你的角色 MyCharacterCharacter 组件,在之后的章节中将详细介绍其中的配置
  3. 添加 RigidBody2D 组件.需要注意的是该组件需设置为 Kinematic
  4. 如果玩家有血量需求,添加 HealthHealthBar 组件
  5. 添加你所需要的角色能力,你可以在能力文档中了解各个能力的详情image.png

当我们点击 Character 脚本上的 AutoBuildPlayerCharacter 按钮时,系统就自动创建了一系列玩家能力。我们可以根据实际需求删掉不需要的组件。
image.png

比较调整合适的能力很复杂,直接复制配置好的预制件,然后改名、换贴图就好了

自定义控制

在默认的配置中,玩家通过wasd进行移动,按空格进行跳跃。如果我们想用别的键位呢?又或者如果我们想用手柄控制呢?再或者我们想让用户自定义控制按钮呢?
这里,我们引入ProjectSettings里的InputManager:

image.png

Corgi Engine为所有的玩家功能(如移动、跳跃、奔跑等)都设置了对应的按键,直接在Manager里修改即可。并且对应的,如果我们希望添加某个需要靠按键交互的功能,也可以在InputManager里创建,之后在代码中使用。

真正的“动”起来

引擎文档 视频教程

是的,现在我们可以控制玩家的精灵四处移动了,但是它没有动画,显得有点丑。动画需要我们自行制作,但corgi engine为我们提供了详细的动画参数,我们可以通过动画参数来控制动画机的行为。

有动画效果的触底死亡

image.png

我们可以根据实际需求,对照着官方文档自行添加需要的参数(脚本中通过名称来查找对应参数,因此只需要添加正确命名的参数即可)即可。但我们也可以通过一键引入的方式导入参数,方法如下:

  1. 为角色具有 animator 组件的层级添加 CharacterAnimationParametersInitializer 脚本

    image.png
  2. 点击 AddAnimationParameters 按钮,引擎将自动添加所有动画参数并删除组件

  3. 现在我们可以在动画机中使用这些参数了