4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unityでスプライトアニメーションのスプライトだけを差し替える

Posted at

例えばプレイヤーの衣装を変えて同じ動きをさせたいときなどに、Animatorで別ステートを用意するのは何かと不便です。

そこで、ちょっと強引ではありますが、スプライトアニメーション後に別のスプライトに差し替えることを試してみます。

AnimSpriteChange.cs
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

namespace animSprite{
	[System.Serializable]
	public class ReplaceInfo{
		public string fromName;
		public string toName;
	}

	[RequireComponent(typeof(SpriteRenderer))]
	public class AnimSpriteChange : MonoBehaviour {
		[SerializeField] string spriteResourcePath="";
		[SerializeField] ReplaceInfo[] replaceInfo;
		SpriteRenderer sr;
		Sprite[] resSprArr;
		Dictionary<string,string> repDic;

		void Start () {
			prepare ();
		}

		void LateUpdate () {
			sprChange ();
		}

		void prepare(){
			Resources.LoadAll<Sprite>(spriteResourcePath);
			sr = GetComponent<SpriteRenderer> ();
			resSprArr = Resources.FindObjectsOfTypeAll<Sprite> ();
			repDic = new Dictionary<string, string> ();
			foreach (ReplaceInfo info in replaceInfo) {
				repDic.Add (info.fromName, info.toName);
			}
		}

		void sprChange(){
			string sprName = sr.sprite.name;
			int pos = sprName.LastIndexOf ('_');
			if (pos >= 0) {
				string pre = sprName.Substring (0, pos);
				if (repDic.ContainsKey (pre)) {
					string post = sprName.Substring (pos);
					Sprite retSpr = resSprArr.FirstOrDefault(e=>e.name.Equals(repDic [pre] + post));
					if (retSpr != null) {
						sr.sprite = retSpr;
					}
				}
			}
		}
	}
} // namespace animSprite

スクリーンショット 2017-11-28 12.00.14.png

スプライトアニメーションのあるGameObjectにアタッチして実行すると、アニメーション後 fromName_xx から toName_xx にスプライトを差し替えます。
差し替え後のスプライトはResoueceフォルダの下に入れる必要があります。

スクリーンショット 2017-11-28 11.26.57.png

スクリーンショット 2017-11-28 11.27.10.png

OnAnimatorMove() で変化があった時だけ sprChange() を呼ぶようにしていたのですが、チラつくようでしたので LateUpdate() 毎に更新しています

スクリーンショット 2017-11-28 11.42.38.png

スクリーンショット 2017-11-28 11.42.54.png

スプライトアニメーションの作り方は こちら

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?