Unity5でPrefab内のスクリプトから3DTextを生成する
思いつかなかったので無理やり実装したログです。
動的に生成している 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;
これで一応表示はできました。
やりたかったことは実現できたけど、これでいいのか?
おしまい
ディスカッション
コメント一覧
まだ、コメントがありません