前言
Platformer Pro框架是Unity3d AssetStore上一個(gè)非常強(qiáng)大和受歡迎的2d游戲開(kāi)發(fā)框架,這個(gè)教程的大部分翻譯于官方文檔,一部分是工作總結(jié),還有一部分是視頻教程文檔化.這個(gè)文檔教程內(nèi)容比較多,可能需要很久才能更新完.
剛買完最新正版,這里是下載鏈接: https://pan.baidu.com/s/1c2GggaG 密碼: k9nf
一.教程
1. 開(kāi)始 Getting Started
1.1總覽
總覽安排的學(xué)習(xí)目標(biāo)能讓你對(duì)Platformer Pro有一個(gè)全面基本的了解.
初步閱讀
文檔中所有標(biāo)有(1)的文章是文章所在各個(gè)模塊的總覽,最好每個(gè)都看一遍,這樣能讓你對(duì)整個(gè)框架的結(jié)構(gòu)有一個(gè)清晰的認(rèn)識(shí).
- 角色[Characters (I)(https://jnamobile.zendesk.com/hc/en-gb/articles/204344570)
- 碰撞器Colliders (I)
- 輸入基礎(chǔ)Input Basics (I)
- 運(yùn)動(dòng)組件工作方式How Movement Works (I)
- 動(dòng)畫橋Animation Bridges (I)
- 平臺(tái)Platforms (I)
簡(jiǎn)單視頻教程
加入論壇
進(jìn)階視頻教程
讀完所有API文檔
- 為了進(jìn)一步的理解Platformer PRO烈和,下一步是閱讀完整的API文檔笼才,
項(xiàng)目中練習(xí)
- 只有在實(shí)際項(xiàng)目中運(yùn)用才能真正學(xué)會(huì)使用這個(gè)框架.
1.2 快速開(kāi)始
二.文檔
1. 角色組件 Character Components
1.1角色Character (I)
理解這個(gè)部分對(duì)使用Platformer Pro至關(guān)重要
Character組件是組織其他所有組件的基礎(chǔ)組件:通過(guò)Character組件,其他組件能夠結(jié)合到一起工作來(lái)實(shí)現(xiàn)角色的創(chuàng)建。
Character組件包含影響角色行為的關(guān)鍵元素的配置最爬,例如角色將與哪些層交互溉跃。
要?jiǎng)?chuàng)建一個(gè)新角色,將Character組件添加到一個(gè)空的GameObject中。
1.2碰撞器Colliders(1)
理解這個(gè)部分對(duì)使用Platformer Pro至關(guān)重要
Platformer PRO中的角色碰撞由在character上定義的RaycastColliders控制痛单。 角色的頭部,側(cè)面和腳部都有一些碰撞器劲腿。
通過(guò)添加character組件創(chuàng)建角色后旭绒,你就可以使用角色上的Collider Editor來(lái)修改角色身上的碰撞體:
重置碰撞體Collider
按“ 重置碰撞器 ”按鈕,可以把碰撞器的各個(gè)選項(xiàng)重置為不同的默認(rèn)值焦人。 當(dāng)按下此按鈕時(shí)挥吵,將根據(jù)角色的配置顯示一系列選項(xiàng)。例如:
- Reset to default position
將對(duì)齊框重置為框形花椭。 - Use basic sprite detection
將對(duì)應(yīng)關(guān)系重置為精靈邊界忽匈。(帶有SpriteRenderer) - Use smart sprite detection
讀取精靈的Alpha通道,以猜測(cè)碰撞機(jī)的最佳位置矿辽。(帶有SpriteRenderer指向一個(gè)可讀的Sprite) - Use mesh based detection
將關(guān)鍵字重置為網(wǎng)格的邊界丹允。(帶有MeshFilter)
使用可讀Sprite重置碰撞器選項(xiàng)作為角色GameObject:
使用不可讀Sprite將角色GameObject的小孩重新設(shè)置為相關(guān)選項(xiàng)(請(qǐng)注意信息消息):
-
在設(shè)置了基本的碰撞器之后郭厌,您可以使用“Edit Feet”,“Edit Sides”和“Edit Head”按鈕來(lái)調(diào)整碰撞器的位置雕蔽。
編輯碰撞器 - 腳部
腳部碰撞器給角色向上的力,使角色站立在平臺(tái)上折柠。
提示 :這里的碰撞器是通過(guò)射線檢測(cè)實(shí)現(xiàn)的,不是Box collider, 如果腳射線檢測(cè)不到任何物體批狐,角色就會(huì)下落.
單擊Edit Feet顯示的場(chǎng)景視圖:
使用鼠標(biāo)拖動(dòng)角色腳的邊界,能夠調(diào)整腳部碰撞器的位置液走。
在Inspector中,您會(huì)看到Edit Feet選項(xiàng):
使用Add Collider按鈕添加更多的碰撞器到角色贾陷。 碰撞器用小圓圈表示缘眶。 使用“ Remove Collider ”按鈕刪除碰撞器。 因?yàn)槟_部碰撞器必須均勻間隔髓废,您只能控制腳部碰撞器的邊界巷懈。
更多的碰撞器將允許你的角色站在非常薄的平臺(tái)上。 如果您正在處理陡坡慌洪,您應(yīng)該使用更多的碰撞器(4或5)顶燕。腳部碰撞器應(yīng)該盡量少于5個(gè)。
Reflect changes on both sides 選項(xiàng)使您的角色在調(diào)整碰撞器時(shí)左右對(duì)稱冈爹。 如果您有不對(duì)稱的角色涌攻,請(qǐng)參閱Working with Asymmetrical Characters.。
注意:當(dāng)使用tiles 時(shí)频伤,應(yīng)考慮tiles 的大小恳谎,而不僅僅是平臺(tái)的尺寸。 如果所有平臺(tái)都是1個(gè)單位寬憋肖,但是瓷磚只有0.5f單位寬因痛,確保角色的腳部碰撞器寬度小于瓷磚尺寸。
編輯碰撞器 - 側(cè)面
側(cè)面碰撞器在角色兩邊:用于防止角色穿過(guò)墻壁岸更。
使用側(cè)面碰撞器類似于使用腳部碰撞器鸵膏,但是您可以更好地控制側(cè)面碰撞器的位置:
使用鼠標(biāo)移動(dòng)碰撞器, 使用"+"號(hào)按鈕添加新的碰撞器。 按住SHIFT怎炊,然后單擊"-"號(hào)按鈕刪除一個(gè)碰撞器谭企。
記住 :你需要有足夠的側(cè)面碰撞器,使得同一側(cè)任何碰撞器之間的最大距離小于最薄的墻壁或平臺(tái)评肆。 這確保角色不能“穿過(guò)”墻壁债查。 通常3到4個(gè)是足夠的。
記住側(cè)面碰撞器的工作原理糟港,他們給角色一個(gè)側(cè)向的力攀操。如果側(cè)面碰撞器沒(méi)有在X軸上對(duì)齊,你的角色可能會(huì)在靠墻下降時(shí)抖動(dòng)秸抚。按下 Align in X 使所有的碰撞器在X軸上對(duì)齊速和。大多數(shù)角色都應(yīng)該使其碰撞器沿x軸對(duì)齊歹垫。
然而,不對(duì)齊的側(cè)面碰撞器可以適用于某些角色颠放,特別是奇怪形狀或2.5D角色排惨。 如果要使用非對(duì)齊側(cè)面碰撞器,則要使用多個(gè)側(cè)面碰撞器來(lái)提供平滑的形狀:
“Space Evenly ”按鈕使得碰撞器在Y軸方向上均勻分布碰凶。
雙方的反射變化復(fù)選框使您的角色對(duì)稱暮芭。 在大多數(shù)情況下,您希望您的角色是對(duì)稱的欲低,但如果您有不對(duì)稱的角色辕宏,請(qǐng)參閱使用不對(duì)稱字符。
編輯碰撞器 - 頭部
頭部碰撞器在接觸物體時(shí)會(huì)給角色一個(gè)向下的力,用來(lái)阻止角色跳過(guò)屋頂砾莱。
使用頭部碰撞器類似于使用側(cè)面碰撞器瑞筐。 您可以選擇在Y軸( 對(duì)齊頂部Align Top )和X軸( 均勻分布,Space Evenly )進(jìn)行對(duì)齊 。
像其他碰撞器一樣腊瑟,您必須確保頭部碰撞器足夠靠近小于最薄的平臺(tái)聚假,這樣角色才不會(huì)穿過(guò)平臺(tái)。
注意:當(dāng)使用tiles 時(shí)闰非,應(yīng)考慮tiles 的大小膘格,而不僅僅是平臺(tái)的尺寸。 如果所有的平臺(tái)都是1個(gè)單位寬度财松,但是tiles 只有0.5f單位寬瘪贱,確保你的頭部.碰撞器寬度小于瓷磚尺寸。
碰撞器通用設(shè)置
以下準(zhǔn)則將有助于確保您的角色按預(yù)期方式行事游岳,而不會(huì)出現(xiàn)奇怪的彈出或跳動(dòng):只有當(dāng)你確定知道自己在做什么時(shí)才能打破這些規(guī)則政敢!
- 側(cè)面碰撞器必須位于由頭部和腳部碰撞器定義的范圍內(nèi)其徙。
- 一般側(cè)面碰撞器應(yīng)該“伸出”比頭部和腳部的碰撞物稍微遠(yuǎn)一些胚迫。
- 一般來(lái)說(shuō),頭和腳的對(duì)撞機(jī)邊界大致相同:如果一個(gè)角色從平臺(tái)上直接落下唾那,他們應(yīng)該能夠跳起來(lái)访锻,而不會(huì)碰頭。
調(diào)試碰撞器
您可以通過(guò)按下“Debug Collider”按鈕來(lái)查看碰撞器的情況闹获。 在編輯模式中期犬,這顯示了碰撞器的邊界和范圍,但是在播放模式下避诽,它顯示的更多:
白線顯示的是碰撞器的范圍 龟虎,箭頭指示方向。
灰線顯示前方:這是射線投射的距離沙庐。 是用來(lái)檢測(cè)墻壁或檢測(cè)地面鲤妥, 然后施加推開(kāi)它的力佳吞。
藍(lán)色圓圈顯示前方區(qū)域的碰撞。 他們影響角色觸發(fā)事件棉安,但不會(huì)影響角色的位置底扳。
紅色圓圈顯示碰撞器范圍內(nèi)的碰撞。 他們會(huì)影響角色的位置贡耽。
2. 輸入 Input
2.1輸入基礎(chǔ) Input Basics(1)
理解這個(gè)部分對(duì)使用Platformer Pro至關(guān)重要
這個(gè)部分包括了如何通過(guò)Input輸入控制一個(gè)角色衷模。任何一個(gè)Input輸入都是抽象Input類的具體實(shí)現(xiàn)。
快速開(kāi)始
要快速添加一個(gè)輸入到您的游戲:
- 1.在你的場(chǎng)景中創(chuàng)建一個(gè)空物體GameObject蒲赂。
- 2.選擇您新創(chuàng)建的GameObject
- 3.按AddComponent按鈕阱冶。
- 4.將StandardInput組件添加到您的GameObject(您可以通過(guò)鍵入其名稱快速找到該組件)。
- 5.(可選)您可能需要按下“標(biāo)準(zhǔn)輸入”上的“ 清除偏好設(shè)置”按鈕滥嘴,以確保沒(méi)有玩家的“偏好設(shè)置”熙揍。
輸入類概述
Platformer PRO附帶以下輸入類:
- Standard Input 標(biāo)準(zhǔn)輸入
標(biāo)準(zhǔn)輸入是桌面和控制臺(tái)端上靈活而強(qiáng)大的輸入類。 不是為手機(jī)開(kāi)發(fā)的大多數(shù)游戲?qū)⑹褂肧tandardInput氏涩。 - Basic Touch Input 基本觸控輸入
觸摸設(shè)備的簡(jiǎn)單輸入届囚。 - Unity Input Unity輸入
一個(gè)可以使用標(biāo)準(zhǔn)Unity輸入定義的Input類。 - Buffered Input 緩沖輸入
一個(gè)特殊的輸入類是尖,它從另一個(gè)輸入緩沖輸入意系,以提供更敏銳的控制。 不能通過(guò)一個(gè)輸入使用緩沖輸入饺汹。 - Multi Input 多輸入
在多個(gè)其他輸入之前提供單個(gè)接口的輸入類蛔添。 例如,它允許您同時(shí)配置鍵盤和操縱桿兜辞。
角色如何找到自己的輸入
你可以直接給角色指定一個(gè)輸入通過(guò)角色輸入屬性迎瞧,如果角色沒(méi)有指定輸入,則通過(guò)以下程序來(lái)查找輸入:
- 1.查找場(chǎng)景中的所有激活的輸入逸吵。
- 2.如果沒(méi)有找到輸出一個(gè)錯(cuò)誤凶硅。
- 3.如果只找到一個(gè) 就把它指定給角色。
- 4.如果找到兩個(gè)或更多個(gè):
1.嘗試找到緩沖輸入并分配扫皱。
2.如果沒(méi)有找到緩沖輸入足绅,輸出一個(gè)警告并把第一個(gè)輸入指定給角色。
功能按鈕
像“跳躍和奔跑”韩脑,“上和下”等按鈕是不言自明的氢妈,但是您可能還需要額外的按鈕,例如使用物品或攻擊段多。 功能按鈕允許您定義任意數(shù)量的任意按鈕首量。
當(dāng)功能按鈕在其他組件中使用時(shí),由功能按鈕的數(shù)組索引識(shí)別區(qū)分。 所以如果你定義兩個(gè)按鈕加缘,如下所示:
并且你想使用第二個(gè)按鈕(V)來(lái)攻擊,你要將攻擊的功能按鈕的索引設(shè)置為1粥航。
提示 :與C#數(shù)組一樣,第一個(gè)功能按鈕的數(shù)組索引為0。
使用第三方輸入系統(tǒng)
您可以在Platformer PRO中使用其他的Input系統(tǒng)通過(guò)將其包裝在您自己的抽象類實(shí)現(xiàn)中生百。例如递雀,如果您使用cInput 2(第三方Input插件),則可以按如下方式編寫一個(gè)類:
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
}
// 這里僅僅舉例說(shuō)明了 Jump 按鈕的寫法,其他按鈕的寫法類似
}
}
未使用的方法
請(qǐng)注意蚀浆,Input類定義了許多允許在游戲中自定義輸入的抽象方法缀程。 如果您使用第三方系統(tǒng),在許多情況下市俊,這些方法可能不適用你的情況杨凑。 這種方法的實(shí)現(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. 運(yùn)動(dòng) Movement
3.1 運(yùn)動(dòng)如何工作的
理解此部分對(duì)于使用Platformer PRO至關(guān)重要。
Platformer PRO有一個(gè)非常靈活的Movement架構(gòu)摆昧,給角色添加新的動(dòng)作非常的容易撩满。
添加到角色或子物體上的每個(gè)Movement都被添加到被稱為Movement List序列表中 。 Movements在Inspector中的顯示順序是將它們添加到列表中的順序绅你。 GameObjects中組件列表中最高的列表首先添加到列表中伺帘,并且優(yōu)先級(jí)高于稍后添加的Movements。
默認(rèn)動(dòng)作
該角色需要至少兩個(gè)默認(rèn)動(dòng)作忌锯。 一個(gè)在空中伪嫁,一個(gè)在當(dāng)?shù)亍?/p>
運(yùn)動(dòng)列表中的最后一個(gè)GroundMovement被認(rèn)為是DefaultGroundMovement 。 運(yùn)動(dòng)列表中的最后一個(gè)AirMovement被認(rèn)為是DefaultAirMovement 偶垮。
確定當(dāng)前運(yùn)動(dòng)
每個(gè)框架的角色都會(huì)運(yùn)行张咳,哪個(gè)運(yùn)動(dòng)應(yīng)該在這個(gè)時(shí)間點(diǎn)控制角色。 如果人物在地上似舵,那么他們可能會(huì)被地面運(yùn)動(dòng)控制脚猾,如果他們爬梯子,那么他們可能會(huì)被梯子運(yùn)動(dòng)控制砚哗,等等龙助。
了解這個(gè)決定是很重要的:
步驟1.在每個(gè)幀的開(kāi)始, activeMovement (即控制最后一幀的運(yùn)動(dòng))被詢問(wèn)是否要控制() 频祝。 activeMovement始終被賦予此選項(xiàng)以維護(hù)控制(有關(guān)詳細(xì)信息泌参,請(qǐng)參閱定義自定義運(yùn)動(dòng))。
步驟2.如果activeMovement不需要控制常空,則會(huì)查詢運(yùn)動(dòng)列表中的每個(gè)運(yùn)動(dòng),以查看是否需要控制盖溺。 該方法的性質(zhì)取決于運(yùn)動(dòng)類型(例如AirMovement將被詢問(wèn)是否要使用LikeJump()或WantAirControl() 漓糙,一個(gè)GroundMovement將被詢問(wèn)是否為“ 想要的GroundControl()” )。
第三步烘嘱。 如果沒(méi)有一個(gè)運(yùn)動(dòng)需要控制昆禽,那么如果該角色在空中蝗蛙,則DefaultAirMovement被控制,或者如果該角色不在空中醉鳖,則DefaultGroundMovement被控制捡硅。
過(guò)渡運(yùn)動(dòng)控制
一旦確定當(dāng)前幀的移動(dòng),則角色將檢查以查看新的移動(dòng)是否與主動(dòng)移動(dòng)不同盗棵。 如果他們沒(méi)有什么不同壮韭,沒(méi)有什么特別的事情,并且activeMovement繼續(xù)控制角色纹因。 如果他們不同喷屋,角色將移動(dòng)控制轉(zhuǎn)移到新的運(yùn)動(dòng):
步驟1. activeMovement被通知它是LosingControl ()。 這使得移動(dòng)能夠清除任何數(shù)據(jù)并將狀態(tài)重新準(zhǔn)備好以在稍后的時(shí)間獲得控制瞭恰。
新的動(dòng)作被告知是GainingControl ()屯曹。 這使得移動(dòng)能夠執(zhí)行所需的初始化,例如將當(dāng)前速度轉(zhuǎn)換成該控制器可以理解的度量(參見(jiàn)了解VelocityType)惊畏。
步驟3.新運(yùn)動(dòng)成為主動(dòng)運(yùn)動(dòng)恶耽,并接管角色的控制。
一個(gè)例子
想象一下颜启,這個(gè)順序有以下動(dòng)作的角色:
地面運(yùn)動(dòng) - 克勞奇
- AirMovement - 數(shù)字(默認(rèn)運(yùn)動(dòng))
地面運(yùn)動(dòng) - 數(shù)字(默認(rèn)運(yùn)動(dòng))
如果玩家站在地面上驳棱,則無(wú)運(yùn)動(dòng)需要運(yùn)動(dòng)控制,因此农曲,由于它是默認(rèn)值社搅,所以控制權(quán)降至3。
如果播放器然后按下跳轉(zhuǎn)按鈕乳规,AirMovement(2)將返回到LikeJump ()形葬,因此控制將被傳遞到2。
如果玩家在空中按下暮的,沒(méi)有任何事情發(fā)生笙以,GourndMovement(1)將不希望控制,因?yàn)榻巧珱](méi)有接地冻辩。 該控件將默認(rèn)返回DefaultAirMovement(2)猖腕。
一旦玩家繼續(xù)按住,當(dāng)角色落在地面上時(shí)恨闪,控制將現(xiàn)在傳遞給克勞奇運(yùn)動(dòng)(3)倘感,因?yàn)槿绻巧拥夭⑶彝婕艺诎聪拢鼤?huì)要求GroundControl ()咙咽。 人物會(huì)蹲下老玛。
現(xiàn)在考慮如果我們切換1和3的順序會(huì)發(fā)生什么。
地面運(yùn)動(dòng) - 數(shù)字
- AirMovement - 數(shù)字(默認(rèn)運(yùn)動(dòng))
GroundMovement - Crouch(DefaultGroundMovement)
如果玩家站在地面上,則無(wú)運(yùn)動(dòng)需要運(yùn)動(dòng)控制蜡豹,因此麸粮,由于它是默認(rèn)值,所以控制權(quán)降至3镜廉。 人物會(huì)蹲伏而不是空轉(zhuǎn)弄诲!
跳躍將仍然正常工作,但是角色將永遠(yuǎn)無(wú)法忍受娇唯。
重要提示 :如果您為字符使用預(yù)制齐遵,則必須將更改應(yīng)用于要應(yīng)用的組件順序的預(yù)制。 Unity有一個(gè)錯(cuò)誤视乐,其中prefabs組件順序覆蓋了GameObject的組件順序(與GameObjects設(shè)置覆蓋Prefabs的任何其他時(shí)間不同)洛搀。