C# 在Unity中播放一系列360度视频之间,如何使屏幕空白2秒(可配置)

C# 在Unity中播放一系列360度视频之间,如何使屏幕空白2秒(可配置),c#,unity3d,C#,Unity3d,我在Unity中编写了一个C#脚本,用于播放一系列360度视频,每个视频持续一分钟。由于stackoverflow上提供的支持,该脚本按预期工作。现在我想在每个视频播放之间添加一个几秒钟的分隔符,类似于一个空白屏幕,它可以帮助区分每个视频的开始和结束 我尝试在画布上使用带有图像的游戏对象,然后在播放每个视频后将其设置为活动状态。然而,它并没有像预期的那样工作 private GameObject gameobject; gameobject = GameObject.FindGameObject

我在Unity中编写了一个C#脚本,用于播放一系列360度视频,每个视频持续一分钟。由于stackoverflow上提供的支持,该脚本按预期工作。现在我想在每个视频播放之间添加一个几秒钟的分隔符,类似于一个空白屏幕,它可以帮助区分每个视频的开始和结束

我尝试在画布上使用带有图像的游戏对象,然后在播放每个视频后将其设置为活动状态。然而,它并没有像预期的那样工作

private GameObject gameobject;
gameobject = GameObject.FindGameObjectWithTag("Delimiter");
gameObject.SetActive(true);
不幸的是,游戏对象。仅返回活动的游戏对象。找不到使用此方法禁用的对象。有几种解决方案:

  • 将GameObject引用设置为public或添加[SerializeField]属性,允许您在编辑器中进行配置

  • 以活动状态启动游戏对象,并在其变为非活动状态之前缓存对其的引用。(在唤醒方法中,或在其他地方)

  • 更新编辑以获得关于#2的更多说明: 所有游戏对象在执行任何其他逻辑之前都会运行Awake()和Start()

    你可以移动你的手臂

    private GameObject canvasObject;
    
    类级变量(而不是方法内部)和Awake()方法内部,如下所示:

    void Awake()
    {
        canvasObject = GameObject.FindWithTag("Delimiter");
    }
    
    现在您有了对CanvaObject的缓存引用,因此您不需要每次都执行GameObject.FindWithTag。现在您可以使用此方法:

    public void TurnOnImage()
    {
        canvasObject.SetActive(true);
    }
    
    不幸的是,游戏对象。仅返回活动的游戏对象。找不到使用此方法禁用的对象。有几种解决方案:

  • 将GameObject引用设置为public或添加[SerializeField]属性,允许您在编辑器中进行配置

  • 以活动状态启动游戏对象,并在其变为非活动状态之前缓存对其的引用。(在唤醒方法中,或在其他地方)

  • 更新编辑以获得关于#2的更多说明: 所有游戏对象在执行任何其他逻辑之前都会运行Awake()和Start()

    你可以移动你的手臂

    private GameObject canvasObject;
    
    类级变量(而不是方法内部)和Awake()方法内部,如下所示:

    void Awake()
    {
        canvasObject = GameObject.FindWithTag("Delimiter");
    }
    
    现在您有了对CanvaObject的缓存引用,因此您不需要每次都执行GameObject.FindWithTag。现在您可以使用此方法:

    public void TurnOnImage()
    {
        canvasObject.SetActive(true);
    }
    

    请您添加一个完整的代码示例,并进一步解释一下您所说的
    不起作用是什么意思
    好吗?您是否查看了协同程序?您是否尝试禁用使用过的摄影机对象?我尝试禁用使用过的摄影机对象,但没有帮助//gameobject=gameobject.FindGameObjectWithTag(“主摄像头”)//gameObject.SetActive(false)//gameObject.SetActive(true);请您添加一个完整的代码示例,并进一步解释一下您所说的
    不起作用是什么意思
    好吗?您是否查看了协同程序?您是否尝试禁用使用过的摄影机对象?我尝试禁用使用过的摄影机对象,但没有帮助//gameobject=gameobject.FindGameObjectWithTag(“主摄像头”)//gameObject.SetActive(false)//gameObject.SetActive(true);我理解上面第一点。然而,第二名并不被理解,因为我对Unity还很陌生。你能举例说明一下吗。谢谢谢谢你,埃里克。我将尝试你的建议,同时,我尝试了一种不同的方法,即在主场景和空白场景之间切换。在主屏幕中,播放视频(例如视频#1)后,我使用SceneManager.LoadSceneAsync(“Assets/Interactive360/Scenes/BlankScene.unity”);然后,在空白场景中,我使用一个5秒的计时器返回主场景。但一旦控制回到主场景,它就不会继续播放视频2;而是从头开始。是否有任何方法从空白屏幕加载到哪里?因为每个场景加载“FRESs”,所以需要在场景范围之外存储数据来完成此操作。我建议使用来存储需要在场景之间保留的短期数据。谢谢@Erik。我会考虑你的建议,让我能理解更多。我已经尝试了所有可能的选项,在同一场景中播放的两个视频之间淡入淡出。在线上有很多解决方案可以在两个场景之间淡入淡出,但我正在寻找一个在单个场景中的解决方案。我尝试的最后一种方法是使用连接到相机的平面,在一段时间内操纵ALPHA的值,从而产生淡入淡出的效果。当场景开始并开始播放第一个视频时,淡入淡出效果良好。但是,从第二个视频开始,它就完全不起作用了。我不明白我在这里遗漏了什么,我明白上面的第一点。然而,第二名并不被理解,因为我对Unity还很陌生。你能举例说明一下吗。谢谢谢谢你,埃里克。我将尝试你的建议,同时,我尝试了一种不同的方法,即在主场景和空白场景之间切换。在主屏幕中,播放视频(例如视频#1)后,我使用SceneManager.LoadSceneAsync(“Assets/Interactive360/Scenes/BlankScene.unity”);然后,在空白场景中,我使用一个5秒的计时器返回主场景。但一旦控制回到主场景,它就不会继续播放视频2;而是从头开始。是否有任何方法从空白屏幕加载到哪里?因为每个场景加载“FRESs”,所以需要在场景范围之外存储数据来完成此操作。我建议使用来存储需要在场景之间保留的短期数据。谢谢@Erik。我会考虑你的建议,让我能理解更多。我已经尝试了所有可能的选项,在同一场景中播放的两个视频之间淡入淡出。在线上有很多解决方案可以在两个场景之间淡入淡出,但我正在寻找一个在单个场景中的解决方案。洛杉矶