UnityEngine Video3DLayout.SideBySide3D代码无效

时间:2018-03-28 13:12:17

标签: c# unity3d virtual-reality oculus

我是C#和Unity的新手,但我正在尝试使用Unity编写应用程序,这将播放我的客户的3D Side by Side VR视频。我在这里使用脚本https://docs.unity3d.com/ScriptReference/Video.VideoPlayer.html来播放视频并且效果很好,但它并不像Side By Side VR视频那样播放,而只是一个双眼屏幕的平面视频。

UnityEngine.Video有可以解决问题的Video3DLayout.SideBySide3d枚举(https://docs.unity3d.com/ScriptReference/Video.Video3DLayout.html),但我不知道什么是正确的语法。这是我尝试过的代码:

using UnityEngine;
using System.Collections;

public class Movie : MonoBehaviour{

    enum Video3DLayout {No3D, SideBySide3D, OverUnder3D};

    void Start(){

        Video3DLayout myLayout;
        myLayout = Video3DLayout.SideBySide3D;

        // Will attach a VideoPlayer to the main camera.
        GameObject camera = GameObject.Find("Main Camera");

        // VideoPlayer automatically targets the camera backplane when it is added
        // to a camera object, no need to change videoPlayer.targetCamera.
        var videoPlayer = camera.AddComponent<UnityEngine.Video.VideoPlayer>();

        // Play on awake defaults to true. Set it to false to avoid the url set
        // below to auto-start playback since we're in Start().
        videoPlayer.playOnAwake = false;

        // By default, VideoPlayers added to a camera will use the far plane.
        // Let's target the near plane instead.
        videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.CameraNearPlane;

        // Set the video to play.
        videoPlayer.url = "movie.mp4";        

        // Start playback. This means the VideoPlayer may have to prepare (reserve
        // resources, pre-load a few frames, etc.). To better control the delays
        // associated with this preparation one can use videoPlayer.Prepare() along with
        // its prepareCompleted event.
        videoPlayer.Play();
    }
}

我觉得我错误地介绍了这些枚举,我希望有人可以引导我走向正确的方向。我尝试使用本教程https://unity3d.com/learn/tutorials/topics/scripting/enumerations来了解有关枚举的更多信息,但这样我的代码无效。

1 个答案:

答案 0 :(得分:0)

有两个原因导致它失效。你正在创建一个新的枚举,而不是使用UnityEngine.Video.Video3DLayout枚举。此外,您还没有将myLayout分配给videoPlayer。

using UnityEngine;
using System.Collections;
using UnityEngine.Video;

public class Movie : MonoBehaviour
{
    public Video3DLayout myLayout;

    void Start()
    {
        // Will attach a VideoPlayer to the main camera.
        GameObject camera = GameObject.Find("Main Camera");

        // VideoPlayer automatically targets the camera backplane when it is added
        // to a camera object, no need to change videoPlayer.targetCamera.
        var videoPlayer = camera.AddComponent<UnityEngine.Video.VideoPlayer>();
        videoPlayer.targetCamera3DLayout = myLayout;

        // Play on awake defaults to true. Set it to false to avoid the url set
        // below to auto-start playback since we're in Start().
        videoPlayer.playOnAwake = false;

        // By default, VideoPlayers added to a camera will use the far plane.
        // Let's target the near plane instead.
        videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.CameraNearPlane;

        // Set the video to play.
        videoPlayer.url = "movie.mp4";

        // Start playback. This means the VideoPlayer may have to prepare (reserve
        // resources, pre-load a few frames, etc.). To better control the delays
        // associated with this preparation one can use videoPlayer.Prepare() along with
        // its prepareCompleted event.
        videoPlayer.Play();
    }
}