1
This repository has been archived on 2025-03-15. You can view files and clone it, but cannot push or open issues or pull requests.
unity-vr-portoflio/Assets/GoogleVR/Demos/Editor/PermissionsDemoBuildEditor.cs

140 lines
4.6 KiB
C#
Raw Normal View History

2025-03-15 20:02:21 +01:00
// Copyright 2017 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0(the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissioßns and
// limitations under the License.
// This script only works in Unity 5.6 or newer since older versions of Unity
// don't have IPreprocessBuild and IPostprocessBuild.
#if UNITY_5_6_OR_NEWER && UNITY_ANDROID
using System;
using UnityEditor;
using UnityEditor.Build;
using UnityEngine;
using UnityEditorInternal.VR;
class MyCustomBuildProcessor : IPreprocessBuild, IPostprocessBuild
{
private const string SCENE_NAME_PERMISSIONS_DEMO = "PermissionsDemo";
private const string VR_DEVICE_CARDBOARD = "cardboard";
private const string VR_DEVICE_DAYDREAM = "daydream";
private bool m_cardboardAddedFromCode = false;
public int callbackOrder
{
get { return 0; }
}
// OnPreprocessBuild() is called rigth before the build process begins. If it
// detects that the first enabled scene in the build arrays is the PermissionsDemo,
// and Daydream is in the VR SDKs, it will add Cardboard to the VR SDKs. Because
// the PermissionsDemo needs a perm statement in the Manifest while other demos don't.
// Adding Cardboard to VR SDKs will merge in the Manifest-Cardboard which has perm
// statemetn in it.
public void OnPreprocessBuild(BuildTarget target, string path)
{
m_cardboardAddedFromCode = false;
string[] androidVrSDKs = VREditor.GetVREnabledDevicesOnTargetGroup(BuildTargetGroup.Android);
EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;
// See if PermissionsDemo is the first enabled scene in the array of scenes to build.
for (int i = 0; i < scenes.Length; i++)
{
if (scenes[i].path.Contains(SCENE_NAME_PERMISSIONS_DEMO))
{
if (!scenes[i].enabled)
{
return;
}
else
{
break;
}
}
else
{
if (scenes[i].enabled)
{
return;
}
}
}
bool hasCardboard = Array.Exists<string>(androidVrSDKs,
element => element.Equals(VR_DEVICE_CARDBOARD));
if (hasCardboard)
{
return;
}
bool hasDaydream = Array.Exists<string>(androidVrSDKs,
element => element.Equals(VR_DEVICE_DAYDREAM));
if (!hasDaydream)
{
return;
}
string[] androidVrSDKsAppended = new string[androidVrSDKs.Length+1];
for (int i = 0; i < androidVrSDKs.Length; i++)
{
androidVrSDKsAppended[i] = androidVrSDKs[i];
}
androidVrSDKsAppended[androidVrSDKsAppended.Length - 1] = VR_DEVICE_CARDBOARD;
VREditor.SetVREnabledOnTargetGroup(
BuildTargetGroup.Android, true);
VREditor.SetVREnabledDevicesOnTargetGroup(
BuildTargetGroup.Android,
androidVrSDKsAppended);
m_cardboardAddedFromCode = true;
}
// OnPostprocessBuild() is called after the build process. It does appropriate cleanup
// so that this script only affects build process for PermissionsDemo, not others.
public void OnPostprocessBuild(BuildTarget target, string path)
{
if (!m_cardboardAddedFromCode)
return;
string[] androidVrSDKs = VREditor.GetVREnabledDevicesOnTargetGroup(BuildTargetGroup.Android);
// The enabled devices are modified somehow, which shoudln't happen. Abort the post build process.
if (androidVrSDKs.Length == 0 || androidVrSDKs[androidVrSDKs.Length - 1] != VR_DEVICE_CARDBOARD)
{
return;
}
string[] androidVrSDKsShortened = new string[androidVrSDKs.Length - 1];
for (int i = 0; i < androidVrSDKsShortened.Length; i++)
{
androidVrSDKsShortened[i] = androidVrSDKs[i];
}
VREditor.SetVREnabledOnTargetGroup(
BuildTargetGroup.Android, true);
VREditor.SetVREnabledDevicesOnTargetGroup(
BuildTargetGroup.Android,
androidVrSDKsShortened);
m_cardboardAddedFromCode = false;
}
}
#endif // UNITY_5_6_OR_NEWER