前言
Platformer Pro框架是Unity3d AssetStore上一個非常強大和受歡迎的2d游戲開發(fā)框架,這個教程的大部分翻譯于官方文檔,一部分是工作總結(jié),還有一部分是視頻教程文檔化.這個文檔教程內(nèi)容比較多,可能需要很久才能更新完.
剛買完最新正版,這里是下載鏈接: https://pan.baidu.com/s/1c2GggaG 密碼: k9nf
一.教程
1. 開始 Getting Started
1.1總覽
總覽安排的學(xué)習(xí)目標能讓你對Platformer Pro有一個全面基本的了解.
初步閱讀
文檔中所有標有(1)的文章是文章所在各個模塊的總覽,最好每個都看一遍,這樣能讓你對整個框架的結(jié)構(gòu)有一個清晰的認識.
- 角色[Characters (I)(https://jnamobile.zendesk.com/hc/en-gb/articles/204344570)
- 碰撞器Colliders (I)
- 輸入基礎(chǔ)Input Basics (I)
- 運動組件工作方式How Movement Works (I)
- 動畫橋Animation Bridges (I)
- 平臺Platforms (I)
簡單視頻教程
加入論壇
進階視頻教程
讀完所有API文檔
- 為了進一步的理解Platformer PRO,下一步是閱讀完整的API文檔,
項目中練習(xí)
- 只有在實際項目中運用才能真正學(xué)會使用這個框架.
1.2 快速開始
二.文檔
1. 角色組件 Character Components
1.1角色Character (I)
理解這個部分對使用Platformer Pro至關(guān)重要
Character組件是組織其他所有組件的基礎(chǔ)組件:通過Character組件,其他組件能夠結(jié)合到一起工作來實現(xiàn)角色的創(chuàng)建。
Character組件包含影響角色行為的關(guān)鍵元素的配置,例如角色將與哪些層交互。
要創(chuàng)建一個新角色,將Character組件添加到一個空的GameObject中。
1.2碰撞器Colliders(1)
理解這個部分對使用Platformer Pro至關(guān)重要
Platformer PRO中的角色碰撞由在character上定義的RaycastColliders控制。 角色的頭部,側(cè)面和腳部都有一些碰撞器。
通過添加character組件創(chuàng)建角色后,你就可以使用角色上的Collider Editor來修改角色身上的碰撞體:
- Collider Editor
重置碰撞體Collider
按“ 重置碰撞器 ”按鈕,可以把碰撞器的各個選項重置為不同的默認值。 當按下此按鈕時,將根據(jù)角色的配置顯示一系列選項。例如:

- Reset to default position
將對齊框重置為框形。 - Use basic sprite detection
將對應(yīng)關(guān)系重置為精靈邊界。(帶有SpriteRenderer) - Use smart sprite detection
讀取精靈的Alpha通道,以猜測碰撞機的最佳位置。(帶有SpriteRenderer指向一個可讀的Sprite) - Use mesh based detection
將關(guān)鍵字重置為網(wǎng)格的邊界。(帶有MeshFilter)
使用可讀Sprite重置碰撞器選項作為角色GameObject:
- 可讀
使用不可讀Sprite將角色GameObject的小孩重新設(shè)置為相關(guān)選項(請注意信息消息):
-
不可讀
在設(shè)置了基本的碰撞器之后,您可以使用“Edit Feet”,“Edit Sides”和“Edit Head”按鈕來調(diào)整碰撞器的位置。
編輯碰撞器 - 腳部
腳部碰撞器給角色向上的力,使角色站立在平臺上。
提示 :這里的碰撞器是通過射線檢測實現(xiàn)的,不是Box collider, 如果腳射線檢測不到任何物體,角色就會下落.
單擊Edit Feet顯示的場景視圖:
- Edit Feet in Sence
使用鼠標拖動角色腳的邊界,能夠調(diào)整腳部碰撞器的位置。
在Inspector中,您會看到Edit Feet選項:
- Edit Feet
使用Add Collider按鈕添加更多的碰撞器到角色。 碰撞器用小圓圈表示。 使用“ Remove Collider ”按鈕刪除碰撞器。 因為腳部碰撞器必須均勻間隔,您只能控制腳部碰撞器的邊界。
更多的碰撞器將允許你的角色站在非常薄的平臺上。 如果您正在處理陡坡,您應(yīng)該使用更多的碰撞器(4或5)。腳部碰撞器應(yīng)該盡量少于5個。
Reflect changes on both sides 選項使您的角色在調(diào)整碰撞器時左右對稱。 如果您有不對稱的角色,請參閱Working with Asymmetrical Characters.。
注意:當使用tiles 時,應(yīng)考慮tiles 的大小,而不僅僅是平臺的尺寸。 如果所有平臺都是1個單位寬,但是瓷磚只有0.5f單位寬,確保角色的腳部碰撞器寬度小于瓷磚尺寸。
編輯碰撞器 - 側(cè)面
側(cè)面碰撞器在角色兩邊:用于防止角色穿過墻壁。
使用側(cè)面碰撞器類似于使用腳部碰撞器,但是您可以更好地控制側(cè)面碰撞器的位置:

使用鼠標移動碰撞器, 使用"+"號按鈕添加新的碰撞器。 按住SHIFT,然后單擊"-"號按鈕刪除一個碰撞器。
記住 :你需要有足夠的側(cè)面碰撞器,使得同一側(cè)任何碰撞器之間的最大距離小于最薄的墻壁或平臺。 這確保角色不能“穿過”墻壁。 通常3到4個是足夠的。
記住側(cè)面碰撞器的工作原理,他們給角色一個側(cè)向的力。如果側(cè)面碰撞器沒有在X軸上對齊,你的角色可能會在靠墻下降時抖動。按下 Align in X 使所有的碰撞器在X軸上對齊。大多數(shù)角色都應(yīng)該使其碰撞器沿x軸對齊。
然而,不對齊的側(cè)面碰撞器可以適用于某些角色,特別是奇怪形狀或2.5D角色。 如果要使用非對齊側(cè)面碰撞器,則要使用多個側(cè)面碰撞器來提供平滑的形狀:
- Edit Sides
“Space Evenly ”按鈕使得碰撞器在Y軸方向上均勻分布。
雙方的反射變化復(fù)選框使您的角色對稱。 在大多數(shù)情況下,您希望您的角色是對稱的,但如果您有不對稱的角色,請參閱使用不對稱字符。
編輯碰撞器 - 頭部
頭部碰撞器在接觸物體時會給角色一個向下的力,用來阻止角色跳過屋頂。
使用頭部碰撞器類似于使用側(cè)面碰撞器。 您可以選擇在Y軸( 對齊頂部Align Top )和X軸( 均勻分布,Space Evenly )進行對齊 。
像其他碰撞器一樣,您必須確保頭部碰撞器足夠靠近小于最薄的平臺,這樣角色才不會穿過平臺。
注意:當使用tiles 時,應(yīng)考慮tiles 的大小,而不僅僅是平臺的尺寸。 如果所有的平臺都是1個單位寬度,但是tiles 只有0.5f單位寬,確保你的頭部.碰撞器寬度小于瓷磚尺寸。
碰撞器通用設(shè)置
以下準則將有助于確保您的角色按預(yù)期方式行事,而不會出現(xiàn)奇怪的彈出或跳動:只有當你確定知道自己在做什么時才能打破這些規(guī)則!
- 側(cè)面碰撞器必須位于由頭部和腳部碰撞器定義的范圍內(nèi)。
- 一般側(cè)面碰撞器應(yīng)該“伸出”比頭部和腳部的碰撞物稍微遠一些。
- 一般來說,頭和腳的對撞機邊界大致相同:如果一個角色從平臺上直接落下,他們應(yīng)該能夠跳起來,而不會碰頭。
調(diào)試碰撞器
您可以通過按下“Debug Collider”按鈕來查看碰撞器的情況。 在編輯模式中,這顯示了碰撞器的邊界和范圍,但是在播放模式下,它顯示的更多:
- Debug Collider
- Debug Collider
白線顯示的是碰撞器的范圍 ,箭頭指示方向。
灰線顯示前方:這是射線投射的距離。 是用來檢測墻壁或檢測地面, 然后施加推開它的力。
藍色圓圈顯示前方區(qū)域的碰撞。 他們影響角色觸發(fā)事件,但不會影響角色的位置。
紅色圓圈顯示碰撞器范圍內(nèi)的碰撞。 他們會影響角色的位置。
2. 輸入 Input
2.1輸入基礎(chǔ) Input Basics(1)
理解這個部分對使用Platformer Pro至關(guān)重要
這個部分包括了如何通過Input輸入控制一個角色。任何一個Input輸入都是抽象Input類的具體實現(xiàn)。
快速開始
要快速添加一個輸入到您的游戲:
- 1.在你的場景中創(chuàng)建一個空物體GameObject。
- 2.選擇您新創(chuàng)建的GameObject
- 3.按AddComponent按鈕。
- 4.將StandardInput組件添加到您的GameObject(您可以通過鍵入其名稱快速找到該組件)。
- 5.(可選)您可能需要按下“標準輸入”上的“ 清除偏好設(shè)置”按鈕,以確保沒有玩家的“偏好設(shè)置”。
輸入類概述
Platformer PRO附帶以下輸入類:
- Standard Input 標準輸入
標準輸入是桌面和控制臺端上靈活而強大的輸入類。 不是為手機開發(fā)的大多數(shù)游戲?qū)⑹褂肧tandardInput。 - Basic Touch Input 基本觸控輸入
觸摸設(shè)備的簡單輸入。 - Unity Input Unity輸入
一個可以使用標準Unity輸入定義的Input類。 - Buffered Input 緩沖輸入
一個特殊的輸入類,它從另一個輸入緩沖輸入,以提供更敏銳的控制。 不能通過一個輸入使用緩沖輸入。 - Multi Input 多輸入
在多個其他輸入之前提供單個接口的輸入類。 例如,它允許您同時配置鍵盤和操縱桿。
角色如何找到自己的輸入
你可以直接給角色指定一個輸入通過角色輸入屬性,如果角色沒有指定輸入,則通過以下程序來查找輸入:
- 1.查找場景中的所有激活的輸入。
- 2.如果沒有找到輸出一個錯誤。
- 3.如果只找到一個 就把它指定給角色。
- 4.如果找到兩個或更多個:
1.嘗試找到緩沖輸入并分配。
2.如果沒有找到緩沖輸入,輸出一個警告并把第一個輸入指定給角色。
功能按鈕
像“跳躍和奔跑”,“上和下”等按鈕是不言自明的,但是您可能還需要額外的按鈕,例如使用物品或攻擊。 功能按鈕允許您定義任意數(shù)量的任意按鈕。
當功能按鈕在其他組件中使用時,由功能按鈕的數(shù)組索引識別區(qū)分。 所以如果你定義兩個按鈕,如下所示:

并且你想使用第二個按鈕(V)來攻擊,你要將攻擊的功能按鈕的索引設(shè)置為1。
提示 :與C#數(shù)組一樣,第一個功能按鈕的數(shù)組索引為0。
使用第三方輸入系統(tǒng)
您可以在Platformer PRO中使用其他的Input系統(tǒng)通過將其包裝在您自己的抽象類實現(xiàn)中。例如,如果您使用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類定義了許多允許在游戲中自定義輸入的抽象方法。 如果您使用第三方系統(tǒng),在許多情況下,這些方法可能不適用你的情況。 這種方法的實現(xiàn)可以這樣寫:
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至關(guān)重要。
Platformer PRO有一個非常靈活的Movement架構(gòu),給角色添加新的動作非常的容易。
添加到角色或子物體上的每個Movement都被添加到被稱為Movement List序列表中 。 Movements在Inspector中的顯示順序是將它們添加到列表中的順序。 GameObjects中組件列表中最高的列表首先添加到列表中,并且優(yōu)先級高于稍后添加的Movements。
默認動作
該角色需要至少兩個默認動作。 一個在空中,一個在當?shù)亍?/p>
運動列表中的最后一個GroundMovement被認為是DefaultGroundMovement 。 運動列表中的最后一個AirMovement被認為是DefaultAirMovement 。
確定當前運動
每個框架的角色都會運行,哪個運動應(yīng)該在這個時間點控制角色。 如果人物在地上,那么他們可能會被地面運動控制,如果他們爬梯子,那么他們可能會被梯子運動控制,等等。
了解這個決定是很重要的:
步驟1.在每個幀的開始, activeMovement (即控制最后一幀的運動)被詢問是否要控制() 。 activeMovement始終被賦予此選項以維護控制(有關(guān)詳細信息,請參閱定義自定義運動)。
步驟2.如果activeMovement不需要控制,則會查詢運動列表中的每個運動,以查看是否需要控制。 該方法的性質(zhì)取決于運動類型(例如AirMovement將被詢問是否要使用LikeJump()或WantAirControl() ,一個GroundMovement將被詢問是否為“ 想要的GroundControl()” )。
第三步。 如果沒有一個運動需要控制,那么如果該角色在空中,則DefaultAirMovement被控制,或者如果該角色不在空中,則DefaultGroundMovement被控制。
過渡運動控制
一旦確定當前幀的移動,則角色將檢查以查看新的移動是否與主動移動不同。 如果他們沒有什么不同,沒有什么特別的事情,并且activeMovement繼續(xù)控制角色。 如果他們不同,角色將移動控制轉(zhuǎn)移到新的運動:
步驟1. activeMovement被通知它是LosingControl ()。 這使得移動能夠清除任何數(shù)據(jù)并將狀態(tài)重新準備好以在稍后的時間獲得控制。
新的動作被告知是GainingControl ()。 這使得移動能夠執(zhí)行所需的初始化,例如將當前速度轉(zhuǎn)換成該控制器可以理解的度量(參見了解VelocityType)。
步驟3.新運動成為主動運動,并接管角色的控制。
一個例子
想象一下,這個順序有以下動作的角色:
地面運動 - 克勞奇
- AirMovement - 數(shù)字(默認運動)
地面運動 - 數(shù)字(默認運動)
如果玩家站在地面上,則無運動需要運動控制,因此,由于它是默認值,所以控制權(quán)降至3。
如果播放器然后按下跳轉(zhuǎn)按鈕,AirMovement(2)將返回到LikeJump (),因此控制將被傳遞到2。
如果玩家在空中按下,沒有任何事情發(fā)生,GourndMovement(1)將不希望控制,因為角色沒有接地。 該控件將默認返回DefaultAirMovement(2)。
一旦玩家繼續(xù)按住,當角色落在地面上時,控制將現(xiàn)在傳遞給克勞奇運動(3),因為如果角色接地并且玩家正在按下,它會要求GroundControl ()。 人物會蹲下。
現(xiàn)在考慮如果我們切換1和3的順序會發(fā)生什么。
地面運動 - 數(shù)字
- AirMovement - 數(shù)字(默認運動)
GroundMovement - Crouch(DefaultGroundMovement)
如果玩家站在地面上,則無運動需要運動控制,因此,由于它是默認值,所以控制權(quán)降至3。 人物會蹲伏而不是空轉(zhuǎn)!
跳躍將仍然正常工作,但是角色將永遠無法忍受。
重要提示 :如果您為字符使用預(yù)制,則必須將更改應(yīng)用于要應(yīng)用的組件順序的預(yù)制。 Unity有一個錯誤,其中prefabs組件順序覆蓋了GameObject的組件順序(與GameObjects設(shè)置覆蓋Prefabs的任何其他時間不同)。







