

UIを一定時間後に表示する方法を教えてください。  
UIのゲームオブジェクト名はEndSceneで、中にパネルとボタンが3つ（クリックするとシーン移動するもの）存在しています。  
最初を非表示にしておき、25秒後にEndSceneごと表示させ3つのボタンを選択できるようにしたいのですが、うまくいきません。  
どのようにしたらよいかアドバイスお願いします。  
現段階は下のようになっています。  
このスクリプトをEndSceneにつけ、EndSceneコンポーネントのEndSceneプロパティにゲームオブジェクト上のEndSceneをドラッグ＆ドロップで設定しています。

[code]

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class EndScene : MonoBehaviour
    {
    
        void Start()
        {
            //EndSceneを25秒後に呼び出す
            Invoke("Update", 25f);
        }
        public GameObject endScene;
    
        void Update()
        {
            endScene.SetActive(true);
        }
    
    }
    
[/code]


CC BY-SA 4.0
2019-08-02T07:52:15.763
57126
2023-11-10T16:00:30.093
2019-08-02T10:11:36.410
32986
35341
question
c# unity3d unity2d
Unityで一定時間後にUI（パネル、ボタン）を表示する方法


Update() はUnityの特殊な関数で毎フレーム自動的に呼ばれるため、このままではすぐに SetActive
が呼ばれることになります。別の関数にしましょう。

あと、時間経過後表示するということなので、ゲームオブジェクトの初期状態は非アクティブ状態であるはずです。ですが、非アクティブ状態では Start() や
Update() といったUnityの特殊な関数も呼ばれなくなってしまうので機能しません。  
回避策として、このゲームオブジェクトの上位に表示管理用としてアクティブなEmptyゲームオブジェクトを作り、こちらにスクリプトを適用するといった方法があります。


CC BY-SA 4.0
2019-08-05T06:41:39.173
57176
2019-08-05T06:41:39.173
14817
57126
answer


このスクリプトを`endScene`という`GameObject`に付けないで、別の常にアクティブな`GameObject`（例えば`endScene`の親`GameObject`）に付けましょう。

[code]

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class EndScene : MonoBehaviour
    {
    
        void Start()
        {
            _startTime = Time.realtimeSinceStartup;
        }
        public GameObject endScene;
        private float _startTime;
    
        void Update()
        {
            if (Time.realtimeSinceStartup - _startTime >= 25f)
                endScene.SetActive(true);
        }
    
    }
    
[/code]


CC BY-SA 4.0
2021-02-11T01:21:31.740
73925
2021-02-11T01:21:31.740
43877
57126
answer