プレハブ化したボタンで宴側にジャンプしたい。

268 views
Skip to first unread message

のぼり

unread,
Nov 23, 2021, 3:45:51 AM11/23/21
to 宴ユーザーグループ
Unityの習熟度: 初心者
宴のバージョン:  3.11.1
UnityのバージョンとOS:Unity2020.3.22 Windows10


お世話になっております。
お店のシステムをつくろうとunity側でつくったボタンをプレハブ化、スクリプトでクリックされたら宴のシナリオに飛んで…という処理をつくろうとしているのですが、ボタンをプレハブ化しているためにAdvEngineのアタッチがはずれてしまって

『engine.JumpScenario("mise*kore");』

というような式?を書いても飛べません。
プレハブにオブジェクトをアタッチする方法やプレハブの子に AdvEngineのコピーを入れる等試してみたのですが上手くいかず…

なにか方法はあるでしょうか?
ご教授いただければ幸いです。

マッドネスラボ

unread,
Nov 23, 2021, 8:23:24 PM11/23/21
to 宴ユーザーグループ
Untiyの仕様で、プレハブから参照するものは同じプレハブ内のものしかできないです。
同じシーンで使われとは限らないので、シーン上のオブジェクトの参照はできません。


・プレハブを作ったときに、初期化する。
プレハブを作るプログラムに、プレハブ内の自分のコンポーネントを呼び出して、初期化処理する処理を追加するのが一般的だと思います。
こんな感じです。

//プレハブを作る側のほう
public class ExampleManger : MonoBehaviour
    {
        public Transform prefab;
        public AdvEngine advEngine;
        void Sample()
        {
            for (int i = 0; i < 10; i++)
            {
                var obj = Instantiate(prefab);
                var prefabComponent = obj.GetComponent<ExampleButton>();
                prefabComponent.Init(advEngine);
            }
        }
    }

//プレハブにつけるコンポーネント。AdvEngineを渡してほしい
public class ExampleButton : MonoBehaviour
{
private AdvEngine AdvEngine { get; set; }
public void Init(AdvEngine advEngine)
{
AdvEngine = advEngine;
}
}


上記のやり方が基本だと思いますが、一応例外として・・・
AwakeやStartなどはInstaiateと同時に呼ばれることがあるので、
AwakeやStartでAdvEngineへの参照が必要になった場合に問題が起きることがあります。
プレハブ側から、AdvEngineをFindする処理などを書く必要があります。
ですが、これは例外的な話で、処理が重いのであまりやらないほうがいいです。

 


2021年11月23日火曜日 17:45:51 UTC+9 のぼり:

のぼり

unread,
Nov 28, 2021, 8:42:54 PM11/28/21
to 宴ユーザーグループ
マッドネスラボさま

回答に加え、サンプルもありがとうございます!
製作の参考にさせていただきます。


2021年11月24日水曜日 10:23:24 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages