玩家在遊戲時,無時無刻不在經過判斷作出選擇。例如,正是由於玩家作出的選擇不一樣,才致使遊戲朝着不一樣的劇情發展,所以一個玩家能夠對一個遊戲百玩不厭!既然提到了這一點,藉此機會本章就來講明,在腳本中實現遊戲爲玩家提供更多選擇的方法。spa
遊戲如此受玩家歡迎的緣由,除了優質的畫面效果之外,就是遊戲的可交互性。也就是說,遊戲是能夠與玩家互動的,這也是遊戲與視頻的不一樣之處。遊戲容許玩家在必定程度上控制遊戲的執行路徑,雖然這些路徑都是遊戲預先設定好的。例如,《仙劍奇俠傳》這款遊戲中,往大了說玩家能夠決定觸發哪一個劇情去完成哪一個任務,往小了說玩家能夠決定戰鬥時,使用法力仍是武器,以及使用什麼招式,如圖5-1所示。orm
圖5-1 《仙劍奇俠傳》遊戲的劇情與攻擊方式的選擇視頻
玩家在玩遊戲的過程當中,老是在作出一些選擇,而這些選擇直接影響了遊戲的執行路徑。玩家的選擇效果是遊戲體現出來的,可是遊戲實現這一效果的內在緣由是,遊戲代碼腳本中添加了容許玩家進行選擇的判斷語句。對象
上一節說明了,腳本中的判斷語句對於遊戲的重要性,可是列舉的例子仍是太抽象了。讀者無需爲此感到困惑,做者能夠在此處列舉些更實際的例子:玩家是否按下了遊戲視圖中的特定按鈕,或者鍵盤上的特定按鍵,玩家是否擊敗了小怪等等。這些都是遊戲腳本中須要使用判斷語句的地方。教程
在生活中,人類習慣使用「是」和「否」作出判斷,但在遊戲的腳本中,一般是使用「真」和「假」來作出判斷的。本小節將以腳本中最經常使用的if語句來講明,在腳本中作出判斷的方法。遊戲
1.if語句ip
在腳本中,if語句的書寫格式以下,表示的遊戲執行流程如圖5-2所示。遊戲開發
if(須要判斷的部分)開發
{文檔
//語句或者語句塊;
}
q if及其後面的括號「( )」是必不可少的;
q 大括號「{ }」裏包含的是語句塊,即多條語句,若是語句塊裏只有一條語句,那麼大括號「{ }」就能夠省略;
q 當從判斷部分得出的結論是true時,就執行大括號裏面的語句,不然就直接跳過大括號裏的語句;
圖5-2 if語句表示的遊戲執行流程圖
2.須要判斷的部分
這部分代碼能夠是表達式,也能夠是方法。可是不管如何,這個部分應該能夠明確的給出true或者false。true和false其實是布爾類型的數據(在第2章中曾以表格的形式列出)。也就是說,從須要判斷的部分裏,能夠獲得一個數據,而這個數據是布爾類型的。至於表達式,它既能夠是邏輯表達式,又能夠是關係表達式,如圖5-3所示。
圖5-3 判斷部分的構成和結果
3.邏輯表達式
構成邏輯表達式的邏輯運算符有3種:!(非)、&&(與)和||(或),這種表達式的運算結果如表5.1所示。
表5.1 邏輯表達式的運算結果
註釋:a和b是參與邏輯運算的兩個數據。
4.關係表達式
構成關係表達式的關係運算符有6種,它們的名稱、使用示例及功能如表5.2所示。
表5.2 關係運算符、使用示例及功能
請按照下面的步驟,完成遊戲示例的製做:
(1)爲遊戲場景添加3個遊戲對象:Directional light、Sphere和Plane。調節各遊戲對象在遊戲場景中的位置、朝向和大小,如圖5-4所示。獲得的遊戲場景和遊戲視圖,如圖5-5所示。
圖5-4 設置各遊戲對象Transform組件下的屬性
圖5-5 在Scene和Game視圖裏,查看各遊戲對象的相對位置,以及遊戲視圖效果
Sphere是玩家在遊戲中須要操做的遊戲對象,而Plane則是爲了模擬遊戲中的「地面」而存在。
(2)在Hierarchy視圖裏選中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 代碼16、17行是if語句,括號裏表示判斷的部分是一個關係表達式。由於只有17行一條語句,因此沒有使用大括號「{ }」,當關系表達式的值爲true時,執行此語句;
q 代碼23、24行是if語句,括號裏表示判斷的部分是一個方法,即Input.GetMouseButton(),做用是檢測玩家是否按下了鼠標的左鍵。一樣只有24行一條語句,因此也省略了大括號「{ }」,當方法返回的值是true時,執行此語句;
提示:Input.GetMouseButton()幫助文檔的文字描述如圖5-7所示,從中能夠看出方法會返回bool類型的數據,並且判斷的標準就是玩家是否持續按下了指定的鼠標按鍵。
圖5-7 Input.GetMouseButton()的幫助信息
(4)運行遊戲,因爲球體最初在空中,此時球體只是受到了重力的影響,所以會向下墜落,直到降落到「地面」上爲止。若是玩家此時按下鼠標左鍵的話,就會給球體施加一個向上的力,這個力比重力大,所以小球會向上運動。也就是說,當玩家按下鼠標左鍵之後,小球會向上運動。可是小球向上運動的範圍是有限的,達到了這個限度之後,就不會再繼續上升了,如圖5-8所示。
圖5-8 遊戲示例運行效果
除了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人!