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;
これで一応表示はできました。
やりたかったことは実現できたけど、これでいいのか?
おしまい



ディスカッション
コメント一覧
まだ、コメントがありません