前言
一.教程
1. 开始 Getting Started
1.1总览
总览安排的学习目标能让你对Platformer Pro有一个全面基本的了解.
初步阅读
文档中所有标有(1)的文章是文章所在各个模块的总览,最好每个都看一遍,这样能让你对整个框架的结构有一个清晰的认识.
- 角色[Characters (I)()
- 碰撞器
- 输入基础
- 运动组件工作方式
- 动画桥
- 平台
简单视频教程
加入论坛
进阶视频教程
读完所有API文档
- 为了进一步的理解Platformer PRO,下一步是阅读
项目中练习
- 只有在实际项目中运用才能真正学会使用这个框架.
1.2 快速开始
二.文档
1. 角色组件 Character Components
1.1角色Character (I)
理解这个部分对使用Platformer Pro至关重要
Character组件是组织其他所有组件的基础组件:通过Character组件,其他组件能够结合到一起工作来实现角色的创建。
Character组件包含影响角色行为的关键元素的配置,例如角色将与哪些层交互。
要创建一个新角色,将Character组件添加到一个空的GameObject中。
1.2碰撞器Colliders(1)
理解这个部分对使用Platformer Pro至关重要
Platformer PRO中的角色碰撞由在character上定义的RaycastColliders控制。 角色的头部,侧面和脚部都有一些碰撞器。
通过添加character组件创建角色后,你就可以使用角色上的Collider Editor来修改角色身上的碰撞体:
- Collider Editor
重置碰撞体Collider
按“ 重置碰撞器 ”按钮,可以把碰撞器的各个选项重置为不同的默认值。 当按下此按钮时,将根据角色的配置显示一系列选项。例如:
Reset Colloders- Reset to default position
将对齐框重置为框形。 - Use basic sprite detection
将对应关系重置为精灵边界。(带有SpriteRenderer) - Use smart sprite detection
读取精灵的Alpha通道,以猜测碰撞机的最佳位置。(带有SpriteRenderer指向一个可读的Sprite) - Use mesh based detection
将关键字重置为网格的边界。(带有MeshFilter)
使用可读Sprite重置碰撞器选项作为角色GameObject:
- 可读
使用不可读Sprite将角色GameObject的小孩重新设置为相关选项(请注意信息消息):
-
不可读
在设置了基本的碰撞器之后,您可以使用“Edit Feet”,“Edit Sides”和“Edit Head”按钮来调整碰撞器的位置。
编辑碰撞器 - 脚部
脚部碰撞器给角色向上的力,使角色站立在平台上。
提示 :这里的碰撞器是通过射线检测实现的,不是Box collider, 如果脚射线检测不到任何物体,角色就会下落.
单击Edit Feet显示的场景视图:
- Edit Feet in Sence
使用鼠标拖动角色脚的边界,能够调整脚部碰撞器的位置。
在Inspector中,您会看到Edit Feet选项:
- Edit Feet
使用Add Collider按钮添加更多的碰撞器到角色。 碰撞器用小圆圈表示。 使用“ Remove Collider ”按钮删除碰撞器。 因为脚部碰撞器必须均匀间隔,您只能控制脚部碰撞器的边界。
更多的碰撞器将允许你的角色站在非常薄的平台上。 如果您正在处理陡坡,您应该使用更多的碰撞器(4或5)。脚部碰撞器应该尽量少于5个。
Reflect changes on both sides 选项使您的角色在调整碰撞器时左右对称。 如果您有不对称的角色,请参阅Working with Asymmetrical Characters.。
注意:当使用tiles 时,应考虑tiles 的大小,而不仅仅是平台的尺寸。 如果所有平台都是1个单位宽,但是瓷砖只有0.5f单位宽,确保角色的脚部碰撞器宽度小于瓷砖尺寸。
编辑碰撞器 - 侧面
侧面碰撞器在角色两边:用于防止角色穿过墙壁。
使用侧面碰撞器类似于使用脚部碰撞器,但是您可以更好地控制侧面碰撞器的位置:
Edit Sides使用鼠标移动碰撞器, 使用"+"号按钮添加新的碰撞器。 按住SHIFT,然后单击"-"号按钮删除一个碰撞器。
记住 :你需要有足够的侧面碰撞器,使得同一侧任何碰撞器之间的最大距离小于最薄的墙壁或平台。 这确保角色不能“穿过”墙壁。 通常3到4个是足够的。
记住侧面碰撞器的工作原理,他们给角色一个侧向的力。如果侧面碰撞器没有在X轴上对齐,你的角色可能会在靠墙下降时抖动。按下 Align in X 使所有的碰撞器在X轴上对齐。大多数角色都应该使其碰撞器沿x轴对齐。
然而,不对齐的侧面碰撞器可以适用于某些角色,特别是奇怪形状或2.5D角色。 如果要使用非对齐侧面碰撞器,则要使用多个侧面碰撞器来提供平滑的形状:
- Edit Sides
“Space Evenly ”按钮使得碰撞器在Y轴方向上均匀分布。
双方的反射变化复选框使您的角色对称。 在大多数情况下,您希望您的角色是对称的,但如果您有不对称的角色,请参阅使用不对称字符。
编辑碰撞器 - 头部
头部碰撞器在接触物体时会给角色一个向下的力,用来阻止角色跳过屋顶。
使用头部碰撞器类似于使用侧面碰撞器。 您可以选择在Y轴( 对齐顶部Align Top )和X轴( 均匀分布,Space Evenly )进行对齐 。
像其他碰撞器一样,您必须确保头部碰撞器足够靠近小于最薄的平台,这样角色才不会穿过平台。
注意:当使用tiles 时,应考虑tiles 的大小,而不仅仅是平台的尺寸。 如果所有的平台都是1个单位宽度,但是tiles 只有0.5f单位宽,确保你的头部.碰撞器宽度小于瓷砖尺寸。
碰撞器通用设置
以下准则将有助于确保您的角色按预期方式行事,而不会出现奇怪的弹出或跳动:只有当你确定知道自己在做什么时才能打破这些规则!
- 侧面碰撞器必须位于由头部和脚部碰撞器定义的范围内。
- 一般侧面碰撞器应该“伸出”比头部和脚部的碰撞物稍微远一些。
- 一般来说,头和脚的对撞机边界大致相同:如果一个角色从平台上直接落下,他们应该能够跳起来,而不会碰头。
调试碰撞器
您可以通过按下“Debug Collider”按钮来查看碰撞器的情况。 在编辑模式中,这显示了碰撞器的边界和范围,但是在播放模式下,它显示的更多:
- Debug Collider
- Debug Collider
-
白线显示的是碰撞器的范围 ,箭头指示方向。
-
灰线显示前方:这是射线投射的距离。 是用来检测墙壁或检测地面, 然后施加推开它的力。
-
蓝色圆圈显示前方区域的碰撞。 他们影响角色触发事件,但不会影响角色的位置。
-
红色圆圈显示碰撞器范围内的碰撞。 他们会影响角色的位置。
2. 输入 Input
2.1输入基础 Input Basics(1)
理解这个部分对使用Platformer Pro至关重要
这个部分包括了如何通过Input输入控制一个角色。任何一个Input输入都是抽象Input类的具体实现。
快速开始
要快速添加一个输入到您的游戏:
- 1.在你的场景中创建一个空物体GameObject。
- 2.选择您新创建的GameObject
- 3.按AddComponent按钮。
- 4.将StandardInput组件添加到您的GameObject(您可以通过键入其名称快速找到该组件)。
- 5.(可选)您可能需要按下“标准输入”上的“ 清除偏好设置”按钮,以确保没有玩家的“偏好设置”。
输入类概述
Platformer PRO附带以下输入类:
- Standard Input 标准输入
标准输入是桌面和控制台端上灵活而强大的输入类。 不是为手机开发的大多数游戏将使用StandardInput。 - Basic Touch Input 基本触控输入
触摸设备的简单输入。 - Unity Input Unity输入
一个可以使用标准Unity输入定义的Input类。 - Buffered Input 缓冲输入
一个特殊的输入类,它从另一个输入缓冲输入,以提供更敏锐的控制。 不能通过一个输入使用缓冲输入。 - Multi Input 多输入
在多个其他输入之前提供单个接口的输入类。 例如,它允许您同时配置键盘和操纵杆。
角色如何找到自己的输入
你可以直接给角色指定一个输入通过角色输入属性,如果角色没有指定输入,则通过以下程序来查找输入:
- 1.查找场景中的所有激活的输入。
- 2.如果没有找到输出一个错误。
- 3.如果只找到一个 就把它指定给角色。
- 4.如果找到两个或更多个:
1.尝试找到缓冲输入并分配。
2.如果没有找到缓冲输入,输出一个警告并把第一个输入指定给角色。
功能按钮
像“跳跃和奔跑”,“上和下”等按钮是不言自明的,但是您可能还需要额外的按钮,例如使用物品或攻击。 功能按钮允许您定义任意数量的任意按钮。
当功能按钮在其他组件中使用时,由功能按钮的数组索引识别区分。 所以如果你定义两个按钮,如下所示:
Action Button并且你想使用第二个按钮(V)来攻击,你要将攻击的功能按钮的索引设置为1。
提示 :与C#数组一样,第一个功能按钮的数组索引为0。
使用第三方输入系统
您可以在Platformer PRO中使用其他的Input系统通过将其包装在您自己的抽象类实现中。例如,如果您使用cInput 2(第三方Input插件),则可以按如下方式编写一个类:
public class cInputWrapper : PlatformerPro.Input
{
public string jumpButtonCInputName = "JUMP";
override public ButtonState JumpButton
{
get
{
if (cInput.GetKeyDown(jumpButtonCInputName)) return ButtonState.DOWN;
if (cInput.GetKeyUp(jumpButtonCInputName)) return ButtonState.UP;
if (cInput.GetKey(jumpButtonCInputName)) return ButtonState.HELD;
return ButtonState.NONE
}
// 这里仅仅举例说明了 Jump 按钮的写法,其他按钮的写法类似
}
}
未使用的方法
请注意,Input类定义了许多允许在游戏中自定义输入的抽象方法。 如果您使用第三方系统,在许多情况下,这些方法可能不适用你的情况。 这种方法的实现可以这样写:
override public KeyCode GetKeyForType(KeyType type, int keyNumber)
{
Debug.LogError ("This Input does not allow for in game control configuration.");
return KeyCode.None;
}
3. 运动 Movement
3.1 运动如何工作的
理解此部分对于使用Platformer PRO至关重要。
Platformer PRO有一个非常灵活的Movement架构,给角色添加新的动作非常的容易。
添加到角色或子物体上的每个Movement都被添加到被称为Movement List序列表中 。 Movements在Inspector中的显示顺序是将它们添加到列表中的顺序。 GameObjects中组件列表中最高的列表首先添加到列表中,并且优先级高于稍后添加的Movements。
默认动作
该角色需要至少两个默认动作。 一个在空中,一个在当地。
运动列表中的最后一个GroundMovement被认为是DefaultGroundMovement 。 运动列表中的最后一个AirMovement被认为是DefaultAirMovement 。
确定当前运动
每个框架的角色都会运行,哪个运动应该在这个时间点控制角色。 如果人物在地上,那么他们可能会被地面运动控制,如果他们爬梯子,那么他们可能会被梯子运动控制,等等。
了解这个决定是很重要的:
步骤1.在每个帧的开始, activeMovement (即控制最后一帧的运动)被询问是否要控制() 。 activeMovement始终被赋予此选项以维护控制(有关详细信息,请参阅定义自定义运动)。
步骤2.如果activeMovement不需要控制,则会查询运动列表中的每个运动,以查看是否需要控制。 该方法的性质取决于运动类型(例如AirMovement将被询问是否要使用LikeJump()或WantAirControl() ,一个GroundMovement将被询问是否为“ 想要的GroundControl()” )。
第三步。 如果没有一个运动需要控制,那么如果该角色在空中,则DefaultAirMovement被控制,或者如果该角色不在空中,则DefaultGroundMovement被控制。
过渡运动控制
一旦确定当前帧的移动,则角色将检查以查看新的移动是否与主动移动不同。 如果他们没有什么不同,没有什么特别的事情,并且activeMovement继续控制角色。 如果他们不同,角色将移动控制转移到新的运动:
步骤1. activeMovement被通知它是LosingControl ()。 这使得移动能够清除任何数据并将状态重新准备好以在稍后的时间获得控制。
新的动作被告知是GainingControl ()。 这使得移动能够执行所需的初始化,例如将当前速度转换成该控制器可以理解的度量(参见了解VelocityType)。
步骤3.新运动成为主动运动,并接管角色的控制。
一个例子
想象一下,这个顺序有以下动作的角色:
地面运动 - 克劳奇
- AirMovement - 数字(默认运动)
地面运动 - 数字(默认运动)
如果玩家站在地面上,则无运动需要运动控制,因此,由于它是默认值,所以控制权降至3。
如果播放器然后按下跳转按钮,AirMovement(2)将返回到LikeJump (),因此控制将被传递到2。
如果玩家在空中按下,没有任何事情发生,GourndMovement(1)将不希望控制,因为角色没有接地。 该控件将默认返回DefaultAirMovement(2)。
一旦玩家继续按住,当角色落在地面上时,控制将现在传递给克劳奇运动(3),因为如果角色接地并且玩家正在按下,它会要求GroundControl ()。 人物会蹲下。
现在考虑如果我们切换1和3的顺序会发生什么。
地面运动 - 数字
- AirMovement - 数字(默认运动)
GroundMovement - Crouch(DefaultGroundMovement)
如果玩家站在地面上,则无运动需要运动控制,因此,由于它是默认值,所以控制权降至3。 人物会蹲伏而不是空转!
跳跃将仍然正常工作,但是角色将永远无法忍受。
重要提示 :如果您为字符使用预制,则必须将更改应用于要应用的组件顺序的预制。 Unity有一个错误,其中prefabs组件顺序覆盖了GameObject的组件顺序(与GameObjects设置覆盖Prefabs的任何其他时间不同)。