ウディタ?
「WOLF RPGエディター」
RPGツクール的なゲーム制作ツール。
本来はWOLF RPGエディタ用にキャラクタ画像を作るのだけれど、この画像をUnityのゲームに持って来れば便利だなと思ったのでトライ。
画像を準備する
アセットに登録する
Resourcesディレクトリにユニット用のUnitsディレクトリを作成する。
Spriteは後で分割するので画像タイプをMultipleにしておく。
ドット絵なのでFilterはPointのほうがそれっぽく表示される。
スプライトを分割する
SpriteEditor→Sliceで6*4に分割する。
これでSpriteは以下のように分割される。なお分割されたスプライトは左上をelfsan_0としてから右方向に番号が振られる。
アニメーションを作成する
SpriteRendererとAnimatorから成るオブジェクトを用意する。
アニメーションを作る。
これが各向きでの動作のひな形なので、elfsan_0~2の前向き三種類のみで作成する。
スクリプトを用意する
DirectionalSpriteという名のスクリプトを作成する。
あとはさっきのひな形Animationのスプライト名に対して、方向に応じたインデックスを与えるスクリプトを書いて完了。
DirectionalSprite.cs
using UnityEngine;
public class DirectionalSprite : MonoBehaviour {
public enum Directions { N = 18, S = 0, E = 12, W = 6, NW = 15, NE = 21, SW = 3, SE = 9}
//
public string Name;
public SpriteRenderer SpriteRenderer;
public Directions Direction;
//
private string _lastSpriteName = "";
private Sprite[] _subsprites;
//
void Start () {
SetName(Name);
}
void LateUpdate() {
// 現在のスプライトを得る
string name = SpriteRenderer.sprite.name;
// スプライトが変化したか
if (_lastSpriteName != name) {
int idx = name.IndexOf('_');
if (idx >= 0) {
int id = int.Parse(name.Substring(idx + 1)) + (int)(Direction);
//
SpriteRenderer.sprite = _subsprites[id];
}
_lastSpriteName = SpriteRenderer.sprite.name;
}
}
//
public void SetName(string name) {
Name = name;
_subsprites = Resources.LoadAll<Sprite>("Units/" + name);
}
}