Unity引擎入門——製做第一個2D遊戲(2)角色移動與動畫

在上一節的內容裏,咱們已經建立出了一個主角,也搭建了一個簡單的場景。html

傳送門:https://www.cnblogs.com/zny0222/p/12653088.html動畫

既然有了主角,要怎樣才能讓主角動起來呢?spa

這時候咱們就須要寫一些簡單的代碼,來控制咱們人物的移動。3d

如圖所示,咱們新建一個文件夾,用來保存咱們的腳本。code

在製做遊戲的過程當中,咱們應該分門別類的存放素材,這樣才能方便管理。orm

建立好文件夾以後,新建一個C#腳本,而且把腳本掛到咱們的主角上,只要拖拽過去就好啦!htm

在開始編寫代碼以前,咱們先了解一下unity當中的Input Managerblog

在左上角找到編輯 -> 項目設置 -> InputManager遊戲

咱們先從水平移動開始,在InputManager中找到「水平」,發現對應的名稱是「Horizontal」。ci

而且對應的按鍵是方向鍵的左鍵和右鍵,若是你不喜歡這樣,也能夠更改成其餘的按鍵。

讓咱們記住這些信息,而後開始編寫代碼吧!(若是你尚未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就好啦,請本身試着作作看吧!

完成了這些內容,咱們的人物就可以跑動並具備動畫效果了。下一節將會介紹人物的跳躍和地面檢測。若是以爲這篇文章對你有幫助,請點贊關注吧

相關文章
相關標籤/搜索