Unity5でPrefab内のスクリプトから3DTextを生成する

2015年6月19日

思いつかなかったので無理やり実装したログです。
動的に生成している Prefab の上にテキストを表示したかった、それだけです。

1. 3D Text を作る
  Hierarchy 上に 3D Text のオブジェクトを追加します。
  これを Project にドラッグして Prefab 化(以後 TextPrefab)しておきます。

2. TextPrefab に Instantiate メソッドを追加する
  Prefab のロード時にテキストの初期化を行いたいため、引数を渡せる Instantiate を作成します。

public class TextPrefabScript : MonoBehaviour
{
    // 初期化用引数を追加した Instatiate メソッド.
    public static GameObject Instantiate (Vector3 position, Quaternion rotation, string text)
    {
        GameObject obj = Instantiate (Resources.Load ("Resources/TextPrefab", position, rotation) as GameObject;
        obj.GetComponent<TextMesh> ().text = text;

        return obj;
    }
}

3. テキストを追加したい Prefab (以後 CubePrefab)のスクリプトにメンバ変数を追加する
  以下のメンバ変数を追加します。
    private GameObject myTextObject; // TextPrefab を格納するための GameObject.
    private string myText; // Text を格納するための string.

  myText は、プロパティも宣言しておきます。

public string MyText
{
    get { return this.myText; }
    set { this.myText = value; }
}

4. CubePrefab のスクリプトに TextPrefab の生成処理を追加する
  ここで引数にメンバ変数の myText を渡すことで、myText に格納されている文字列を初期値として設定できます。

void Start ()
{
    // TextPrefab の生成.
    myTextObject = TextPrefabScript.Instantiate (transform.position, transform.rotation, this.myText) as GameObject;
}

5. CubePrefab の生成処理を調整する

// CubePrefab の生成.
GameObject obj = Instantiate (Resources.Load ("Resources/CubePrefab"), new Vector3 (x, y, z), Quaternion.identity) as GameObject;
// 表示したいテキストの設定.
obj.GetComponent<NoteModelScript> ().MyText = text;

これで一応表示はできました。
やりたかったことは実現できたけど、これでいいのか?

おしまい

スポンサーリンク