Unity3d Platformer Pro 2D游戲開發(fā)框架使用教程

前言

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)有一個清晰的認識.

簡單視頻教程
加入論壇
進階視頻教程
讀完所有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 Colloders
  • 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è)面碰撞器的位置:

Edit Sides

使用鼠標移動碰撞器, 使用"+"號按鈕添加新的碰撞器。 按住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ū)分。 所以如果你定義兩個按鈕,如下所示:

Action Button

并且你想使用第二個按鈕(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.新運動成為主動運動,并接管角色的控制。

一個例子

想象一下,這個順序有以下動作的角色:

地面運動 - 克勞奇

  1. 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ù)字

  1. AirMovement - 數(shù)字(默認運動)
    GroundMovement - Crouch(DefaultGroundMovement)

如果玩家站在地面上,則無運動需要運動控制,因此,由于它是默認值,所以控制權(quán)降至3。 人物會蹲伏而不是空轉(zhuǎn)!

跳躍將仍然正常工作,但是角色將永遠無法忍受。

重要提示 :如果您為字符使用預(yù)制,則必須將更改應(yīng)用于要應(yīng)用的組件順序的預(yù)制。 Unity有一個錯誤,其中prefabs組件順序覆蓋了GameObject的組件順序(與GameObjects設(shè)置覆蓋Prefabs的任何其他時間不同)。

4. 動畫 Animation

5. 生命和傷害 Heath and Damage

6. 物品和獎勵 Items and Power Ups

7. 敵人 Enemies

8. 傷害系統(tǒng) the Attack System

9. 平臺和幾何 Platformes and Geometry

10. 觸發(fā)器和事件響應(yīng) Triggers and Event Responders

11. UI和特效 UI and Effects

12. 擴展和使用第三方工具 Extending and Using Third Party Tools

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容