Unity 2D游戏开发: 添加 Sprite 2D角色

[!NOTE] 需要下载 Unity 2D Sprite 相關包

一導入角色图片

二編輯图片屬性

檢查器

纹理類型： Sprite (2D和UI)

Sprite 模式: 多个

每單位像素數：32
...

打開 Sprite Editor 把图片切割爲同一大小的图片序列

三新建精灵對象

2D物理 -> 动态精灵

四新建動畫

[!NOTE] 可以选中切割好的序列图->新建動畫

新建 Animator 動畫

五新建動畫控制器

新建 Animatoin controller 動畫控制器

指定 Animatoin controller 到遊戲對象 animator 組件

Any State：狀態管理，可以根據 int 参数的值管理多个動畫播放

動畫过渡有延迟的话可以关闭过渡箭头中的所有时间选项:
檢查器 -> Setting ->
全部爲 0, 全部取消勾選
中斷源 : `Current State Then Next State

六新建腳本控制狀態

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
// 移动速度
public float moveSpeed = 3.0f;

private Animator animator;
private readonly string animationState = "playerState";
private Vector2 moveMent = new();
private new Rigidbody2D rigidbody2D;

enum PlayerState
{
idle = 0,
up = 1,
down = 2,
left = 3,
right = 4
}

// Start is called before the first frame update
void Start()
{
animator = GetComponent<Animator>();
rigidbody2D = GetComponent<Rigidbody2D>();
}

// Update is called once per frame
void Update()
{UpdateState();}

private void FixedUpdate()
{Move();}

// 角色移动
private void Move()
{
moveMent.x = Input.GetAxis("Horizontal");
moveMent.y = Input.GetAxis("Vertical");
moveMent.Normalize();

// 刚体线性速度
rigidbody2D.velocity = moveMent * moveSpeed;
Debug.Log(rigidbody2D.velocity);
}

// 更新状态
private void UpdateState()
{ if (moveMent.x > 0) {
animator.SetInteger(animationState, (int)PlayerStates.right);
} else if (moveMent.x < 0) {
animator.SetInteger(animationState, (int)PlayerStates.left);
} else if (moveMent.y > 0) {
animator.SetInteger(animationState, (int)PlayerStates.up);
} else if (moveMent.y < 0) {
animator.SetInteger(animationState, (int)PlayerStates.down);
} else {
animator.SetInteger(animationState, (int)PlayerStates.idle);
}
}
}