※中肯辭典
(註:有別於官方文件上的嚴謹說明,在此以工程師的角度來簡短說明此元素的特質與使用時機。)
讓遊戲變得可以玩的關鍵之一,結合上一篇教的玩家Input指令,達成讓物件移動、縮放等動作。
在有了前幾篇的概念後,我們今天要來做一點比較有感的事情(?),那就是讓角色在遊玩中實際動起來!
首先,我們先來看一下每個物件都會有的基本元素:Transfrom
Transfrom裡面的要素很簡單:Position(位置), Rotation(旋轉), Scale(規模)
我們在編輯階段可以直接透過改數字來改變外觀,但是當這款遊戲實際匯出成PC遊戲、手機App時該怎麼辦呢?
這時,我們就要結合上次提到的玩家Input指令。
首先,在這個物件類別底下新增一個Script,然後加入這些程式碼:
要進入到物件的Tansform類別,使用的方法就是this.gameObject.tranform
●移動位置 Position
Position的單位是三維向量Vector3, 所以我們在更動它的值時就要給一個Vector3,
宣告的方式為 new vector3( 值, 值, 值);
在這裡我用了一個技巧:宣告一個公開的全域變數叫做speed。
public float speed;
用一般的程式概念去想,宣告一個浮點數只要float speed;就好了,那這個public是什麼呢?
跟class裡的public原理類似,public的其中一個用途是讓其他script可以取用這個變數。
使用方法:
我們要在”GameControl”這個檔案裡讀取小雞的HP值,要在一開始(Line 7)引用Chicken這個檔案,然後給予它另一個名字,在這裡就取為player。接下來若想拿出chicken內部任何具有public性質的變數、函式,只要以player.作為開頭,就能順利使用了!
除了上述特性外,public的另一個好處是:可以在inspector裡直接更動數值。
在Script這個component裡面可以直接改數字!
所以,
this.gameObject.transform.position += new Vector3(–speed, 0f, 0f);
就是讓物件向左移動,因為我們給了負x方向的量。
this.gameObject.transform.position += new Vector3(speed, 0f, 0f);
則是向左移動。
除此之外,需要特別注意到一件事:
我在這裡用的是GetKey,而不是GetKeyDown。
這樣才可以在按鍵被按著時不斷的更改物件的位置,而不是按多久都只觸發一次,讓畫面看起來一格一格的,不流暢。
●縮放物體 Scale
和Position的概念相似,更動物件規模的程式碼為:
this.gameObject.transform.localScale
localScale能接受的參數一樣是Vector3,所以我使用的方法和改變Position的幾乎一樣XD。
而我在這裡的輸入方式是使用滑鼠按鍵,
Input.GetMouseButton(0) 是滑鼠左鍵
Input.GetMouseButton(1) 是滑鼠右鍵
如果上述的程式碼都有確實完成的話,就能進入Play模式來測試成果了!
記得先注意一下自己的public變數有沒有把值填好,不然都是0的話是看不出東西的XD
我在這裡設的值是0.05,大家可以根據自己的畫面、物件大小來調整,進入Play模式後也可以繼續改!
成功的結果應該會長這樣:
讚
LikeLike