可以创建一个空的物体,代表Player,下面再创建3个空物体,代表站立,蹲下,跳起3种状态
每种状态创建一个脚本,因为每个状态里可能还有子状态,比如站立的时候,有不动和走路的区别,这些用脚本控制,
站立的时候脚本如下
using UnityEngine;
using System.Collections;
public enum AnimStatus
{
Idle,
Walk
}
public class PlayerGround : MonoBehaviour {
//上半身渲染器
public SpriteRenderer upRender;
public SpriteRenderer downRender;
public float aniSpeed = 10;
public float aniInterView = 0;
public Sprite[] idleUpSpriteArray;
public Sprite idleDown;
private int idleupCurIdx = 0;
private int idlenupLength = 0;
private float idleupidleTime = 0;
public Sprite[] walkUpSpriteArray;
private int walkupCurIdx = 0;
private int walknupLength = 0;
private float walkupidleTime = 0;
public Sprite[] walkDownSpriteArray;
private int walkDownCurIdx = 0;
private int walknDownLength = 0;
private float walkDownidleTime = 0;
public AnimStatus aniStatus = AnimStatus.Walk;
// Use this for initialization
void Start () {
aniInterView = 1.0f / aniSpeed;
idlenupLength = idleUpSpriteArray.Length;
walknupLength = walkUpSpriteArray.Length;
walknDownLength = walkDownSpriteArray.Length;
}
// Update is called once per frame
void Update () {
switch(aniStatus)
{
case AnimStatus.Idle:
idleupidleTime += Time.deltaTime;
if (idleupidleTime >= aniInterView)
{
idleupidleTime = 0;
idleupCurIdx++;
if (idleupCurIdx > idlenupLength)
idleupCurIdx = 0;
upRender.sprite = idleUpSpriteArray[idleupCurIdx];
downRender.sprite = idleDown;
}
break;
case AnimStatus.Walk:
walkupidleTime += Time.deltaTime;
if (walkupidleTime >= aniInterView)
{
walkupidleTime = 0;
walkupCurIdx++;
if (walkupCurIdx > walknupLength)
walkupCurIdx = 0;
upRender.sprite = walkUpSpriteArray[walkupCurIdx];
//downRender.sprite = idleDown;
}
walkDownidleTime += Time.deltaTime;
if (walkDownidleTime >= aniInterView)
{
walkDownidleTime = 0;
walkDownCurIdx++;
if (walkDownCurIdx > walknDownLength)
walkDownCurIdx = 0;
downRender.sprite = walkDownSpriteArray[walkDownCurIdx];
//downRender.sprite = idleDown;
}
break;
default:
break;
}
}
}
其他状态类似