Resources.LoadやassetBundle.LoadAssetでObjectとして読み込んだスプライト画像をSpriteに変換、型キャストしようとしてハマった。
Object obj = Resources.Load(dir_name + “/” + filename);
Sprite sobj = obj as Sprite;
これでいけるかと思ったらダメだった。よくよく考えたら当然。
Resources.Loadで読み込んだ場合、ObjectにはTexture 2Dとして格納されるから。
Texture 2Dなので当然そのままSpriteには変換できない。
なので以下の手順が必要。
Object obj = Resources.Load(dir_name + “/” + filename);
System.Type type = obj.GetType();
if (type == typeof(UnityEngine.Texture2D)) {
Texture2D tex = obj as Texture2D;
Sprite newSprite = Sprite.Create(obj as Texture2D, new Rect(0f, 0f, tex.width, tex.height), Vector2.zero);
Objectがテクスチャーなら、それからSpriteを作るよって処理。
つまるところ、素直にResources.Load<Sprite>しとくのがいいんじゃないってお話。