6
6

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.

Resourcesのアトラスから動的にSpriteインスタンスを取得する方法。

Posted at

概要

Resourcesから画像を読み込む際に、テクスチャに設定したSpriteを取得したいね、というお話を綴ります。

(そもそも標準でTexture2Dのプロパティかなんかで取得できるようにしておいて欲しい…。)

※検証環境は Unity 5.0.x 及び Unity 5.2.x です。

事例

こういう時。
ss_81.png
シーンやプレハブ等どこにも参照を持っていない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;
	}
}

解説

あまり難しく考えずに、 Resources.LoadAllテクスチャのパスtypeof(Sprite) を与えるのがミソ!

戻り値として、読み込まれたSpriteのインスタンスがObject配列で返ってくるよ。

あとは as Sprite で煮るなり焼くなりお好みで!

呼び出しコード例

main.cs
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" );
	}
}

解説

  1. 読み込みクラスのインスタンスを作るよ
    SpriteLoader sl = new SpriteLoader();

  2. 読み込み関数にリソースのパスを渡してね
    sl.Load( "sample_atlas" );

  3. あとは使いたい時にGetSprite!
    m_renderer.sprite = sl.GetSprite( "star" );

とっても簡単ね!

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?