Playmaker全面實踐教程之簡單的使用Playmaker示例

大學霸發表於2015-05-26

Playmaker全面實踐教程之簡單的使用Playmaker示例

簡單的使用Playmaker示例

通過本章前面部分的學習,相信讀者已經對Playmaker有了一個整體的認識和印象了。在本章的最後,我們將以一個使用了Playmaker外掛的簡單示例作為結尾。一方面可以讓讀者瞭解Playmaker的使用流程,另一方面還可以讓讀者體會一下不使用Playmaker外掛並實現同樣效果的編寫指令碼程式碼的方法。

Playmaker示例效果說明

遊戲的場景中只有兩個可見的遊戲物件,它們分別是CubeSphere。本示例將要求它們可以接收滑鼠的“按下”和“彈起”事件,並做出反應,即改變自身的顏色。具體來說遊戲示例的效果展示主要分為四個階段:

q  階段一:遊戲執行前,CubeSphere的表面都呈現白色;

q  階段二:遊戲開始執行,CubeSphere的表面都自動變成黃色;

q  階段三:令滑鼠在Cube或者Sphere物件上方被按下,Cube或者Sphere的表面會做出反應(即變為白色);

q  階段四:讓Cube或者Sphere物件上處於按下狀態的滑鼠彈起(即釋放滑鼠按鍵),Cube或者Sphere的表面會做出反應(即變為黃色);

示例的效果如圖1-42所示。其中需要特別注意的是:

q  Cube物件的效果是藉助於指令碼程式碼實現的;

q  Sphere物件的效果是藉助於Playmaker外掛實現的;


1-42  示例的效果展示

接下來的兩節就來說明這個示例效果是如何藉助於Playmaker外掛和指令碼程式碼的。

使用Playmaker外掛

請依次完成下列操作,來體會使用Playmaker外掛,讓Sphere物件可以接收滑鼠“按下”和“彈起”事件,並做出反應的操作流程:

1.為遊戲物件新增“狀態機”

選中Sphere,然後右擊playMakerGraph View空白處,選擇Add FSM命令,可以新增預設名為FSM的狀態機。狀態機中包含了一個狀態(預設名為State),將其重新命名為Yellow,如圖1-43所示。


1-43  Sphere新增狀態機(預設名為FSM),以及新的狀態(Yellow

提示:Playmaker外掛對遊戲場景中,遊戲物件行為和效果的控制都依賴於狀態機!所以第一步操作就是為遊戲物件Sphere新增狀態機。

2.為狀態新增“過渡事件”

右擊狀態Yellow,單擊Add Transition|System Events|MOUSE DOWN命令,為狀態Yellow新增名為MOUSE DOWN的系統事件,如圖1-44所示。


1-44  為狀態Yellow新增系統事件MOUSE DOWN

提示:“過渡事件”就是遊戲物件可以接收到的事件。在本示例中我們要求Sphere物件可以接收到滑鼠的“按下”和“彈起”事件。因此,就需要讓遊戲物件Sphere可以接收到MOUSE DOWNMOUSE UP事件。

3.為狀態機新增新的“狀態”

右擊playMakerGraph View空白位置,單擊Add State命令,手動新增一個狀態,命名為White。接下來使用與上一步驟相似的方法,為White狀態新增名為MOUSE UP的系統事件,得到的狀態機如圖1-45所示。


1-45  Sphere物件上的狀態機FSM,及其狀態YellowWhite、系統事件MOUSE DOWNMOUSE UP

提示:“狀態”可以表示遊戲物件特定時刻的外觀或者屬性。本示例我們要讓Sphere的表面呈現兩種顏色,即“黃色”和“白色”。也就是說需要兩個狀態,因此狀態機中包含狀態YellowWhite

4.在狀態間建立“過渡”

拖動過渡事件MOUSE DOWN到狀態White,可以引出一條從狀態YellowWhite的連線(過渡)。使用同樣的方法建立從狀態WhiteYellow的連線(過渡),得到的狀態機如圖1-46所示。


1-46  Sphere物件上的狀態機,以及兩個狀態之間的過渡

提示:“過渡”發生在“狀態”之間,通常用於表示狀態的改變。本示例中Sphere從“黃色”變為“白色”就屬於狀態的改變,因此我們需要新增“過渡”。

5.為狀態新增“動作”

選中狀態Yellow,在Inspector PanelState的標籤中,單擊右下角的Action Browser按鈕,調出Actions編輯器視窗。雙擊Actions編輯器視窗Material分類下的Set Material Color,可為Yellow狀態新增Set Material Color動作,如圖1-47和圖1-48所示。


1-47  為狀態Yellow新增Set Material Color動作1


1-48  為狀態Yellow新增Set Material Color動作2

提示:“動作”可以被認為是一個具體的行為。本示例中,Sphere會變成“黃色”或者“白色”,就相當於狀態機需要將Sphere設定成“黃色”和“白色”這個動作,因此我們使用了動作Set Material Color

6.設定動作的“屬性”

Inspector Panel裡修改狀態Yellow動作Set Material ColorColor屬性為黃色。使用與上一步驟相同的方式,為狀態White新增Set Material Color動作,並設定Color屬性為白色,如圖1-49所示。


1-49  設定狀態YellowWhite各自Set Material Color動作的Color屬性

現在,讓Sphere物件接收滑鼠“按下”和“彈起”事件,並做出反應的效果就完成了!需要提醒讀者以下兩點,如圖1-50所示。

q  擁有狀態機的遊戲物件,會在Scene檢視中被“玩”圖示標識;

q  遊戲執行時,擁有狀態機的遊戲物件,會在Game檢視中被“狀態名稱”標識;


1-50  擁有狀態機的遊戲物件Sphere

提示:本示例是讀者第一次接觸Playmaker外掛後,首次看到的Playmaker在遊戲專案中的應用,因此本節對其中涉及到的操作,使用了及其詳細的圖示和文字進行了描述,以求讀者無歧義、快速和直觀的感受操作流程。而本書接下來的章節再講解到示例的時候就不會這麼詳盡了,希望讀者能夠諒解。

Playmaker使用指令碼程式碼

請依次完成下列操作,來體會使用指令碼程式碼,讓Cube物件可以接收滑鼠“按下”和“彈起”事件,並做出反應的操作流程:

1.建立指令碼並新增程式碼

Project檢視裡,新建一個C#指令碼,並命名為CheckMouseClick,為此指令碼新增下面的程式碼:


  • 01     using UnityEngine;
  • 02     using System.Collections;
  • 03    
  • 04     public class CheckMouseClick : MonoBehaviour
  • 05     {
  • 06              private Renderer rend;
  • 07    
  • 08              // Use this for initialization
  • 09              void Start ()
  • 10              {
  • 11                       rend = GetComponent ();
  • 12                       rend.material.color = Color.yellow;
  • 13              }
  • 14              void OnMouseDown()
  • 15              {
  • 16                       rend.material.color = Color.white;
  • 17              }
  • 18              void OnMouseUp()
  • 19              {
  • 20                       rend.material.color = Color.yellow;
  • 21              }
  • 22     }


對於此指令碼,需要說明的是:

q  指令碼09~13行,會在遊戲執行的最開始,讓Cube物件變成黃色;

q  指令碼14~17行,會讓Cube物件接收到滑鼠“按下”事件,並做出反應“變為白色”;

q  指令碼18~21行,會讓Cube物件接收到滑鼠“彈起”事件,並做出反應“變為黃色”;

2.將指令碼賦予遊戲物件

將指令碼CheckMouseClick賦予遊戲物件Cube,如圖1-51所示。現在讓Cube物件接收滑鼠“按下”和“彈起”事件,並做出反應的效果就完成了!


1-51  被賦予CheckMouseClick指令碼的遊戲物件Cube

Playmaker比較兩種方式

本示例分別使用Playmaker外掛和指令碼程式碼,實現了讓遊戲物件接收滑鼠“按下”和“彈起”事件,並做出反應的功能。本小節將對這兩種方式做一個比較,然後說明為什麼為數眾多的開發者會選擇Playmaker外掛!

首先,如果只是單純的看兩種方式在本節中所佔的篇幅的話,無疑會給讀者Playmaker很複雜,而指令碼程式碼很簡單的錯誤印象。說這個印象是錯誤的原因是:

q  指令碼程式碼的篇幅短,是因為此種方式所涉及到的操作並不多(三步:新建指令碼,新增程式碼,賦予遊戲物件),所以在書中所佔的篇幅就少。但是指令碼程式碼的難點在於,指令碼程式碼中的程式碼是要自己去書寫的,其中用到的類、方法、事件等等,都是需要去API手冊中查閱的。

q  Playmaker的篇幅長,是因為涉及到的檢視和操作都多,所以在書中用到了更多的篇幅,但是讀者應該發現了,操作再多我們也是單純的通過滑鼠的各種操作(單擊,右擊,拖動)就將功能實現了,也無需參考任何手冊。

其次,與指令碼程式碼相比,Playmaker的狀態機檢視可以更直觀的呈現功能的實現流程,例如,一眼看出狀態、事件的個數,以及它們是如何影響到遊戲物件行為的,如圖1-52所示。


1-52  Playmaker中的狀態機與指令碼中的程式碼

最後,Playmaker的可操作性優於指令碼程式碼:

q  對於遊戲開發的初學者而言,在不寫程式碼的前提下就可以完成遊戲的製作,無疑可以大大的降低學習的門檻,讓更多的人蔘與進來,體會製作遊戲的樂趣;

q  對於有經驗的遊戲開發者而言,Playmaker能快速的實現他們的遊戲設想或者說是靈感,而且方便他們整理思路,隨時改進想法。也就是說,Playmaker可以讓他們快速的得到遊戲的雛形,並驗證這種想法的可行性!

本文選自:Playmaker全面實踐教程Input篇大學霸資料,轉載請註明出處,尊重技術尊重IT人!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1672130/,如需轉載,請註明出處,否則將追究法律責任。

相關文章