C#開發Unity遊戲教程之判斷語句
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或者false。true和false實際上是布林型別的資料(在第2章中曾以表格的形式列出)。也就是說,從需要判斷的部分裡,可以得到一個資料,而這個資料是布林型別的。至於表示式,它既可以是邏輯表示式,又可以是關係表示式,如圖5-3所示。
圖5-3 判斷部分的構成和結果
3.邏輯表示式
構成邏輯表示式的邏輯運算子有3種:!(非)、&&(與)和||(或),這種表示式的運算結果如表5.1所示。
表5.1 邏輯表示式的運算結果
註釋:a和b是參與邏輯運算的兩個資料。
4.關係表示式
構成關係表示式的關係運算子有6種,它們的名稱、使用示例及功能如表5.2所示。
表5.2 關係運算子、使用示例及功能
Unity遊戲中的if語句遊戲示例
請按照下面的步驟,完成遊戲示例的製作:
(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 遊戲示例執行效果
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#開發Unity遊戲教程迴圈遍歷做出判斷及Unity遊戲示例C#Unity遊戲
- C#開發Unity遊戲教程之Unity中方法的引數C#Unity遊戲
- 判斷語句
- C#開發Unity遊戲教程之使用指令碼變數C#Unity遊戲指令碼變數
- C#開發Unity遊戲教程之遊戲物件的屬性變數C#Unity遊戲物件變數
- C#開發Unity遊戲教程之遊戲物件的行為邏輯方法C#Unity遊戲物件
- JS的判斷語句:判斷、迴圈JS
- C#開發Unity遊戲教程之Scene檢視與指令碼的使用C#Unity遊戲指令碼
- Java 判斷語句 - if…else/switchJava
- Java學習之分支結構---判斷語句:if語句和switch語句Java
- linux if語句內判斷引數Linux
- 從零開始學習C++之if判斷語句C++
- python迴圈語句判斷的使用Python
- Go的條件判斷語句的使用Go
- Nginx實現IF語句裡的AND,OR多重判斷Nginx
- makefile--if條件判斷語句的語法與使用
- 如何判斷開發語言的複雜度?複雜度
- shell程式設計中的控制判斷語句程式設計
- PHP基礎教程-19 If條件判斷語句PHP
- 肖sir__python之判斷語句4.1Python
- MySQL條件判斷IF,CASE,IFNULL語句詳解MySqlNull
- Python中if條件判斷語句怎麼用?Python
- js中 &&與和||或運算子用作判斷語句JS
- 【Unity3D開發小遊戲】《戰棋小遊戲》Unity開發教程Unity3D遊戲
- 瞭解下C# 判斷C#
- Java中的條件判斷語句-動力節點Java
- Linux判斷上一個語句是否執行成功Linux
- C#遊戲開發快速入門教程Unity5.5教程C#遊戲開發Unity
- Go語言開發面試題分享:(判斷題13道)(6)Go面試題
- 前端筆記之JavaScript(三)關於條件判斷語句、迴圈語句那點事前端筆記JavaScript
- 最簡潔的python條件判斷語句寫法Python
- python最簡潔的條件判斷語句寫法Python
- C#判斷字串是否合法C#字串
- python兩種簡潔的條件判斷語句寫法Python
- python基礎之如何用if語句判斷多個條件?Python
- day31-33 關於點選事件內的判斷語句事件
- 『忘了再學』Shell流程控制 — 34、if條件判斷語句(二)
- 『忘了再學』Shell流程控制 — 33、if條件判斷語句(一)