前言
想让一个人物能在画面上依指示向四个方向(上、下、左、右)走动,如下图:

图檔制作
为了能上下左右的走动,必须先准备四个方向的动画。下图来自FeralFantom’s Entry。

这是一张 576 x 256 像素的图,把它导入项目的 Assets/Resources/man 中,然后用 Sprite Editor 切成每张 64 x 64 像素的图片。

每个方向有九张,一共有 36 张。

如上图,点图右边的三角形部分,可展开如下图:

创建 Sprite
依次单击〝GameObject → 2D Object → Sprite〞创建一个空的 Sprite 对象,并命名为〝Man〞,然后为此对象添加一个脚本 (ManController)。
ManController 的设计
完整代码如下:
public class ManController : MonoBehaviour {
public float speed; // 移动的速度
public float framesPerSec; // 一秒钟显示的动画张数
public int direction; // 人物的方向
private SpriteRenderer m_spriteRender;
private Sprite[] arySprite;
private int m_nLength; //一组动画的张数
private int m_nStart; //目前方向开始的编号
//-----------------------------------------------------------
void Start ()
{
m_spriteRender = GetComponent<SpriteRenderer>();
arySprite = Resources.LoadAll<Sprite>("man/man");
m_nLength = arySprite.Length / 4;
SetDirection(direction);
}
//-----------------------------------------------------------
void Update ()
{
int index = (int)(Time.time * framesPerSec) % m_nLength;
m_spriteRender.sprite = arySprite[m_nStart + index];
Vector3 te = transform.position;
float dx = speed * Time.deltaTime;
switch (direction)
{
case 0: te.y += dx; break;
case 1: te.x -= dx; break;
case 2: te.y -= dx; break;
case 3: te.x += dx; break;
}
transform.position = te;
}
//-----------------------------------------------------------
public void SetDirection(int value)
{
direction = value;
m_nStart = m_nLength * direction;
}
}
m_nLength 变量是纪录一组动画的张数。LoadAll 会全部加载到 arySprite 中,因为有四个方向,所以平均为 arySprite.Length / 4。
SetDirection() 是控制行走的方向,value = 0 表向上,1 表向左,2 表向下,3 表向右。m_nStart 表示这个方向的动画最小的编号值,即 0, 9, 18, 27。
在 Update() 中,根据 framesPerSec 来更换图片,然后根据 speed 来更改位置,当方向是上或下时,更改 y 值,左或右则更改 x 值。
外部的控制
如下图,一秒位移 0.2 单位、九张图,起始方向为向上。

四个 button 的点击就对应到 SetDirection()。

结语
事实上,这张图的设计,最左边的那一格是站立的图案,如果加在走动的动画中,播放时会觉得怪怪的,理论上要扣除,所以 Update() 中要如下修改:
int index = (int)(Time.time * framesPerSec) % (m_nLength-1);
m_spriteRender.sprite = arySprite[m_nStart + 1 + index];
本文详细介绍了如何在Unity中使用2D Sprite动画实现角色的四个方向移动。通过分解图片资源,创建Sprite对象并编写ManController脚本来控制角色动画和移动速度,实现了角色在不同方向上的流畅移动。
4640

被折叠的 条评论
为什么被折叠?



