在上一節的內容里,我們已經創建出了一個主角,也搭建了一個簡單的場景。
傳送門: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就好啦,請自己試着做做看吧!

完成了這些內容,我們的人物就能夠跑動並具有動畫效果了。下一節將會介紹人物的跳躍和地面檢測。如果覺得這篇文章對你有幫助,請點贊關注吧!
