ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Unity】備忘録#2 オブジェクトの色や画像表示について

 今回はUnityにおけるオブジェクトの色の情報を管理しているMaterialについてです。

 オブジェクトの色変更のやり方や任意の画像をオブジェクトに表示させる方法についてまとめていきます。


■色について

  1. オブジェクトのRenderer(Spriteの場合はSpriteRenderer)を取得する
  2. 以下のように取得したRendererのMaterialからColorを取得できるので値を再設定する

(float値で0f〜1fの値を取るため0〜255で表現するにはx/255fという形で記述する)

// Spriteの場合はGetComponent<SpriteRenderer>
Renderer renderer = this.GetComponent<Renderer> ();

Color color = renderer.material.color;
color.r = 1.0f;  // RGBのR(赤)値
color.g = 1.0f; // RGBのG(緑)値
color.b = 1.0f; // RGBのB(青)値
color.a = 1.0f;// RGBのアルファ値(透明度の値)

renderer.material.color = color; // 変更した色情報に変更

 ちなみにColorクラスのr, g, b, aの各値はfloatの0f〜1fの値しか取ることができない仕様となっているため、Unity画面で設定する0〜255の値で設定したい場合はx/255fという形で記述する必要があります。

// 例
color.r = 120/255f;


■画像表示について
 Unityの画面で直接画像をオブジェクトにドラッグさせて表示することもできますが、スクリプトから設定する方法を紹介します。

  1. 設定したい画像のTextureを準備しておく(この方法は後日)
  2. オブジェクトのRenderer(Spriteの場合はSpriteRenderer)を取得する
  3. 以下のように取得したRendererのMaterialのmainTextureに準備したTextureを設定する
// 設定したい画像のTextureを準備
Texture texture = hogehoge;

// Spriteの場合はGetComponent<SpriteRenderer>
Renderer renderer = this.GetComponent<Renderer> ();

renderer.material.mainTexture = texture; // 画像を設定

 この方法でオブジェクトの色変更や画像の張り付けを行うことができます。

【Unity】備忘録#1 クリックしたオブジェクトの取得について(3Dと2D)

検索すればすぐ出て来ることですが、自分の中での整理+メモ目的で。

まず前提として「3Dと2Dで記述方法が異なる」ので注意が必要です。


■3Dの場合

1:クリックしたいオブジェクトにBox Colliderコンポーネントを追加する

2:以下のスクリプトの記述で取得可能になる

// 左クリックしたオブジェクトを取得する関数(3D)
public GameObject getClickObject() {
  GameObject result = null;
  // 左クリックされた場所のオブジェクトを取得
  if(Input.GetMouseButtonDown(0)) {
   Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
   RaycastHit hit = new RaycastHit();
   if (Physics.Raycast(ray, out hit)){
     result = hit.collider.gameObject;
   }
 }
 return result;
}

■2Dの場合

1:クリックしたいオブジェクトにBox Collider 2Dコンポーネントを追加する

2:以下のスクリプトの記述で取得可能になる

// 左クリックしたオブジェクトを取得する関数(2D)
private GameObject getClickObject() {
 GameObject result = null;
 // 左クリックされた場所のオブジェクトを取得
 if(Input.GetMouseButtonDown(0)) {
   Vector2 tapPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
   Collider2D collition2d = Physics2D.OverlapPoint(tapPoint);
   if (collition2d) {
     result = collition2d.transform.gameObject;
   }
 }
 return result;
}


以下のようにUpdate関数の中で呼び出すとクリック監視になります。

void Update () {
 GameObject obj = getClickObject ();
 if (obj != null) {
   // 以下オブジェクトがクリックされた時の処理
 }
}


クリックされた時にそのオブジェクトをDestroyしたりなど、色々と多用しています。


■おまけ
Input.GetMouseButtonにおける数値一覧

クリックの種類 数値
左クリック 0
右クリック 1
中(ホイール)クリック 2