Resourcesのアトラスから動的にSpriteインスタンスを取得する方法。
概要
Resourcesから画像を読み込む際に、テクスチャに設定したSpriteを取得したいね、というお話を綴ります。
(そもそも標準でTexture2Dのプロパティかなんかで取得できるようにしておいて欲しい…。)
※検証環境は Unity 5.0.x 及び Unity 5.2.x です。
事例
こういう時。
シーンやプレハブ等どこにも参照を持っていないSpriteを動的に読み込んで取得したい場合!
サンプル
実行コード
SpriteLoader.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SpriteLoader
{
Dictionary<string, Sprite> m_dic = new Dictionary<string, Sprite>();
/**
* 読み込み関数
* @param path テクスチャのパス
* @retval 読み込んだSpriteの数(エラーの場合-1)
*/
public int Load( string path )
{
// 読み込み(Resources.LoadAllを使うのがミソ)
Object[] list = Resources.LoadAll( path, typeof(Sprite) );
// listがnullまたは空ならエラーで返す
if( list == null || list.Length == 0 ) return -1;
int i, len = list.Length;
// listを回してDictionaryに格納
for( i = 0; i < len; ++i )
{
Debug.Log( "Add : " + list[i] );
m_dic.Add( list[i].name, list[i] as Sprite );
}
return len;
}
/**
* Sprite取得関数
* @param name 取得するスプライト名
* @retval 該当のSpriteインスタンス(なければnull)
*/
public Sprite GetSprite( string name )
{
if( !m_dic.ContainsKey( name ) )
return null;
return m_dic[name];
}
public void Dispose()
{
m_dic.Clear();
m_dic = null;
}
}
解説
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SpriteLoader
{
Dictionary<string, Sprite> m_dic = new Dictionary<string, Sprite>();
/**
* 読み込み関数
* @param path テクスチャのパス
* @retval 読み込んだSpriteの数(エラーの場合-1)
*/
public int Load( string path )
{
// 読み込み(Resources.LoadAllを使うのがミソ)
Object[] list = Resources.LoadAll( path, typeof(Sprite) );
// listがnullまたは空ならエラーで返す
if( list == null || list.Length == 0 ) return -1;
int i, len = list.Length;
// listを回してDictionaryに格納
for( i = 0; i < len; ++i )
{
Debug.Log( "Add : " + list[i] );
m_dic.Add( list[i].name, list[i] as Sprite );
}
return len;
}
/**
* Sprite取得関数
* @param name 取得するスプライト名
* @retval 該当のSpriteインスタンス(なければnull)
*/
public Sprite GetSprite( string name )
{
if( !m_dic.ContainsKey( name ) )
return null;
return m_dic[name];
}
public void Dispose()
{
m_dic.Clear();
m_dic = null;
}
}
あまり難しく考えずに、 Resources.LoadAll
に テクスチャのパス
と typeof(Sprite)
を与えるのがミソ!
戻り値として、読み込まれたSpriteのインスタンスがObject配列で返ってくるよ。
あとは as Sprite
で煮るなり焼くなりお好みで!
呼び出しコード例
using UnityEngine;
using System.Collections;
public class main : MonoBehaviour
{
[SerializeField]
SpriteRenderer m_renderer = null;
void Start()
{
// 読み込みクラスのインスタンス作成
SpriteLoader sl = new SpriteLoader();
// 読み込み
sl.Load( "sample_atlas" );
// SpriteRendererに割り当て
if( m_renderer != null )
m_renderer.sprite = sl.GetSprite( "star" );
}
}
解説
読み込みクラスのインスタンスを作るよ
SpriteLoader sl = new SpriteLoader();
読み込み関数にリソースのパスを渡してね
sl.Load( "sample_atlas" );
あとは使いたい時にGetSprite!
m_renderer.sprite = sl.GetSprite( "star" );
とっても簡単ね!
Author And Source
この問題について(Resourcesのアトラスから動的にSpriteインスタンスを取得する方法。), 我々は、より多くの情報をここで見つけました https://qiita.com/sango/items/99f080a7f8c86198fca5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .