C#開發Unity遊戲教程之判斷語句

大學霸發表於2015-07-09

C#開發Unity遊戲教程之判斷語句

遊戲執行路徑的選擇——判斷

玩家在遊戲時,無時無刻不在通過判斷做出選擇。例如,正是因為玩家做出的選擇不同,才導致遊戲朝著不同的劇情發展,因此一個玩家可以對一個遊戲百玩不厭!既然提到了這一點,藉此機會本章就來說明,在指令碼中實現遊戲為玩家提供更多選擇的方法。

Unity遊戲的執行路徑

遊戲如此受玩家歡迎的原因,除了優質的畫面效果以外,就是遊戲的可互動性。也就是說,遊戲是可以與玩家互動的,這也是遊戲與視訊的不同之處。遊戲允許玩家在一定程度上控制遊戲的執行路徑,雖然這些路徑都是遊戲預先設定好的。例如,《仙劍奇俠傳》這款遊戲中,往大了說玩家可以決定觸發哪個劇情去完成哪個任務,往小了說玩家可以決定戰鬥時,使用法力還是武器,以及使用什麼招式,如圖5-1所示。


5-1  《仙劍奇俠傳》遊戲的劇情與攻擊方式的選擇

玩家在玩遊戲的過程中,總是在做出一些選擇,而這些選擇直接影響了遊戲的執行路徑。玩家的選擇效果是遊戲體現出來的,但是遊戲實現這一效果的內在原因是,遊戲程式碼指令碼中新增了允許玩家進行選擇的判斷語句。

Unity判斷玩家的選擇

上一節說明了,指令碼中的判斷語句對於遊戲的重要性,但是列舉的例子還是太抽象了。讀者無需為此感到困惑,作者可以在此處列舉些更實際的例子:玩家是否按下了遊戲檢視中的特定按鈕,或者鍵盤上的特定按鍵,玩家是否擊敗了小怪等等。這些都是遊戲指令碼中需要使用判斷語句的地方。

Unity中最常用的判斷語句——if

在生活中,人類習慣使用“是”和“否”做出判斷,但在遊戲的指令碼中,通常是使用“真”和“假”來做出判斷的。本小節將以指令碼中最常用的if語句來說明,在指令碼中做出判斷的方法。

1.if語句

在指令碼中,if語句的書寫格式如下,表示的遊戲執行流程如圖5-2所示。

  • if(需要判斷的部分)

  • {

  •          //語句或者語句塊;

  • }

  • q  if及其後面的括號“( )”是必不可少的;

  • q  大括號“{ }”裡包含的是語句塊,即多條語句,如果語句塊裡只有一條語句,那麼大括號“{ }”就可以省略;

  • q  當從判斷部分得出的結論是true時,就執行大括號裡面的語句,否則就直接跳過大括號裡的語句;


5-2  if語句表示的遊戲執行流程圖

2.需要判斷的部分

這部分程式碼可以是表示式,也可以是方法。但是無論如何,這個部分應該可以明確的給出true或者falsetruefalse實際上是布林型別的資料(在第2章中曾以表格的形式列出)。也就是說,從需要判斷的部分裡,可以得到一個資料,而這個資料是布林型別的。至於表示式,它既可以是邏輯表示式,又可以是關係表示式,如圖5-3所示。


5-3  判斷部分的構成和結果

3.邏輯表示式

構成邏輯表示式的邏輯運算子有3種:!(非)、&&(與)和||(或),這種表示式的運算結果如表5.1所示。

5.1  邏輯表示式的運算結果


註釋:ab是參與邏輯運算的兩個資料。

4.關係表示式

構成關係表示式的關係運算子有6種,它們的名稱、使用示例及功能如表5.2所示。

5.2  關係運算子、使用示例及功能


Unity遊戲中的if語句遊戲示例

請按照下面的步驟,完成遊戲示例的製作:

1為遊戲場景新增3個遊戲物件:Directional lightSpherePlane。調節各遊戲物件在遊戲場景中的位置、朝向和大小,如圖5-4所示。得到的遊戲場景和遊戲檢視,如圖5-5所示。


5-4  設定各遊戲物件Transform元件下的屬性


5-5  SceneGame檢視裡,檢視各遊戲物件的相對位置,以及遊戲檢視效果

Sphere是玩家在遊戲中需要操作的遊戲物件,而Plane則是為了模擬遊戲中的“地面”而存在。

2Hierarchy檢視裡選中Sphere物件,然後單擊Component|Physics|Rigidbody命令,即可為Sphere物件新增剛體(Rigidbody)元件,如圖5-6所示,此元件將使得Sphere物件如現實世界一般,會受到重力的影響。如果Sphere在空中的話,那麼它就會因為收到重力的影響而下墜。


5-6  Sphere物件新增的剛體元件

3開啟指令碼MyScript,並新增下面的程式碼:

  • 01     using UnityEngine;

  • 02     using System.Collections;

  • 03    

  • 04     public class MyScript : MonoBehaviour

  • 05     {

  • 06              private GameObject mySphere;

  • 07              private Vector3 myVec;

  • 08              void Start()

  • 09              {

  • 10                       mySphere = GameObject.Find ("Sphere");

  • 11              }

  • 12              void Update()

  • 13              {

  • 14                       myVec = mySphere.transform.position;

  • 15                        //判斷小球是否在Y軸方向上,超過了一定的範圍,簡單來說就是是否達到了一定的高度

  • 16                       if(myVec.y > 4)

  • 17                                 myVec.y = 4;

  • 18                       mySphere.transform.position = myVec;

  • 19              }

  • 20              void FixedUpdate()

  • 21              {

  • 22                        //判斷玩家是否按下了滑鼠的左鍵

  • 23                       if(Input.GetMouseButton(0))

  • 24                                 mySphere.rigidbody.AddForce (Vector3.up*20);

  • 25              }

  • 26     }

將此指令碼賦予Main Camera物件。

  • q  程式碼1617行是if語句,括號裡表示判斷的部分是一個關係表示式。因為只有17行一條語句,所以沒有使用大括號“{ }”,當關系表示式的值為true時,執行此語句;

  • q  程式碼2324行是if語句,括號裡表示判斷的部分是一個方法,即Input.GetMouseButton(),作用是檢測玩家是否按下了滑鼠的左鍵。同樣只有24行一條語句,所以也省略了大括號“{ }”,當方法返回的值是true時,執行此語句;

提示:Input.GetMouseButton()幫助文件的文字描述如圖5-7所示,從中可以看出方法會返回bool型別的資料,而且判斷的標準就是玩家是否持續按下了指定的滑鼠按鍵。


5-7  Input.GetMouseButton()的幫助資訊

4執行遊戲,由於球體最初在空中,此時球體只是受到了重力的影響,因此會向下墜落,直到降落到“地面”上為止。如果玩家此時按下滑鼠左鍵的話,就會給球體施加一個向上的力,這個力比重力大,因此小球會向上運動。也就是說,當玩家按下滑鼠左鍵以後,小球會向上運動。但是小球向上運動的範圍是有限的,達到了這個限度以後,就不會再繼續上升了,如圖5-8所示。


5-8  遊戲示例執行效果

Unity開發中的其它判斷語句

除了if語句以外,C#還提供了一些其它的判斷語句,本小節會做簡要介紹。如果需要的話,讀者可以查閱專門講解C#語法的書籍,然後將它們靈活的運用在遊戲指令碼的編寫當中。

1.if-else語句

此種型別的語句與if語句的區別是,當判斷部分的結果為false時,會執行另一個語句。此種語句表示的遊戲執行流程如圖5-9所示。


5-9  if-else語句表示的遊戲執行流程圖

2.if-else-if語句

此種型別的語句,屬於多重判斷語句,也就是說,需要判斷的部分不止一處,且每處的判斷都會導致不同的執行流程,如圖5-10所示。


5-10  if-else-if語句表示的遊戲執行流程圖

3.swtich語句

此種型別的語句,所表示的遊戲執行流程,與if-else-if語句類似,它們二者可以互換。儘管流程是類似,但是給程式碼閱讀者的直觀感受卻是不同的,如圖5-11所示。


5-11  switch語句表示的遊戲執行流程圖

本文選自:C#遊戲開發快速入門大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!


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

相關文章