using UnityEngine; using UnityEngine.Rendering; using UnityEditor; using UnityEditor.Build.Reporting; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; //------------------------------------------------------------------------------------- // ***** OculusBuildSamples // // Provides scripts to build SamplesFramework scene APKs. // partial class OculusBuildSamples { private static TimeSpan? minThreshold = TimeSpan.FromSeconds(1); static void ImportSamplesFramework() { AssetDatabase.ImportPackage("OculusIntegration-release.unitypackage", false); } static void BuildLocomotion() { InitializeBuild("com.oculus.unitysample.locomotion"); Build("Locomotion"); } static void BuildDistanceGrab() { InitializeBuild("com.oculus.unitysample.distancegrab"); Build("DistanceGrab"); } static void BuildDebugUI() { InitializeBuild("com.oculus.unitysample.debugui"); Build("DebugUI"); } // Note this APK isn't fully functional without some additional // build steps listed here: // ovrsource/Software/Samples/Unity/SampleFramework/Assets/Oculus/SampleFramework/Usage/Firebase/README.md // // Here we are only building the smaller (incomplete) build. It's // not perfect but it's better than nothing. static void BuildFirebase() { InitializeBuild("com.oculus.unitysample.firebase"); Build("Firebase"); } static void BuildHandsInteractionTrain() { InitializeBuild("com.oculus.unitysample.handsinteractiontrain"); Build("HandsInteractionTrainScene"); } static void BuildMixedRealityCapture() { InitializeBuild("com.oculus.unitysample.mixedrealitycapture"); Build("MixedRealityCapture"); } static void BuildOVROverlay() { InitializeBuild("com.oculus.unitysample.ovroverlay"); Build("OVROverlay"); } static void BuildOVROverlayCanvas() { InitializeBuild("com.oculus.unitysample.ovroverlaycanvas"); Build("OVROverlayCanvas"); } static void BuildStereo180Video() { AndroidVideoEditorUtil.EnableNativeVideoPlayer(); InitializeBuild("com.oculus.unitysample.stereo180video"); Build("Stereo180Video"); AndroidVideoEditorUtil.DisableNativeVideoPlayer(); } // TODO(radtker): Add additional build steps for proper functionality. static void BuildWidevineVideo() { AndroidVideoEditorUtil.EnableNativeVideoPlayer(); InitializeBuild("com.oculus.unitysample.widevinevideo"); Build("WidevineVideo"); AndroidVideoEditorUtil.DisableNativeVideoPlayer(); } // reach out to panya or brittahummel for issues regarding passthrough static void BuildPassthrough() { InitializeBuild("com.oculus.unitysample.passthrough"); // TODO: enable OpenXR so Passthrough works Build("Passthrough"); } //Reach out to Irad Ratamasky(iradicator) or Rohit Rao (rohitrao) for issues related to enchanced compositor static void BuildEnhancedOVROverlay() { InitializeBuild("com.oculus.samples_2DPanel"); AddSplashScreen("/Assets/Oculus/SampleFramework/Core/OculusInternal/EnhancedOVROverlay/Textures/SplashScreen/STADIUM_White-01.png"); SetAppDetails("Oculus","2DPanel"); BuildInternal("EnhancedOVROverlay"); //Scene is presnet in OculusInternal folder. } static void BuildStartScene() { InitializeBuild("com.oculus.unitysample.startscene"); Build( "StartScene.apk", new string[]{ "Assets/Oculus/SampleFramework/Usage/StartScene.unity", "Assets/Oculus/SampleFramework/Usage/Locomotion.unity", "Assets/Oculus/SampleFramework/Usage/DistanceGrab.unity", "Assets/Oculus/SampleFramework/Usage/DebugUI.unity", "Assets/Oculus/SampleFramework/Usage/HandsInteractionTrainScene.unity", "Assets/Oculus/SampleFramework/Usage/MixedRealityCapture.unity", "Assets/Oculus/SampleFramework/Usage/OVROverlay.unity", "Assets/Oculus/SampleFramework/Usage/OVROverlayCanvas.unity", "Assets/Oculus/SampleFramework/Usage/Passthrough.unity", }); } private static void InitializeBuild(string identifier) { PlayerSettings.stereoRenderingPath = StereoRenderingPath.SinglePass; GraphicsDeviceType[] graphicsApis = new GraphicsDeviceType[1]; graphicsApis[0] = GraphicsDeviceType.OpenGLES3; PlayerSettings.SetGraphicsAPIs(BuildTarget.Android, graphicsApis); PlayerSettings.colorSpace = ColorSpace.Linear; //Set ARM64 Requirements PlayerSettings.SetScriptingBackend (BuildTargetGroup.Android, ScriptingImplementation.IL2CPP); PlayerSettings.SetArchitecture (BuildTargetGroup.Android, 1); //0 - None, 1 - ARM64, 2 - Universal PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARM64; EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle; QualitySettings.antiAliasing = 4; PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, identifier); } private static void Build(string sceneName) { Build(sceneName + ".apk", new string[] {"Assets/Oculus/SampleFramework/Usage/" + sceneName + ".unity"}); } private static void BuildInternal(string sceneName) { Build(sceneName + ".apk", new string[] {"Assets/Oculus/SampleFramework/Usage/OculusInternal/" + sceneName + ".unity"}); } private static void Build(string apkName, string[] scenes) { BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions(); buildPlayerOptions.target = BuildTarget.Android; buildPlayerOptions.locationPathName = apkName; buildPlayerOptions.scenes = scenes; BuildReport buildReport = BuildPipeline.BuildPlayer(buildPlayerOptions); } private static void AddSplashScreen(string path){ Texture2D companyLogo = Resources.Load(path); PlayerSettings.virtualRealitySplashScreen = companyLogo; var logos = new PlayerSettings.SplashScreenLogo[2]; // Company logo Sprite companyLogoSprite = (Sprite)AssetDatabase.LoadAssetAtPath(path, typeof(Sprite)); logos[0] = PlayerSettings.SplashScreenLogo.Create(2.5f, companyLogoSprite); // Set the Unity logo to be drawn after the company logo. logos[1] = PlayerSettings.SplashScreenLogo.CreateWithUnityLogo(); PlayerSettings.SplashScreen.logos = logos; } private static void SetAppDetails(string companyName,string productName){ PlayerSettings.companyName = companyName; PlayerSettings.productName = productName; } }