single.php

Unity 変数で設定したGameObjectを自身に追加して表示する方法

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 を追加して表示したい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です