1. 程式人生 > >Unity引擎入門——製作第一個2D遊戲(2)角色移動與動畫

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就好啦,請自己試著做做看吧!

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