Unityで、変数としてインスペクターから設定した GameObject を自身に追加して表示する方法を備忘録的に投稿します。
インスペクターで設定したGameObjectの表示
C#スクリプトでインスペクターで編集可能な変数を定義します。
private GameObject tooltipInstance;
C#スクリプトを追加したインスペクターで、こんな感じで任意のGameObject(イメージ画像では[TooltipCanvas]の部分です。
インスペクターで設定した GameObject は C#スクリプトで追加して表示が可能です。
using UnityEngine;
public class Class1 : MonoBehaviour
{
protected void Start()
{
if (tooltipObject != null)
{
tooltipInstance = Instantiate(tooltipObject, this.transform);
tooltipInstance.SetActive(true);
}
}
}
実行すると C# スクリプトを追加しているGameObjectで、インスペクターで設定したGameObjectが表示されます。
位置の変更
表示する位置は、RectTransform を使って変更ができます。
例えば、インスタンス化した GameObject を使って、RectTransform 型の変数を取得して、変数の[.anchoredPosition3D]で位置を設定します。
3Dが付くプロパティですが、2Dでも使えます。
using UnityEngine;
public class Class1 : MonoBehaviour
{
protected void Start()
{
if (tooltipObject != null)
{
tooltipInstance = Instantiate(tooltipObject, this.transform);
RectTransform rect = tooltipInstance.GetComponent<RectTransform>();
if (rect != null)
{
Vector3 positionOffset = new Vector3(0, 0.5f, 0);
rect.anchoredPosition3D = positionOffset;
}
tooltipInstance.SetActive(true);
}
}
}
実行すると[tooltipInstance]が少し上側に表示されます。
まとめ
今回は短い記事ですが、変数としてインスペクターから設定した GameObject を自身に追加して表示する方法について書きました。
階層に追加している GameObject は実行すると既定値で表示されますが、インスペクターで設定した GameObject を追加して表示する場合[Instantiate]を使ってインスタンス化を行う必要があります。
インスタンス化後は、通常取り[SetActive]などで表示・非表示の切替ができます。
Unityでインスペクターで設定した GameObject を追加して表示したい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。

