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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM