Initialer Upload neues Unity-Projekt
This commit is contained in:
145
Assets/Oculus/VR/Editor/OVRExperimentalCheck.cs
Normal file
145
Assets/Oculus/VR/Editor/OVRExperimentalCheck.cs
Normal file
@ -0,0 +1,145 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Licensed under the Oculus SDK License Agreement (the "License");
|
||||
* you may not use the Oculus SDK except in compliance with the License,
|
||||
* which is provided at the time of installation or download, or which
|
||||
* otherwise accompanies this software in either electronic or hard copy form.
|
||||
*
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://developer.oculus.com/licenses/oculussdk/
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, the Oculus SDK
|
||||
* 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 permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Build;
|
||||
using UnityEditor.Build.Reporting;
|
||||
using UnityEngine;
|
||||
|
||||
class OVRExperimentalCheck : IPreprocessBuildWithReport
|
||||
{
|
||||
public int callbackOrder => 0;
|
||||
|
||||
public void OnPreprocessBuild(BuildReport report)
|
||||
{
|
||||
if (report.summary.platformGroup != BuildTargetGroup.Android) return;
|
||||
|
||||
if ((report.summary.options & BuildOptions.AutoRunPlayer) == 0) return;
|
||||
|
||||
const string experimentalEnabledProp = "debug.oculus.experimentalEnabled";
|
||||
|
||||
var config = OVRProjectConfig.GetProjectConfig(false);
|
||||
if (!config) return;
|
||||
|
||||
var enabledInProject = config.experimentalFeaturesEnabled;
|
||||
if (!enabledInProject) return;
|
||||
|
||||
var adbTool = new OVRADBTool(OVRConfig.Instance.GetAndroidSDKPath());
|
||||
if (!adbTool.isReady) return;
|
||||
|
||||
var devices = adbTool.GetDevices();
|
||||
if (devices.Count == 0) return;
|
||||
|
||||
var disabledDevices = new List<string>();
|
||||
foreach (var device in devices)
|
||||
{
|
||||
// If we can't read the system prop at all, just ignore
|
||||
if (!TryGetSystemProperty(adbTool, device, experimentalEnabledProp, out var expSysPropSet))
|
||||
continue;
|
||||
|
||||
var deviceIsExpEnabled = expSysPropSet == 1;
|
||||
if (!deviceIsExpEnabled)
|
||||
{
|
||||
disabledDevices.Add(device);
|
||||
}
|
||||
}
|
||||
|
||||
if (disabledDevices.Count == 0) return;
|
||||
|
||||
const string menuTitle = "Oculus Experimental";
|
||||
var plural = disabledDevices.Count > 1;
|
||||
switch (EditorUtility.DisplayDialogComplex(
|
||||
title: menuTitle,
|
||||
message:
|
||||
$"You have enabled experimental features in the project, but the connected device{(plural ? "s" : "")} {string.Join(", ", disabledDevices)} {(plural ? "do" : "does")} not have experimental features enabled ({experimentalEnabledProp}). Would you like to enable them now?",
|
||||
ok: $"Yes, enable experimental features",
|
||||
cancel: "Cancel build",
|
||||
alt: "No, continue build"))
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
var failedDevices = new List<string>();
|
||||
foreach (var device in disabledDevices)
|
||||
{
|
||||
var exitCode = adbTool.RunCommand(new[]
|
||||
{
|
||||
"-s", device,
|
||||
"shell", "setprop", experimentalEnabledProp, "1"
|
||||
}, null, out var stdout, out var stderr);
|
||||
|
||||
if (exitCode != 0 || !string.IsNullOrEmpty(stdout))
|
||||
{
|
||||
failedDevices.Add(device);
|
||||
Debug.LogError(exitCode != 0
|
||||
? $"Failed to enable {experimentalEnabledProp} on {device} with error code {exitCode}:\n{stderr}"
|
||||
: $"Failed to enable {experimentalEnabledProp} on {device}:\n{stdout}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"Successfully set {experimentalEnabledProp} to 1 on {device}.");
|
||||
}
|
||||
}
|
||||
|
||||
if (failedDevices.Count > 0)
|
||||
{
|
||||
EditorUtility.DisplayDialog(menuTitle,
|
||||
$"Failed to set {experimentalEnabledProp} to 1 on the following devices: {string.Join(", ", failedDevices)}",
|
||||
"Ok");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
throw new BuildFailedException(
|
||||
$"Build canceled because {experimentalEnabledProp} is not enabled on {string.Join(", ", disabledDevices)}.");
|
||||
}
|
||||
case 2: break;
|
||||
}
|
||||
}
|
||||
|
||||
static bool TryGetSystemProperty(OVRADBTool adbTool, string device, string property, string defaultValue,
|
||||
out string value)
|
||||
{
|
||||
if (adbTool.RunCommand(new[]
|
||||
{
|
||||
"-s", device,
|
||||
"shell", "getprop", property
|
||||
}, null, out var stdout, out _) != 0)
|
||||
{
|
||||
value = defaultValue;
|
||||
return false;
|
||||
}
|
||||
|
||||
stdout = stdout?.Trim();
|
||||
value = string.IsNullOrEmpty(stdout) ? defaultValue : stdout;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool TryGetSystemProperty(OVRADBTool adbTool, string device, string property, out int value)
|
||||
{
|
||||
value = 0;
|
||||
return TryGetSystemProperty(adbTool, device, property, "0", out var strValue) &&
|
||||
int.TryParse(strValue, out value);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user