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

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

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

玩家在遊戲時,無時無刻不在經過判斷作出選擇。例如,正是由於玩家作出的選擇不一樣,才致使遊戲朝着不一樣的劇情發展,所以一個玩家能夠對一個遊戲百玩不厭!既然提到了這一點,藉此機會本章就來講明,在腳本中實現遊戲爲玩家提供更多選擇的方法。spa

Unity遊戲的執行路徑

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

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

玩家在玩遊戲的過程當中,老是在作出一些選擇,而這些選擇直接影響了遊戲的執行路徑。玩家的選擇效果是遊戲體現出來的,可是遊戲實現這一效果的內在緣由是,遊戲代碼腳本中添加了容許玩家進行選擇的判斷語句。對象

Unity判斷玩家的選擇

上一節說明了,腳本中的判斷語句對於遊戲的重要性,可是列舉的例子仍是太抽象了。讀者無需爲此感到困惑,做者能夠在此處列舉些更實際的例子:玩家是否按下了遊戲視圖中的特定按鈕,或者鍵盤上的特定按鍵,玩家是否擊敗了小怪等等。這些都是遊戲腳本中須要使用判斷語句的地方。教程

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

在生活中,人類習慣使用「是」和「否」作出判斷,但在遊戲的腳本中,一般是使用「真」和「假」來作出判斷的。本小節將以腳本中最經常使用的if語句來講明,在腳本中作出判斷的方法。遊戲

1.if語句ip

在腳本中,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人!

相關文章
相關標籤/搜索