Unity 角色移动2D动画模块
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(SpriteRenderer))]
public class SpriteAnimator : MonoBehaviour
{
private SpriteRenderer spriteRenderer;
[SerializeField]
private Sprite idleSprite;
[SerializeField]
private Sprite[] moveUpSprites;
[SerializeField]
private Sprite[] moveDownSprites;
[SerializeField]
private Sprite[] moveLeftSprites;
[SerializeField]
private Sprite[] moveRightSprites;
private Vector2 lastDirection;
[HideInInspector]
public Vector2 direction;
private int currentSpriteIndex = 0;
private float timePlayedForCurrentSpriteFrame;
[SerializeField]
private float timeFor1Frame = 0.5f;
private void Awake()
{
spriteRenderer = GetComponent<SpriteRenderer>();
}
void Start()
{
TypeSingleton.Get<PlayerController>().OnDirectionChanged += SetDirection;
spriteRenderer.sprite = idleSprite;
}
// Update is called once per frame
void Update()
{
if (direction.Equals(Vector2.zero)) PlayIdle();
else if(direction.Equals(Vector2.up)) PlayMove(moveUpSprites);
else if(direction.Equals(Vector2.down)) PlayMove(moveDownSprites);
else if(direction.Equals(Vector2.left)) PlayMove(moveLeftSprites);
else if (direction.Equals(Vector2.right)) PlayMove(moveRightSprites);
lastDirection = direction;
}
private void PlayMove(Sprite[] spritesList)
{
if (timePlayedForCurrentSpriteFrame >= timeFor1Frame)
{
timePlayedForCurrentSpriteFrame = 0;
currentSpriteIndex++;
if(currentSpriteIndex == spritesList.Length)
currentSpriteIndex = 0;
}
spriteRenderer.sprite = spritesList[currentSpriteIndex];
timePlayedForCurrentSpriteFrame += Time.deltaTime;
}
private void PlayIdle()
{
if (lastDirection.Equals(Vector2.up)) spriteRenderer.sprite = moveUpSprites[0];
else if (lastDirection.Equals(Vector2.down)) spriteRenderer.sprite = moveDownSprites[0];
else if (lastDirection.Equals(Vector2.left)) spriteRenderer.sprite = moveLeftSprites[0];
else if (lastDirection.Equals(Vector2.right)) spriteRenderer.sprite = moveRightSprites[0];
}
public void SetDirection(Vector2 direction)
{
this.direction = direction;
if(lastDirection != direction)
currentSpriteIndex = 0;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!