首先得有一个场景
引擎文档 引擎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和控制相关组件分开)创建新角色,这有助于统一角色层级并方便后续管理(当然也可以按自己想的来,问题不大):
- 创建空对象 MyCharacter,将 Tag 和 Layer 设置成“Player”
- 在 MyCharacter 节点下创建 MyModel 空节点并加上 SpriteRenderer 组件。该组件用于渲染角色的sprite
- 在 MyCharacter 上添加 Character 脚本,可以找到一个叫 AutoBuildPlayerCharacter 的按钮,它可以帮助你自动创建一系列角色功能。先不要点
- 将 MyModel 赋值到 MyCharacter 的 Character 脚本的 CharacterModel 字段上(如果有动画,记得在Character Animator上也赋值)
- 如果你刚才没有点 AutoBuildPlayerCharacter 按钮的话,现在在 MyCharacter 上添加 BoxCollider2D(x 偏移量 设置为零) 、 Rigidbody2D、CharacterLevelBounds(控制玩家触边后的反应) 和 CorgiController 组件。确保 BoxCollider2D 和 Rigidbody2D 是这样的:
现在,你已经创建好了一个角色的雏形了,你可以选择将其进一步设置为可玩角色(玩家)或AI(敌人等)。
在场景中自动生成的可玩对象
我们刚才创建了一个基础角色 MyCharacter 。现在,我们将尝试将其设置为关卡自动生成和管理的可玩角色。在经过这个设置之后,关卡管理器就可以在指定的开始位置生成玩家:P
- 确保CharacterType为Player
- 将 MyCharacter 制作成预制件(直接拖到文件系统里就好
- 找到基础场景(上一节所创建的)里的 LevelManager 脚本,将预制件赋值到 PlayerPrefabs[0] 和 SceneCharacter 中
这样,我们在开始游戏之后就会发现场景中生成了玩家(的预制件)!并且引擎自动为生成的玩家附加了target camera,当我们控制玩家移动的时候,相机就会跟随玩家一起运动。
代码引用
获取场景中的玩家(只有一个时)的方式::
1 | LevelManager.Instance.Players[0] |
在场景中创建AI
引擎文档 视频教程我们可以利用Corgi Engine在场景中创建并管理AI(例如敌人),为它们设定一定的行为逻辑。要创建一个AI,我们先按照刚才的步骤来一遍直到创建完 Character 组件。这时我们需要设置 Character 组件的 CharacterType 为 AI 而不是 Player :
别忘记给 CharacterModel 等 Character 组件的字段赋值。
接着,点击 Character 组件最下方的 AutoBuildAICharacter 按钮。
相比于自动创建的可玩角色,AI多出了两个功能,DamageOnTouch 和 AIWalk。顾名思义,第一个脚本代表接触伤害,第二个则控制了 AI 的移动。
我们可以设置 AIWalk 组件的 Avoid Falling 选项为true,这样敌人就可以在一个平台上来回巡逻:
不会掉下平台的小怪
玩空洞骑士的时候对这个怪很有印象:
有没有办法在Corgi引擎里实现这种行走模式呢?隆重介绍:SurfaceCrawler组件!不过在用他的时候需要关掉很多其他组件(比如CorgiController,否则有冲突)
让角色动起来
能力文档 引擎文档 视频教程有以下三种方法能让AI/可玩角色在场景中动起来:
- 手动创建角色属性
- 自动创建(AutoBuildPlayerCharacter)
- copy一个(有什么不行的?
该方法要求我们通过附加组件的方式为角色添加我们所需要的功能,我们可以有所选择,不用一股脑全加上去。虽然有点麻烦,但是是最贴合实际需求的定制化方法。
- 为你的角色 MyCharacter 添加 CorgiController 组件,在之后的章节中我们将详细介绍如何配置该组件
- 确保你的角色 MyCharacter 有 Character 组件,在之后的章节中将详细介绍其中的配置
- 添加 RigidBody2D 组件.需要注意的是该组件需设置为 Kinematic
- 如果玩家有血量需求,添加 Health 与 HealthBar 组件
- 添加你所需要的角色能力,你可以在能力文档中了解各个能力的详情
当我们点击 Character 脚本上的 AutoBuildPlayerCharacter 按钮时,系统就自动创建了一系列玩家能力。我们可以根据实际需求删掉不需要的组件。
比较调整合适的能力很复杂,直接复制配置好的预制件,然后改名、换贴图就好了
自定义控制
在默认的配置中,玩家通过wasd进行移动,按空格进行跳跃。如果我们想用别的键位呢?又或者如果我们想用手柄控制呢?再或者我们想让用户自定义控制按钮呢?
这里,我们引入ProjectSettings里的InputManager:
Corgi Engine为所有的玩家功能(如移动、跳跃、奔跑等)都设置了对应的按键,直接在Manager里修改即可。并且对应的,如果我们希望添加某个需要靠按键交互的功能,也可以在InputManager里创建,之后在代码中使用。
真正的“动”起来
引擎文档 视频教程是的,现在我们可以控制玩家的精灵四处移动了,但是它没有动画,显得有点丑。动画需要我们自行制作,但corgi engine为我们提供了详细的动画参数,我们可以通过动画参数来控制动画机的行为。
我们可以根据实际需求,对照着官方文档自行添加需要的参数(脚本中通过名称来查找对应参数,因此只需要添加正确命名的参数即可)即可。但我们也可以通过一键引入的方式导入参数,方法如下:
为角色具有 animator 组件的层级添加 CharacterAnimationParametersInitializer 脚本
点击 AddAnimationParameters 按钮,引擎将自动添加所有动画参数并删除组件
现在我们可以在动画机中使用这些参数了