2014年1月20日月曜日

スクリプトでテクスチャを貼る~Unity

スクリプトにてオブジェクトのテクスチャを貼りかえるメモ。言語はC#。


■テクスチャの準備

2枚のテクスチャ(png)を用意する。ここでは以下の2つとする。
※Unityで扱える画像ならpng以外でも構わない。

tex_BtnDialOff.png
tex_BtnDialOn.png


これを予めAssets内のResourcesフォルダ配下に置く。Resourcesフォルダが存在していない場合は自分で作る。
今回はさらにTextureフォルダを作りその下にテクスチャを配置。
※このとき Resources配下以外の位置に置くとうまくいかないので注意。

以下のような配置になる。
Asset/Resources/Texture/tex_BtnDialOff.png


■コード実装


適当に定数定義する:

※この時のパスは暗黙で /Resources/ がついていることになっている。

    const string TEXNAME_BTNDIALOFF = "Texture/tex_BtnDialOff";
    const string TEXNAME_BTNDIALON = "Texture/tex_BtnDialOn";




リソース生成用の型宣言:

※宣言だけなので中身はまだ無い。

    Texture2D TEX_BTNDIALOFF;
    Texture2D TEX_BTNDIALON;

リソースをロードしてインスタンス化:

※この時戻り値がnullならロードに失敗しているのでチェックすると良い。
    TEX_BTNDIALOFF = Resources.Load(TEXNAME_BTNDIALOFF) as Texture2D;
    TEX_BTNDIALON = Resources.Load(TEXNAME_BTNDIALON) as Texture2D;


ジェネリックに書くとこうなる
    TEX_BTNDIALOFF = Resources.Load<Texture2D>(TEXNAME_BTNDIALOFF);
    TEX_BTNDIALON = Resources.Load<Texture2D>(TEXNAME_BTNDIALON);


テクスチャの張替え:


  GameObject go;
  go = 張り替える対象のオブジェクトインスタンスを格納しておく 
  go.renderer.material.mainTexture = TEX_BTNDIALOFF;  //tex_BtnDialOff.png を貼る
  go.renderer.material.mainTexture = TEX_BTNDIALON;  //tex_BtnDialOn.png を貼る


追記: Unity5では以下のようになった。

    go.GetComponent<Renderer>().material.mainTexture = TEX_BTNDIALOFF; //tex_BtnDialOff.png を貼る
    go.GetComponent<Renderer>().material.mainTexture = TEX_BTNDIALON; //tex_BtnDialOn.png を貼る



意外とこれはそのものズバリの情報が見つけにくかった。手順の概念はオーディオでもテクスチャでも紐付けていく感じは同じだが、 as Texture2D 等の特殊(?)表記を見つけるまでに手間どった。

0 件のコメント:

コメントを投稿