前提:这里使用的是Unity内置的Animator制作2D序列帧动画,不介绍制作过程。
在用Unity制作2D游戏时,如果动画是用图片序列帧来做,那么有的游戏一个角色动作通常会有八个方向,所以一套动作的图片资源是非常多的。
有些角色动作如向左走和向右走的图片是左右镜像对称的,因此可以只用向左走反转Y轴坐标180度来表示向右走的动作。
如此算来,可以省去8个方向中的3个有镜像对称的图片资源。也就是只用5个方向,其它3个通过反转可以得到,又省了不少资源,快哉快哉!
具体实现方式:
我有一个官吏角色,左右走2个方向的套图,也可以根据此来扩展到8个方向的。
首先是使用全套方向图制作的动画(使用全部方向图片资源)
图片图集如下:
代码:
using UnityEngine;
using System.Collections;
public class RunTest : MonoBehaviour {
private Animator animator;
void Awake() {
animator = transform.GetComponent<Animator>();
}
void Update() {
if (animator == null)
return;
//按下键盘A键向左走
if (Input.GetKeyDown(KeyCode.A)) {
this.RunRightDir(false);
}
//按下键盘D键向右走
if (Input.GetKeyDown(KeyCode.D)) {
this.RunRightDir(true);
}
}
private void RunRightDir(bool rightBool) {
animator.SetBool("right", rightBool);
animator.SetBool("left", !rightBool);
}
}
挂上脚本后,按“A”“D”键可实现左右走动动作。
接下来使用右方向来反转模拟向左走。实现方式:
图集资源:
代码:
using UnityEngine;
using System.Collections;
public class RunTest : MonoBehaviour {
private Animator animator;
void Awake() {
animator = transform.GetComponent<Animator>();
}
void Update() {
if (animator == null)
return;
//按下键盘A键向左走
if (Input.GetKeyDown(KeyCode.A)) {
//this.RunRightDir(false);
this.RunRightDir01(false);
}
//按下键盘D键向右走
if (Input.GetKeyDown(KeyCode.D)) {
//this.RunRightDir(true);
this.RunRightDir01(true);
}
}
private void RunRightDir(bool rightBool) {
animator.SetBool("right", rightBool);
animator.SetBool("left", !rightBool);
}
private void RunRightDir01(bool rightBool) {
if (rightBool)
{
transform.rotation = Quaternion.Euler(0,0,0);
}
else {
transform.rotation = Quaternion.Euler(0, -180, 0);
}
}
}
只是原来的代码加多了一个RunRightDir01(bool rightBool)方法,达到的效果一样,图片资源省了一半!快哉!