出現在指令碼中的方法,無論是在定義的時候,還是使用的時候,後面都跟著一對括號「( )」,有意義嗎?看起來最多也就是起個快速識別方法的作用吧。既然c#的語法規定方法就應該這麼寫,肯定是有一定道理的。如果是上公升到戰略意義的道理,連作者也不是很明白,但是作者知道這對括號裡可以新增「引數」。
要說明引數的作用,就必須從方法說起。方法可以處理變數中的資料,進而影響遊戲物件的行為邏輯,這是本章前面一直在強調的。但是就前面指令碼中一直在使用的,方法的括號裡沒有引數的情況而言,方法總是在處理特定變數裡的資料。例如,下面是前面乙個示例中定義的方法:
這個方法的括號裡沒有引數,它處理的資料總是變數number1和number2裡的資料。既然這只是乙個用於求和的方法,沒有必要指定它只計算變數number1和number2裡的資料和。如果有其它變數的資料也要求和的話,就只能再定義乙個方法了。為方法引入引數就可以很好的解決這類的問題。
開發者定義了乙個方法,可以控制乙個遊戲物件的邏輯行為。如果其它物件也需要做出與之類似的行為,就沒有必要再定義乙個方法了。例如下面的遊戲示例所做的那樣。
(1)為遊戲場景新增cube、cylinder和directional light,這3個遊戲物件。前兩者將作為指令碼方法控制行為邏輯的遊戲物件,最後乙個遊戲物件負責遊戲場景的照明。合理設定它們各自的位置,得到的scene和game檢視,如圖4-8所示。
圖4-8 在scene和game檢視裡,檢視各物件的相對位置,以及遊戲檢視的效果
(2
(3)將指令碼myscript賦予main camera物件,並在後者的inspector檢視裡,設定my script元件裡的my cube和my cylinder屬性為遊戲場景中的cube和cylinder物件,屬性的設定方法是,直接拖動hierarchy檢視裡的cube和cylinder物件到對應的屬性框中即可,如圖4-9所示。
圖4-9 設定my script元件下的屬性
(4)執行遊戲,在game檢視裡,一直按下滑鼠左鍵,讀者會看到立方體物件在原地滾動。如果一直按下滑鼠右鍵,那麼原地滾動的就成了圓柱體。如果同時按住滑鼠左鍵和右鍵,立方體和圓柱體就會同時滾動了,如圖4-10所示。
圖4-10 遊戲效果展示圖
(5)遊戲中,控制遊戲物件滾動的方法是rotateobject(),它是乙個需要傳入引數的方法。正是因為需要傳入引數,所以它才能被用於遊戲場景中,所有遊戲物件滾動的行為邏輯控制中。而不只是單獨的控制乙個物件的行為邏輯。
指令碼中的方法,對於遊戲物件而言,意義在於它可以控制遊戲物件的行為邏輯,這是方法對於遊戲效果的意義。方法對於指令碼**的書寫,同樣具有意義,那就是它可以幫助減少**的重複書寫。
本章在介紹方法時,曾將方法與變數做了簡單比較,對比的過程中說過,方法也可以看做是乙個儲存單元,只不過裡面儲存的不是資料,而是一條或者多條語句。就這個意義而言,可以認為如果在方法中放入多條會在指令碼中被重複使用的語句,並使用方法名作為這些語句的指代。那麼,指令碼中所有需要書寫這多行**的地方,都可以使用方法名(即方法的呼叫)來代替。例如,指令碼中有下面的**:
指令碼中有3個變數:number1、number2和number3。為了計算number1與number2的平方和,**中使用了12~18行,一共7行的**。同樣的,為了計算number1與number3的平方和,**中使用了20~26行,一共7行的**。如果在指令碼中定義方法的話,就不用書寫這麼多類似的**了,使用定義了方法的指令碼以後,指令碼中的**如下:
相比於之前使用的14行**,這裡只使用了5行**!但是兩個指令碼實現的效果是一樣的,如圖4-11所示。
圖4-11 console檢視輸出了兩個數平方和的計算結果
在unity中編寫指令碼,讀者可以自己編寫方法,也可以使用unity編寫的方法。一般情況下,指令碼**中會用到很多unity編寫的方法。而自己編寫方法,通常是為了減少**的重複書寫,或者將unity的方法組織起來,實現新的功能。對於unity編寫的方法,不會使用的時候,讀者一定要記得去幫助文件裡查閱,查閱的步驟本章前面的部分已經說明了。
本節遊戲示例編寫的指令碼中,完全使用unity編寫的方法,實現玩家通過鍵盤控制遊戲物件上下左右移動的效果,具體的遊戲製作過程如下:
(1)為遊戲場景新增兩個遊戲物件:sphere和directional light。前者就是本遊戲要控制的遊戲物件,後者負責遊戲檢視的光照效果。調節遊戲檢視中各物件的位置,使得sphere物件位於game檢視的**,如圖4-12所示。
圖4-12 在scene和game檢視裡,檢視各遊戲物件的相對位置,以及遊戲檢視的顯示效果
(2)為遊戲專案匯入4個,它們將被用於在遊戲檢視裡表示小球的運動方向,本遊戲匯入的4個如圖4-13所示。
圖4-13 為遊戲專案匯入的4個表示方向的
(3)在project檢視裡,新建乙個指令碼,並命名為myscript,開啟此指令碼,並新增下面的**:
將此指令碼賦予main camera物件,並在後者的inspector檢視裡設定my script元件下的屬性,如圖4-14所示。
圖4-14 設定元件下各屬性
(4)指令碼中使用的unity方法,這裡會做簡要說明,如果讀者對各方向的詳細使用說明感興趣,可以自己查閱幫助文件。
圖4-15 inputmanager對話方塊
(5)執行遊戲,小球處於檢視的**,按下鍵盤上的方向鍵,小球就會朝著指定的方向移動,並且遊戲檢視的左上角還使用顯示著小球的移動方向,並且的顯示與否,與玩家是否按下了方向鍵有關。如果玩家都沒有按下方向鍵,那麼就不會有方向顯示,遊戲的執行效果如圖4-16所示。
圖4-16 處於靜止狀態和運動狀態的小球,以及顯示在遊戲檢視左上角的方向
方法,從外在形式上來看,就是由多條語句組成的。考慮到讀者對方法的理解,本章將它與變數做了對比,因為它們確實有不少相似的地方。方法對於遊戲的真正意義在於,方法會將屬性裡的資料做特定的處理,並將處理的結果應用到遊戲物件上。但是它也有其它用途,例如減少**的重複書寫。在學會了方法的編寫以後,又帶讀者認識了unity自定義的方法,以及需要傳入引數的方法。最後,本章同樣以乙個遊戲示例收尾。因為示例中使用了不少unity自定義的方法,讀者看來不得不去查閱下幫助文件才行,至於查閱的步驟,本章也介紹了。
C 開發Unity遊戲教程之遊戲物件的屬性變數
通過對上一章的學習,讀者應該了解到了,遊戲物件上的屬性與指令碼中的變數,建立聯絡的方式就是將指令碼賦予遊戲物件。上一章只是簡單的介紹了指令碼中的變數,讀者一定不過癮,現在好了,作者將使用一整章的篇幅介紹變數與屬性。在unity中,遊戲場景中遊戲物件的屬性,可以在inspector檢視裡檢視,想看哪個...
C 開發Unity遊戲教程之使用指令碼變數
本章前面說了那麼多關於變數的知識,那麼在指令碼中要如何編寫關於變數的 有規章可循嗎?答案是有的。本節會依次講解變數的宣告 初始化 賦值和運算。要想在指令碼中使用變數,就必須先宣告 declare 這就意味著,需要先告訴unity,有這樣乙個變數存在,然後才可以在unity中使用這個變數。那麼,該如何...
C 開發Unity遊戲教程之判斷語句
玩家在遊戲時,無時無刻不在通過判斷做出選擇。例如,正是因為玩家做出的選擇不同,才導致遊戲朝著不同的劇情發展,因此乙個玩家可以對乙個遊戲百玩不厭!既然提到了這一點,藉此機會本章就來說明,在指令碼中實現遊戲為玩家提供更多選擇的方法。圖5 1 仙劍奇俠傳 遊戲的劇情與攻擊方式的選擇 玩家在玩遊戲的過程中,...