読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

ResourcesからスライスしたSpriteを取得する3つの方法

単純なSingleSpriteならばResources.Load(fileName)でロード出来る。ただし、これをMultiple(スライスしたスプライト)に実行すると、一番上のスプライトがロードされてしまう。

スクリーンショット 2013-12-22 3.44.53

このスライス済みスプライトについては、Resources.LoadAllで一旦全部取得してから、必要なスプライトを取り出すといった工程が必要になる。(無駄のように思えるたが、結局単一を取り出しても分割前のテクスチャをロードしてるので誤差な気がす)

例えば下のコードでスプライト元になったテクスチャ名とスプライト名を取得すれば、スプライトが取得できる。

[unity][unity3d][unity2d]Unity2DでサポートされたSpriteをResourcesから読む方法(Resources.LoadじゃなくてLoadAllだよ編)Add Star


文字列検索を使いたくない場合は、事前にenumを作成しておく。

Resourcesフォルダからパック済みSpriteを取得する際、文字列検索ではなくenumで呼び出したい - テラシュールブログ


ちなみにResoucesに配置したスプライトはSpritePackerでパック出来ない欠点がある。なので、ドローコールを減らすにはSpritePackerに頼らずTexturePacker等でパック・スライスするといったアプローチが必要だ。

TexturePackerで一つにまとめたテクスチャをUnity 2Dのスプライトで使う - テラシュールブログ


もしどうしてもSpritePackerが使いたい場合、若干間接的だが, ResourcesにSpriteをアタッチしたプレハブを配置し 、呼び出すといった方法がある。

スクリーンショット 2013-12-22 3.56.57

下のスクリプトをインポート後、Sprite(親のテクスチャではない)を選択してSpriteToPrefabを実行すると、Spriteのアセットが作られる。

ちなみに、Spriteのみのアセットを作成し配置する事も考えたが、どうもこの手法だとパックしたテクスチャを使用しないらしい。ドローコールが元のテクスチャ単位で発行された。

ただ、この方法で生成したSprite.assetはResouces.Load(スプライト名)で呼べるので、以外と便利。

スクリーンショット 2013-12-22 4.27.23


最後にSprite.Create(texture, rect, pivot);でランタイム生成するって手もある。その際、UV情報の取得等は手前でやる必要があるので、その辺り注意。

Spriteランタイム生成についてはまた今度