【Unity】MultiModeなSpriteの参照を取得し直す
問題
MultiModeなSpriteの参照をGameObject
だかScriptableObject
が持っているとき。
画像の変更か何かがあってSliceし直すと、Spriteへの参照がMissingになる。これをなんとかする。
理屈
Spriteが生成し直されるのはどうしようもない(多分)ので、Textureと位置からSpriteを再取得する。
雑コード
だいたいこんなん。
Unity5.3.2p3
public class Hoge : MonoBehaviour { #if UNITY_EDITOR [SerializeField] Texture texture; [SerializeField] Rect spriteRect; #endif [SerializeField] Sprite sprite; #if UNITY_EDITOR void OnValidate() { if (!texture) { return; } if (sprite) { return; } var path = AssetDatabase.GetAssetPath(texture); var sprites = AssetDatabase.LoadAllAssetRepresentationsAtPath(path); foreach (Sprite sprite in sprites) { if (spriteRect == sprite.rect) { this.sprite = sprite; EditorUtility.SetDirty(this); break; } } } #endif }
用途
マップチップなんかに使えるはず。
- マップチップ画像はMutliSpriteで作成する。
- マップチップ画像はあとでチップが追加されたりするので、開発中にSliceをやり直す機会が発生する。