Unity引擎入門——製作第一個2D遊戲(2)角色移動與動畫
在上一節的內容裡,我們已經創建出了一個主角,也搭建了一個簡單的場景。
傳送門:https://www.cnblogs.com/zny0222/p/12653088.html
既然有了主角,要怎樣才能讓主角動起來呢?
這時候我們就需要寫一些簡單的程式碼,來控制我們人物的移動。
如圖所示,我們新建一個資料夾,用來儲存我們的指令碼。
在製作遊戲的過程中,我們應該分門別類的存放素材,這樣才能方便管理。
建立好資料夾之後,新建一個C#指令碼,並且把指令碼掛到我們的主角上,只要拖拽過去就好啦!
在開始編寫程式碼之前,我們先了解一下unity當中的Input Manager。
在左上角找到編輯 -> 專案設定 -> InputManager
我們先從水平移動開始,在InputManager中找到“水平”,發現對應的名稱是“Horizontal”。
並且對應的按鍵是方向鍵的左鍵和右鍵,如果你不喜歡這樣,也可以更改為其他的按鍵。
讓我們記住這些資訊,然後開始編寫程式碼吧!(如果你還沒有vs,請先下載安裝vs)
雙擊我們的指令碼,unity會自動在vs當中開啟指令碼。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyPlayer : MonoBehaviour { public Rigidbody2D Pl; public float speed; void Start() { } void Update() { Move(); } void Move() { float horizontalmove = Input.GetAxisRaw("Horizontal"); // 從 input manager 接收“水平”輸入的值。 Pl.velocity = new Vector2(horizontalmove * speed, Pl.velocity.y); if (horizontalmove != 0) { transform.localScale = new Vector3(horizontalmove, 1, 1); // 控制角色轉身 } } }
可以看到,我們使用了2個變數。第一個變數Pl,用來獲取角色的剛體。第二個變數speed,用來控制角色行走的速度。為什麼都定義為public的變數呢?
這是因為,定義為public的變數,可以直接在unity引擎中看到。我們可以直接把元件拖拽上去,或是直接在unity介面修改變數的數值。這樣做可以便於我們日後的改動。當然,不是所有變數都應該定義為public哦。
寫好了這些程式碼之後(程式碼在儲存後才會生效,不要忘了 ctrl + s 哦),主角就可以橫向移動了!
如果你的主角在走路時摔倒了,只要在剛體的設定中,將凍結旋轉Z軸勾上就好啦。
還記得在上一節裡,我們製作主角的碰撞時,使用的是兩個碰撞器。這時候就體現出效果啦!因為瓦片地圖的有些地方可能並不是那麼精確,如果只用一個方形的碰撞器,方形碰撞器的直角可能會被瓦片地圖上的小突起給卡住。為了避免這個問題,我們在主角的下半部分採用圓形的碰撞器,這樣就不會被卡住了。
做到這裡,我們的人物還沒有任何動作,只能橫向的平移。接下來,讓我們一起給主角新增動畫效果吧!
public Rigidbody2D Pl; public float speed; public Animator anima;
首先,我們要新增一個動畫器的變數,我給它起名叫anima,你也可以取其他名字。
然後給主角新增一個動畫器,並拖拽到我們的指令碼上。接下來就可以開始製作了。
點選 視窗 -> 動畫 -> 動畫 ,並找到素材包中的動畫素材。
完成了以上步驟,我們就擁有站立和跑動兩個動畫了。那麼什麼時候使用這兩個動畫呢?
點選 視窗 -> 動畫 -> 動畫器,並完成以下操作。
確保站立的動畫是預設狀態,在站立和跑動這兩個動畫之間建立過渡。新增一個float引數,用來判斷站立和跑動之間的轉換。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyPlayer : MonoBehaviour { public Rigidbody2D Pl; public float speed; public Animator anima; void Start() { } void Update() { Move(); } void Move() { float horizontalmove = Input.GetAxisRaw("Horizontal"); Pl.velocity = new Vector2(horizontalmove * speed, Pl.velocity.y); if (horizontalmove != 0) { transform.localScale = new Vector3(horizontalmove, 1, 1); } anima.SetFloat("running", Mathf.Abs(horizontalmove)); }
}
添加了倒數第3行的程式碼,這樣就可以讓我們的float變數獲取角色移動的值了。
點選過渡箭頭,取消退出時間,並新增一個條件,即為我們剛才設定的那個變數。當我們的float變數running小於0.1時,我們就從跑動狀態回到站立狀態。
要從站立狀態進入跑步狀態,只要點選另一個過渡箭頭,把小於0.1改為大於0就好啦,請自己試著做做看吧!
完成了這些內容,我們的人物就能夠跑動並具有動畫效果了。下一節將會介紹人物的跳躍和地面檢測。如果覺得這篇文章對你有幫助,請點贊關注