forked from YikaiFu-cart/acRealman_xr
add unity doc.
This commit is contained in:
17
unity/XR_RM_PICO_UDP_Sender/.gitignore
vendored
Executable file
17
unity/XR_RM_PICO_UDP_Sender/.gitignore
vendored
Executable file
@ -0,0 +1,17 @@
|
||||
/Library/
|
||||
/Temp/
|
||||
/Obj/
|
||||
/Build/
|
||||
/Builds/
|
||||
/Logs/
|
||||
/UserSettings/
|
||||
|
||||
*.csproj
|
||||
*.sln
|
||||
*.user
|
||||
*.pidb
|
||||
*.booproj
|
||||
*.svd
|
||||
*.pdb
|
||||
*.mdb
|
||||
sysinfo.txt
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0b55d9ac4b234bcb984d42d3d87f4f18
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/Editor.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/Editor.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bbe3a47119034546940d4a621f74e77b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
292
unity/XR_RM_PICO_UDP_Sender/Assets/Editor/XrRmUdpSenderProjectSetup.cs
Executable file
292
unity/XR_RM_PICO_UDP_Sender/Assets/Editor/XrRmUdpSenderProjectSetup.cs
Executable file
@ -0,0 +1,292 @@
|
||||
#if UNITY_EDITOR
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
using UnityEditor.Build;
|
||||
using UnityEditor.Build.Reporting;
|
||||
using UnityEditor;
|
||||
using UnityEditor.XR.Management;
|
||||
using UnityEditor.XR.Management.Metadata;
|
||||
using UnityEditor.SceneManagement;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.XR.Management;
|
||||
using Unity.XR.PXR;
|
||||
|
||||
public static class XrRmUdpSenderProjectSetup
|
||||
{
|
||||
private const string ScenePath = "Assets/Scenes/Main.unity";
|
||||
private const string PackageName = "com.local.xr_rm_udp_sender";
|
||||
private const string ProductName = "XR-RM-PICO-UDP-Sender";
|
||||
private const string DefaultTargetHost = "192.168.9.99";
|
||||
private const string TargetHostEnvVar = "XR_RM_UDP_TARGET_HOST";
|
||||
|
||||
[MenuItem("XR-RM/Apply UDP Sender Android Settings")]
|
||||
public static void ApplyAndroidSettings()
|
||||
{
|
||||
PlayerSettings.productName = ProductName;
|
||||
PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, PackageName);
|
||||
PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel29;
|
||||
PlayerSettings.Android.targetSdkVersion = AndroidSdkVersions.AndroidApiLevelAuto;
|
||||
PlayerSettings.Android.forceInternetPermission = true;
|
||||
PlayerSettings.SetScriptingBackend(NamedBuildTarget.Android, ScriptingImplementation.IL2CPP);
|
||||
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARM64;
|
||||
PlayerSettings.SetGraphicsAPIs(BuildTarget.Android, new[] { GraphicsDeviceType.OpenGLES3 });
|
||||
|
||||
if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.Android)
|
||||
{
|
||||
bool switched = EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android);
|
||||
if (!switched)
|
||||
{
|
||||
Debug.LogWarning("Could not switch to Android. Install Unity Android Build Support, then run this menu item again.");
|
||||
}
|
||||
}
|
||||
|
||||
EditorUserBuildSettings.selectedBuildTargetGroup = BuildTargetGroup.Android;
|
||||
EnsurePicoSettings();
|
||||
EnablePicoLoader();
|
||||
CreateOrRefreshScene();
|
||||
EditorBuildSettings.scenes = new[] { new EditorBuildSettingsScene(ScenePath, true) };
|
||||
AssetDatabase.SaveAssets();
|
||||
Debug.Log("XR-RM UDP Sender Android settings applied.");
|
||||
}
|
||||
|
||||
[MenuItem("XR-RM/Create Or Refresh UDP Sender Scene")]
|
||||
public static void CreateOrRefreshScene()
|
||||
{
|
||||
Directory.CreateDirectory("Assets/Scenes");
|
||||
|
||||
Scene scene = File.Exists(ScenePath)
|
||||
? EditorSceneManager.OpenScene(ScenePath)
|
||||
: EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);
|
||||
|
||||
GameObject sender = GameObject.Find("PicoControllerUdpSender");
|
||||
if (sender == null)
|
||||
{
|
||||
sender = new GameObject("PicoControllerUdpSender");
|
||||
}
|
||||
|
||||
PicoControllerUdpSender component = sender.GetComponent<PicoControllerUdpSender>();
|
||||
if (component == null)
|
||||
{
|
||||
component = sender.AddComponent<PicoControllerUdpSender>();
|
||||
}
|
||||
|
||||
string targetHost = ResolveTargetHost();
|
||||
component.host = targetHost;
|
||||
component.port = 15000;
|
||||
component.sendHz = 60.0f;
|
||||
component.convertUnityToProjectCoordinates = true;
|
||||
component.sendOnStart = true;
|
||||
|
||||
PicoUdpConfigPanel panel = sender.GetComponent<PicoUdpConfigPanel>();
|
||||
if (panel == null)
|
||||
{
|
||||
panel = sender.AddComponent<PicoUdpConfigPanel>();
|
||||
}
|
||||
|
||||
panel.targetFrameRate = 90;
|
||||
panel.showOnStart = true;
|
||||
panel.togglePanelWithMenuButton = true;
|
||||
|
||||
PicoKeepAwake keepAwake = sender.GetComponent<PicoKeepAwake>();
|
||||
if (keepAwake == null)
|
||||
{
|
||||
keepAwake = sender.AddComponent<PicoKeepAwake>();
|
||||
}
|
||||
|
||||
keepAwake.keepAwake = true;
|
||||
keepAwake.applyWhenSendingOnly = true;
|
||||
keepAwake.usePicoEnterpriseApi = true;
|
||||
keepAwake.useAndroidWindowFlag = true;
|
||||
keepAwake.picoRefreshSeconds = 30.0f;
|
||||
|
||||
EditorSceneManager.SaveScene(scene, ScenePath);
|
||||
Debug.Log($"XR-RM UDP Sender scene refreshed. Target host: {targetHost}");
|
||||
}
|
||||
|
||||
private static void EnsurePicoSettings()
|
||||
{
|
||||
Directory.CreateDirectory("Assets/XR/Settings");
|
||||
|
||||
const string settingsPath = "Assets/XR/Settings/PXR_Settings.asset";
|
||||
PXR_Settings settings = AssetDatabase.LoadAssetAtPath<PXR_Settings>(settingsPath);
|
||||
if (settings == null)
|
||||
{
|
||||
settings = ScriptableObject.CreateInstance<PXR_Settings>();
|
||||
settings.stereoRenderingModeAndroid = PXR_Settings.StereoRenderingModeAndroid.MultiPass;
|
||||
AssetDatabase.CreateAsset(settings, settingsPath);
|
||||
}
|
||||
|
||||
EditorBuildSettings.AddConfigObject("Unity.XR.PXR.Settings", settings, true);
|
||||
EditorUtility.SetDirty(settings);
|
||||
}
|
||||
|
||||
[MenuItem("XR-RM/Build Android APK")]
|
||||
public static void BuildAndroidApk()
|
||||
{
|
||||
ApplyAndroidSettings();
|
||||
|
||||
Directory.CreateDirectory("Builds");
|
||||
BuildPlayerOptions options = new BuildPlayerOptions
|
||||
{
|
||||
scenes = new[] { ScenePath },
|
||||
locationPathName = "Builds/XR-RM-PICO-UDP-Sender.apk",
|
||||
target = BuildTarget.Android,
|
||||
targetGroup = BuildTargetGroup.Android,
|
||||
options = BuildOptions.None
|
||||
};
|
||||
|
||||
BuildReport report = BuildPipeline.BuildPlayer(options);
|
||||
BuildSummary summary = report.summary;
|
||||
if (summary.result != BuildResult.Succeeded)
|
||||
{
|
||||
throw new Exception($"Android APK build failed: {summary.result}");
|
||||
}
|
||||
|
||||
Debug.Log($"Android APK built: {options.locationPathName}");
|
||||
}
|
||||
|
||||
private static void EnablePicoLoader()
|
||||
{
|
||||
XRGeneralSettingsPerBuildTarget buildTargetSettings = AssetDatabase.FindAssets("t:XRGeneralSettingsPerBuildTarget")
|
||||
.Select(guid => AssetDatabase.LoadAssetAtPath<XRGeneralSettingsPerBuildTarget>(AssetDatabase.GUIDToAssetPath(guid)))
|
||||
.FirstOrDefault();
|
||||
|
||||
if (buildTargetSettings == null)
|
||||
{
|
||||
buildTargetSettings = ScriptableObject.CreateInstance<XRGeneralSettingsPerBuildTarget>();
|
||||
AssetDatabase.CreateAsset(buildTargetSettings, "Assets/XRGeneralSettingsPerBuildTarget.asset");
|
||||
}
|
||||
|
||||
XRGeneralSettings generalSettings = buildTargetSettings.SettingsForBuildTarget(BuildTargetGroup.Android);
|
||||
if (generalSettings == null)
|
||||
{
|
||||
generalSettings = ScriptableObject.CreateInstance<XRGeneralSettings>();
|
||||
AssetDatabase.AddObjectToAsset(generalSettings, buildTargetSettings);
|
||||
buildTargetSettings.SetSettingsForBuildTarget(BuildTargetGroup.Android, generalSettings);
|
||||
}
|
||||
|
||||
if (generalSettings.Manager == null)
|
||||
{
|
||||
XRManagerSettings managerSettings = ScriptableObject.CreateInstance<XRManagerSettings>();
|
||||
AssetDatabase.AddObjectToAsset(managerSettings, buildTargetSettings);
|
||||
generalSettings.Manager = managerSettings;
|
||||
}
|
||||
|
||||
while (generalSettings.Manager.activeLoaders.Count > 0)
|
||||
{
|
||||
string loaderName = generalSettings.Manager.activeLoaders[0].GetType().FullName;
|
||||
XRPackageMetadataStore.RemoveLoader(generalSettings.Manager, loaderName, BuildTargetGroup.Android);
|
||||
}
|
||||
|
||||
bool success = XRPackageMetadataStore.AssignLoader(generalSettings.Manager, "PXR_Loader", BuildTargetGroup.Android);
|
||||
if (!success)
|
||||
{
|
||||
Debug.LogWarning("Could not assign PICO XR Loader. Check that the PICO Integration package is imported.");
|
||||
}
|
||||
|
||||
EditorUtility.SetDirty(generalSettings.Manager);
|
||||
EditorUtility.SetDirty(generalSettings);
|
||||
EditorUtility.SetDirty(buildTargetSettings);
|
||||
}
|
||||
|
||||
private static string ResolveTargetHost()
|
||||
{
|
||||
string envHost = Environment.GetEnvironmentVariable(TargetHostEnvVar);
|
||||
if (IsUsableTargetHost(envHost))
|
||||
{
|
||||
return envHost.Trim();
|
||||
}
|
||||
|
||||
string discoveredHost = GetPreferredLocalIPv4Address();
|
||||
return string.IsNullOrEmpty(discoveredHost) ? DefaultTargetHost : discoveredHost;
|
||||
}
|
||||
|
||||
private static string GetPreferredLocalIPv4Address()
|
||||
{
|
||||
List<string> candidates = new List<string>();
|
||||
foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces())
|
||||
{
|
||||
if (networkInterface.OperationalStatus != OperationalStatus.Up)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Loopback ||
|
||||
networkInterface.NetworkInterfaceType == NetworkInterfaceType.Tunnel)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (UnicastIPAddressInformation addressInfo in networkInterface.GetIPProperties().UnicastAddresses)
|
||||
{
|
||||
string address = addressInfo.Address.ToString();
|
||||
if (IsUsableTargetHost(address))
|
||||
{
|
||||
candidates.Add(address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return candidates
|
||||
.OrderByDescending(GetAddressScore)
|
||||
.ThenBy(address => address, StringComparer.Ordinal)
|
||||
.FirstOrDefault();
|
||||
}
|
||||
|
||||
private static bool IsUsableTargetHost(string value)
|
||||
{
|
||||
string trimmed = value == null ? string.Empty : value.Trim();
|
||||
if (!IPAddress.TryParse(trimmed, out IPAddress address) ||
|
||||
address.AddressFamily != AddressFamily.InterNetwork)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
byte[] bytes = address.GetAddressBytes();
|
||||
bool loopback = bytes[0] == 127;
|
||||
bool linkLocal = bytes[0] == 169 && bytes[1] == 254;
|
||||
bool unspecified = address.Equals(IPAddress.Any);
|
||||
return !loopback && !linkLocal && !unspecified;
|
||||
}
|
||||
|
||||
private static int GetAddressScore(string address)
|
||||
{
|
||||
string[] parts = address.Split('.');
|
||||
if (parts.Length != 4 ||
|
||||
!int.TryParse(parts[0], out int first) ||
|
||||
!int.TryParse(parts[1], out int second))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (first == 192 && second == 168)
|
||||
{
|
||||
return 50;
|
||||
}
|
||||
|
||||
if (first == 10)
|
||||
{
|
||||
return 40;
|
||||
}
|
||||
|
||||
if (first == 172 && second >= 16 && second <= 31)
|
||||
{
|
||||
return 35;
|
||||
}
|
||||
|
||||
if (first == 198 && (second == 18 || second == 19))
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
11
unity/XR_RM_PICO_UDP_Sender/Assets/Editor/XrRmUdpSenderProjectSetup.cs.meta
Executable file
11
unity/XR_RM_PICO_UDP_Sender/Assets/Editor/XrRmUdpSenderProjectSetup.cs.meta
Executable file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a7d6206b5dd744f0967d32f4f87461d1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/Resources.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/Resources.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 25fc9e3c58c3ff84e8cbe943ce7900a9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
4106
unity/XR_RM_PICO_UDP_Sender/Assets/Resources/PXR_DebuggerPanel.prefab
Executable file
4106
unity/XR_RM_PICO_UDP_Sender/Assets/Resources/PXR_DebuggerPanel.prefab
Executable file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2397792c84896c346b1c9782d84b4b7b
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
61
unity/XR_RM_PICO_UDP_Sender/Assets/Resources/PXR_PICODebugger.prefab
Executable file
61
unity/XR_RM_PICO_UDP_Sender/Assets/Resources/PXR_PICODebugger.prefab
Executable file
@ -0,0 +1,61 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &5110496278330240476
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1730820333764801041}
|
||||
- component: {fileID: 2674595972798899402}
|
||||
- component: {fileID: 8854059141330627992}
|
||||
m_Layer: 0
|
||||
m_Name: PXR_PICODebugger
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1730820333764801041
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5110496278330240476}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1.07, z: 3.09}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &2674595972798899402
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5110496278330240476}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 16f20e8e0453b4ff8a0517178b2117ea, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
config: {fileID: 0}
|
||||
uiController: {fileID: 0}
|
||||
--- !u!114 &8854059141330627992
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5110496278330240476}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d3a4e4bf576cc4998a8d2b5a8b5a3399, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae56b4152c065f545b90d4d8a15a5d90
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
19
unity/XR_RM_PICO_UDP_Sender/Assets/Resources/PXR_PlatformSetting.asset
Executable file
19
unity/XR_RM_PICO_UDP_Sender/Assets/Resources/PXR_PlatformSetting.asset
Executable file
@ -0,0 +1,19 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 508edb944d24e574595a91425051a8e4, type: 3}
|
||||
m_Name: PXR_PlatformSetting
|
||||
m_EditorClassIdentifier:
|
||||
entitlementCheckSimulation: 0
|
||||
startTimeEntitlementCheck: 0
|
||||
appID:
|
||||
useHighlight: 1
|
||||
deviceSN: []
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c14f862605e067e48a1812ecaeae6cc6
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
55
unity/XR_RM_PICO_UDP_Sender/Assets/Resources/PXR_ProjectSetting.asset
Executable file
55
unity/XR_RM_PICO_UDP_Sender/Assets/Resources/PXR_ProjectSetting.asset
Executable file
@ -0,0 +1,55 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 261e5777ad4ae374eb318821653de6aa, type: 3}
|
||||
m_Name: PXR_ProjectSetting
|
||||
m_EditorClassIdentifier:
|
||||
useContentProtect: 0
|
||||
handTracking: 0
|
||||
adaptiveHand: 0
|
||||
highFrequencyHand: 0
|
||||
openMRC: 1
|
||||
faceTracking: 0
|
||||
lipsyncTracking: 0
|
||||
eyeTracking: 0
|
||||
eyetrackingCalibration: 0
|
||||
enableETFR: 0
|
||||
foveationLevel: -1
|
||||
latelatching: 0
|
||||
latelatchingDebug: 0
|
||||
enableSubsampled: 0
|
||||
bodyTracking: 0
|
||||
adaptiveResolution: 0
|
||||
stageMode: 0
|
||||
videoSeeThrough: 0
|
||||
spatialAnchor: 0
|
||||
sceneCapture: 0
|
||||
sharedAnchor: 0
|
||||
spatialMesh: 0
|
||||
planeDetection: 0
|
||||
secureMR: 0
|
||||
meshLod: 0
|
||||
superResolution: 0
|
||||
normalSharpening: 0
|
||||
qualitySharpening: 0
|
||||
fixedFoveatedSharpening: 0
|
||||
selfAdaptiveSharpening: 0
|
||||
handTrackingSupportType: 0
|
||||
arFoundation: 0
|
||||
mrSafeguard: 0
|
||||
enableRecommendMSAA: 0
|
||||
recommendSubsamping: 0
|
||||
recommendMSAA: 0
|
||||
validationFFREnabled: 0
|
||||
validationETFREnabled: 0
|
||||
portalInited: 1
|
||||
isDataCollectionDisabled: 0
|
||||
portalFirstSelected: 0
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 452d3aa7f191564489e0b6bd1da20f22
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/Scenes.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/Scenes.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a106f6617ef14bc88f737d82559a136e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
212
unity/XR_RM_PICO_UDP_Sender/Assets/Scenes/Main.unity
Normal file
212
unity/XR_RM_PICO_UDP_Sender/Assets/Scenes/Main.unity
Normal file
@ -0,0 +1,212 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!29 &1
|
||||
OcclusionCullingSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_OcclusionBakeSettings:
|
||||
smallestOccluder: 5
|
||||
smallestHole: 0.25
|
||||
backfaceThreshold: 100
|
||||
m_SceneGUID: 00000000000000000000000000000000
|
||||
m_OcclusionCullingData: {fileID: 0}
|
||||
--- !u!104 &2
|
||||
RenderSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 9
|
||||
m_Fog: 0
|
||||
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
m_FogMode: 3
|
||||
m_FogDensity: 0.01
|
||||
m_LinearFogStart: 0
|
||||
m_LinearFogEnd: 300
|
||||
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
|
||||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
|
||||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
|
||||
m_AmbientIntensity: 1
|
||||
m_AmbientMode: 3
|
||||
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
|
||||
m_SkyboxMaterial: {fileID: 0}
|
||||
m_HaloStrength: 0.5
|
||||
m_FlareStrength: 1
|
||||
m_FlareFadeSpeed: 3
|
||||
m_HaloTexture: {fileID: 0}
|
||||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_DefaultReflectionMode: 0
|
||||
m_DefaultReflectionResolution: 128
|
||||
m_ReflectionBounces: 1
|
||||
m_ReflectionIntensity: 1
|
||||
m_CustomReflection: {fileID: 0}
|
||||
m_Sun: {fileID: 0}
|
||||
m_UseRadianceAmbientProbe: 0
|
||||
--- !u!157 &3
|
||||
LightmapSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 12
|
||||
m_GIWorkflowMode: 1
|
||||
m_GISettings:
|
||||
serializedVersion: 2
|
||||
m_BounceScale: 1
|
||||
m_IndirectOutputScale: 1
|
||||
m_AlbedoBoost: 1
|
||||
m_EnvironmentLightingMode: 0
|
||||
m_EnableBakedLightmaps: 1
|
||||
m_EnableRealtimeLightmaps: 0
|
||||
m_LightmapEditorSettings:
|
||||
serializedVersion: 12
|
||||
m_Resolution: 2
|
||||
m_BakeResolution: 40
|
||||
m_AtlasSize: 1024
|
||||
m_AO: 0
|
||||
m_AOMaxDistance: 1
|
||||
m_CompAOExponent: 1
|
||||
m_CompAOExponentDirect: 0
|
||||
m_ExtractAmbientOcclusion: 0
|
||||
m_Padding: 2
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_LightmapsBakeMode: 1
|
||||
m_TextureCompression: 1
|
||||
m_FinalGather: 0
|
||||
m_FinalGatherFiltering: 1
|
||||
m_FinalGatherRayCount: 256
|
||||
m_ReflectionCompression: 2
|
||||
m_MixedBakeMode: 2
|
||||
m_BakeBackend: 1
|
||||
m_PVRSampling: 1
|
||||
m_PVRDirectSampleCount: 32
|
||||
m_PVRSampleCount: 512
|
||||
m_PVRBounces: 2
|
||||
m_PVREnvironmentSampleCount: 256
|
||||
m_PVREnvironmentReferencePointCount: 2048
|
||||
m_PVRFilteringMode: 1
|
||||
m_PVRDenoiserTypeDirect: 1
|
||||
m_PVRDenoiserTypeIndirect: 1
|
||||
m_PVRDenoiserTypeAO: 1
|
||||
m_PVRFilterTypeDirect: 0
|
||||
m_PVRFilterTypeIndirect: 0
|
||||
m_PVRFilterTypeAO: 0
|
||||
m_PVREnvironmentMIS: 1
|
||||
m_PVRCulling: 1
|
||||
m_PVRFilteringGaussRadiusDirect: 1
|
||||
m_PVRFilteringGaussRadiusIndirect: 5
|
||||
m_PVRFilteringGaussRadiusAO: 2
|
||||
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
|
||||
m_PVRFilteringAtrousPositionSigmaIndirect: 2
|
||||
m_PVRFilteringAtrousPositionSigmaAO: 1
|
||||
m_ExportTrainingData: 0
|
||||
m_TrainingDataDestination: TrainingData
|
||||
m_LightProbeSampleCountMultiplier: 4
|
||||
m_LightingDataAsset: {fileID: 0}
|
||||
m_LightingSettings: {fileID: 0}
|
||||
--- !u!196 &4
|
||||
NavMeshSettings:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 3
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: 0.4
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
minRegionArea: 2
|
||||
manualCellSize: 0
|
||||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
buildHeightMesh: 0
|
||||
maxJobWorkers: 0
|
||||
preserveTilesOutsideBounds: 0
|
||||
debug:
|
||||
m_Flags: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!1 &100000
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 100001}
|
||||
- component: {fileID: 100002}
|
||||
- component: {fileID: 100003}
|
||||
- component: {fileID: 100004}
|
||||
m_Layer: 0
|
||||
m_Name: PicoControllerUdpSender
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &100001
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 100000}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &100002
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e4c7a11d85854eddb40a6a614bfb129c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
host: 192.168.9.99
|
||||
port: 15000
|
||||
sendHz: 60
|
||||
convertUnityToProjectCoordinates: 1
|
||||
sendOnStart: 1
|
||||
--- !u!114 &100003
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6d53b4ec62e44220a350bfe97f87d681, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
targetFrameRate: 90
|
||||
showOnStart: 1
|
||||
togglePanelWithMenuButton: 1
|
||||
--- !u!114 &100004
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 09740726046b89c1b89aad001e0caa83, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
keepAwake: 1
|
||||
applyWhenSendingOnly: 1
|
||||
usePicoEnterpriseApi: 1
|
||||
useAndroidWindowFlag: 1
|
||||
picoRefreshSeconds: 30
|
||||
--- !u!1660057539 &9223372036854775807
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Roots:
|
||||
- {fileID: 100001}
|
||||
7
unity/XR_RM_PICO_UDP_Sender/Assets/Scenes/Main.unity.meta
Executable file
7
unity/XR_RM_PICO_UDP_Sender/Assets/Scenes/Main.unity.meta
Executable file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3f6f64df724c4cf3a040530c120c37d7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f169e2b3773b4251a0eebc3dd88e1b7d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
374
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoControllerUdpSender.cs
Executable file
374
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoControllerUdpSender.cs
Executable file
@ -0,0 +1,374 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.XR;
|
||||
|
||||
public class PicoControllerUdpSender : MonoBehaviour
|
||||
{
|
||||
private const string HostPrefsKey = "xr_rm_udp_sender.host";
|
||||
private const string PortPrefsKey = "xr_rm_udp_sender.port";
|
||||
private const string SendHzPrefsKey = "xr_rm_udp_sender.send_hz";
|
||||
private const string ConvertPrefsKey = "xr_rm_udp_sender.convert_coordinates";
|
||||
|
||||
[Header("ROS UDP Target")]
|
||||
public string host = "192.168.9.99";
|
||||
public int port = 15000;
|
||||
|
||||
[Header("Send")]
|
||||
public float sendHz = 60.0f;
|
||||
public bool convertUnityToProjectCoordinates = true;
|
||||
public bool sendOnStart = true;
|
||||
|
||||
private UdpClient client;
|
||||
private IPEndPoint endPoint;
|
||||
private float nextSendTime;
|
||||
private bool sendEnabled;
|
||||
private readonly Packet packet = new Packet();
|
||||
private readonly List<InputDevice> deviceBuffer = new List<InputDevice>();
|
||||
|
||||
public bool SendEnabled => sendEnabled;
|
||||
public bool HasEndpoint => endPoint != null;
|
||||
public bool LeftDeviceValid { get; private set; }
|
||||
public bool RightDeviceValid { get; private set; }
|
||||
public bool LeftGripPressed { get; private set; }
|
||||
public bool RightGripPressed { get; private set; }
|
||||
public string LastError { get; private set; } = string.Empty;
|
||||
public double LastSendTime { get; private set; }
|
||||
public uint SentPackets { get; private set; }
|
||||
|
||||
[Serializable]
|
||||
private class Packet
|
||||
{
|
||||
public double t;
|
||||
public string frame_id = "xr_world";
|
||||
public Controllers controllers = new Controllers();
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class Controllers
|
||||
{
|
||||
public ControllerPayload left = new ControllerPayload();
|
||||
public ControllerPayload right = new ControllerPayload();
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class ControllerPayload
|
||||
{
|
||||
public bool grip;
|
||||
public float trigger;
|
||||
public float[] pos = new float[] { 0.0f, 1.0f, 0.0f };
|
||||
public float[] quat = new float[] { 0.0f, 0.0f, 0.0f, 1.0f };
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
LoadConfig();
|
||||
ReopenClient();
|
||||
sendEnabled = sendOnStart;
|
||||
nextSendTime = 0.0f;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
SendSafeStopPacket();
|
||||
CloseClient();
|
||||
}
|
||||
|
||||
private void OnApplicationPause(bool pauseStatus)
|
||||
{
|
||||
if (pauseStatus)
|
||||
{
|
||||
SendSafeStopPacket();
|
||||
return;
|
||||
}
|
||||
|
||||
nextSendTime = 0.0f;
|
||||
}
|
||||
|
||||
private void OnApplicationFocus(bool hasFocus)
|
||||
{
|
||||
if (!hasFocus)
|
||||
{
|
||||
SendSafeStopPacket();
|
||||
return;
|
||||
}
|
||||
|
||||
nextSendTime = 0.0f;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!sendEnabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (Time.unscaledTime < nextSendTime)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
nextSendTime = Time.unscaledTime + 1.0f / Mathf.Max(sendHz, 1.0f);
|
||||
packet.t = Time.realtimeSinceStartupAsDouble;
|
||||
|
||||
FillController(XRNode.LeftHand, packet.controllers.left);
|
||||
FillController(XRNode.RightHand, packet.controllers.right);
|
||||
SendPacket();
|
||||
}
|
||||
|
||||
public bool ApplyConfig(string newHost, int newPort, float newSendHz, bool newConvertUnityToProjectCoordinates, bool save)
|
||||
{
|
||||
string trimmedHost = newHost == null ? string.Empty : newHost.Trim();
|
||||
if (!TryParseTargetAddress(trimmedHost, out IPAddress address))
|
||||
{
|
||||
LastError = $"Invalid IPv4 address: {newHost}";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (newPort < 1 || newPort > 65535)
|
||||
{
|
||||
LastError = $"Invalid UDP port: {newPort}";
|
||||
return false;
|
||||
}
|
||||
|
||||
host = trimmedHost;
|
||||
port = newPort;
|
||||
sendHz = Mathf.Clamp(newSendHz, 1.0f, 120.0f);
|
||||
convertUnityToProjectCoordinates = newConvertUnityToProjectCoordinates;
|
||||
ReopenClient(address);
|
||||
if (endPoint == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (save)
|
||||
{
|
||||
SaveConfig();
|
||||
}
|
||||
|
||||
LastError = string.Empty;
|
||||
return true;
|
||||
}
|
||||
|
||||
public void SetSending(bool enabled)
|
||||
{
|
||||
if (!enabled && sendEnabled)
|
||||
{
|
||||
SendSafeStopPacket();
|
||||
}
|
||||
|
||||
sendEnabled = enabled;
|
||||
nextSendTime = 0.0f;
|
||||
}
|
||||
|
||||
private void LoadConfig()
|
||||
{
|
||||
string savedHost = PlayerPrefs.GetString(HostPrefsKey, host);
|
||||
if (TryParseTargetAddress(savedHost, out _))
|
||||
{
|
||||
host = savedHost.Trim();
|
||||
}
|
||||
|
||||
port = Mathf.Clamp(PlayerPrefs.GetInt(PortPrefsKey, port), 1, 65535);
|
||||
sendHz = Mathf.Clamp(PlayerPrefs.GetFloat(SendHzPrefsKey, sendHz), 1.0f, 120.0f);
|
||||
convertUnityToProjectCoordinates = PlayerPrefs.GetInt(ConvertPrefsKey, convertUnityToProjectCoordinates ? 1 : 0) != 0;
|
||||
}
|
||||
|
||||
private void SaveConfig()
|
||||
{
|
||||
PlayerPrefs.SetString(HostPrefsKey, host);
|
||||
PlayerPrefs.SetInt(PortPrefsKey, port);
|
||||
PlayerPrefs.SetFloat(SendHzPrefsKey, sendHz);
|
||||
PlayerPrefs.SetInt(ConvertPrefsKey, convertUnityToProjectCoordinates ? 1 : 0);
|
||||
PlayerPrefs.Save();
|
||||
}
|
||||
|
||||
private void ReopenClient()
|
||||
{
|
||||
if (TryParseTargetAddress(host, out IPAddress address))
|
||||
{
|
||||
ReopenClient(address);
|
||||
return;
|
||||
}
|
||||
|
||||
LastError = $"Invalid IPv4 address: {host}";
|
||||
CloseClient();
|
||||
endPoint = null;
|
||||
}
|
||||
|
||||
private void ReopenClient(IPAddress address)
|
||||
{
|
||||
try
|
||||
{
|
||||
CloseClient();
|
||||
client = new UdpClient();
|
||||
endPoint = new IPEndPoint(address, port);
|
||||
LastError = string.Empty;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
LastError = exception.Message;
|
||||
CloseClient();
|
||||
endPoint = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void FillController(XRNode node, ControllerPayload payload)
|
||||
{
|
||||
InputDevice device = GetControllerDevice(node);
|
||||
bool isLeft = node == XRNode.LeftHand;
|
||||
if (isLeft)
|
||||
{
|
||||
LeftDeviceValid = device.isValid;
|
||||
}
|
||||
else
|
||||
{
|
||||
RightDeviceValid = device.isValid;
|
||||
}
|
||||
|
||||
if (!device.isValid)
|
||||
{
|
||||
payload.grip = false;
|
||||
payload.trigger = 0.0f;
|
||||
SetGripState(isLeft, false);
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3 position = Vector3.zero;
|
||||
Quaternion rotation = Quaternion.identity;
|
||||
float trigger = 0.0f;
|
||||
float gripValue = 0.0f;
|
||||
bool gripButton = false;
|
||||
|
||||
device.TryGetFeatureValue(CommonUsages.devicePosition, out position);
|
||||
device.TryGetFeatureValue(CommonUsages.deviceRotation, out rotation);
|
||||
device.TryGetFeatureValue(CommonUsages.trigger, out trigger);
|
||||
device.TryGetFeatureValue(CommonUsages.grip, out gripValue);
|
||||
device.TryGetFeatureValue(CommonUsages.gripButton, out gripButton);
|
||||
|
||||
payload.grip = gripButton || gripValue > 0.5f;
|
||||
SetGripState(isLeft, payload.grip);
|
||||
payload.trigger = Mathf.Clamp01(trigger);
|
||||
|
||||
if (convertUnityToProjectCoordinates)
|
||||
{
|
||||
payload.pos[0] = position.x;
|
||||
payload.pos[1] = position.y;
|
||||
payload.pos[2] = -position.z;
|
||||
|
||||
payload.quat[0] = -rotation.x;
|
||||
payload.quat[1] = -rotation.y;
|
||||
payload.quat[2] = rotation.z;
|
||||
payload.quat[3] = rotation.w;
|
||||
}
|
||||
else
|
||||
{
|
||||
payload.pos[0] = position.x;
|
||||
payload.pos[1] = position.y;
|
||||
payload.pos[2] = position.z;
|
||||
|
||||
payload.quat[0] = rotation.x;
|
||||
payload.quat[1] = rotation.y;
|
||||
payload.quat[2] = rotation.z;
|
||||
payload.quat[3] = rotation.w;
|
||||
}
|
||||
}
|
||||
|
||||
private InputDevice GetControllerDevice(XRNode node)
|
||||
{
|
||||
InputDevice device = InputDevices.GetDeviceAtXRNode(node);
|
||||
if (device.isValid)
|
||||
{
|
||||
return device;
|
||||
}
|
||||
|
||||
InputDeviceCharacteristics handedness = node == XRNode.LeftHand
|
||||
? InputDeviceCharacteristics.Left
|
||||
: InputDeviceCharacteristics.Right;
|
||||
|
||||
device = FindControllerByCharacteristics(
|
||||
InputDeviceCharacteristics.Controller | InputDeviceCharacteristics.HeldInHand | handedness);
|
||||
if (device.isValid)
|
||||
{
|
||||
return device;
|
||||
}
|
||||
|
||||
return FindControllerByCharacteristics(InputDeviceCharacteristics.Controller | handedness);
|
||||
}
|
||||
|
||||
private InputDevice FindControllerByCharacteristics(InputDeviceCharacteristics characteristics)
|
||||
{
|
||||
deviceBuffer.Clear();
|
||||
InputDevices.GetDevicesWithCharacteristics(characteristics, deviceBuffer);
|
||||
for (int i = 0; i < deviceBuffer.Count; i++)
|
||||
{
|
||||
if (deviceBuffer[i].isValid)
|
||||
{
|
||||
return deviceBuffer[i];
|
||||
}
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
|
||||
private static bool TryParseTargetAddress(string value, out IPAddress address)
|
||||
{
|
||||
string trimmed = value == null ? string.Empty : value.Trim();
|
||||
return IPAddress.TryParse(trimmed, out address) && address.AddressFamily == AddressFamily.InterNetwork;
|
||||
}
|
||||
|
||||
private void SetGripState(bool isLeft, bool pressed)
|
||||
{
|
||||
if (isLeft)
|
||||
{
|
||||
LeftGripPressed = pressed;
|
||||
}
|
||||
else
|
||||
{
|
||||
RightGripPressed = pressed;
|
||||
}
|
||||
}
|
||||
|
||||
private void SendSafeStopPacket()
|
||||
{
|
||||
packet.t = Time.realtimeSinceStartupAsDouble;
|
||||
packet.controllers.left.grip = false;
|
||||
packet.controllers.left.trigger = 0.0f;
|
||||
packet.controllers.right.grip = false;
|
||||
packet.controllers.right.trigger = 0.0f;
|
||||
LeftGripPressed = false;
|
||||
RightGripPressed = false;
|
||||
SendPacket();
|
||||
}
|
||||
|
||||
private void SendPacket()
|
||||
{
|
||||
if (client == null || endPoint == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string json = JsonUtility.ToJson(packet);
|
||||
byte[] bytes = Encoding.UTF8.GetBytes(json);
|
||||
try
|
||||
{
|
||||
client.Send(bytes, bytes.Length, endPoint);
|
||||
LastSendTime = Time.realtimeSinceStartupAsDouble;
|
||||
SentPackets++;
|
||||
LastError = string.Empty;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
LastError = exception.Message;
|
||||
}
|
||||
}
|
||||
|
||||
private void CloseClient()
|
||||
{
|
||||
client?.Close();
|
||||
client = null;
|
||||
}
|
||||
}
|
||||
11
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoControllerUdpSender.cs.meta
Executable file
11
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoControllerUdpSender.cs.meta
Executable file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e4c7a11d85854eddb40a6a614bfb129c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
372
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoKeepAwake.cs
Normal file
372
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoKeepAwake.cs
Normal file
@ -0,0 +1,372 @@
|
||||
using System;
|
||||
using Unity.XR.PICO.TOBSupport;
|
||||
using UnityEngine;
|
||||
|
||||
[DisallowMultipleComponent]
|
||||
public class PicoKeepAwake : MonoBehaviour
|
||||
{
|
||||
[Header("Policy")]
|
||||
public bool keepAwake = true;
|
||||
public bool applyWhenSendingOnly = true;
|
||||
|
||||
[Header("Backends")]
|
||||
public bool usePicoEnterpriseApi = true;
|
||||
public bool useAndroidWindowFlag = true;
|
||||
public float picoRefreshSeconds = 30.0f;
|
||||
|
||||
private const int AndroidFlagKeepScreenOn = 128;
|
||||
|
||||
private PicoControllerUdpSender sender;
|
||||
private bool enterpriseInitialized;
|
||||
private bool enterpriseBound;
|
||||
private bool enterpriseBindingRequested;
|
||||
private bool picoSettingsApplied;
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
private bool picoSystemDelaysCaptured;
|
||||
private SleepDelayTimeEnum previousSleepDelay;
|
||||
private ScreenOffDelayTimeEnum previousScreenOffDelay;
|
||||
#endif
|
||||
private float nextPicoRefreshTime;
|
||||
private int lastScreenOffDelayResult = int.MinValue;
|
||||
private string lastPicoError = string.Empty;
|
||||
|
||||
public bool KeepAwakeActive { get; private set; }
|
||||
public bool EnterpriseBound => enterpriseBound;
|
||||
public string StatusText { get; private set; } = "KeepAwake idle";
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
sender = GetComponent<PicoControllerUdpSender>();
|
||||
ApplyUnityKeepAwakeDefaults();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (usePicoEnterpriseApi)
|
||||
{
|
||||
EnsureEnterpriseBinding();
|
||||
}
|
||||
|
||||
RefreshDesiredState(true);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
RefreshDesiredState(false);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
DisableKeepAwake();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
DisableKeepAwake();
|
||||
}
|
||||
|
||||
private void OnApplicationPause(bool pauseStatus)
|
||||
{
|
||||
if (!pauseStatus)
|
||||
{
|
||||
nextPicoRefreshTime = 0.0f;
|
||||
RefreshDesiredState(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnApplicationFocus(bool hasFocus)
|
||||
{
|
||||
if (hasFocus)
|
||||
{
|
||||
nextPicoRefreshTime = 0.0f;
|
||||
RefreshDesiredState(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshDesiredState(bool force)
|
||||
{
|
||||
bool shouldKeepAwake = keepAwake && (!applyWhenSendingOnly || sender == null || sender.SendEnabled);
|
||||
if (!shouldKeepAwake)
|
||||
{
|
||||
if (KeepAwakeActive)
|
||||
{
|
||||
DisableKeepAwake();
|
||||
}
|
||||
else
|
||||
{
|
||||
RefreshStatus();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!KeepAwakeActive)
|
||||
{
|
||||
EnableKeepAwake();
|
||||
return;
|
||||
}
|
||||
|
||||
if ((force || Time.unscaledTime >= nextPicoRefreshTime) && usePicoEnterpriseApi)
|
||||
{
|
||||
ApplyPicoEnterpriseKeepAwake();
|
||||
}
|
||||
|
||||
RefreshStatus();
|
||||
}
|
||||
|
||||
private void EnableKeepAwake()
|
||||
{
|
||||
ApplyUnityKeepAwakeDefaults();
|
||||
SetAndroidKeepScreenOn(true);
|
||||
|
||||
KeepAwakeActive = true;
|
||||
nextPicoRefreshTime = 0.0f;
|
||||
|
||||
if (usePicoEnterpriseApi)
|
||||
{
|
||||
EnsureEnterpriseBinding();
|
||||
ApplyPicoEnterpriseKeepAwake();
|
||||
}
|
||||
|
||||
RefreshStatus();
|
||||
}
|
||||
|
||||
private void DisableKeepAwake()
|
||||
{
|
||||
if (!KeepAwakeActive)
|
||||
{
|
||||
RefreshStatus();
|
||||
return;
|
||||
}
|
||||
|
||||
if (usePicoEnterpriseApi)
|
||||
{
|
||||
ReleasePicoEnterpriseWakeLock();
|
||||
}
|
||||
|
||||
SetAndroidKeepScreenOn(false);
|
||||
Screen.sleepTimeout = SleepTimeout.SystemSetting;
|
||||
KeepAwakeActive = false;
|
||||
RefreshStatus();
|
||||
}
|
||||
|
||||
private static void ApplyUnityKeepAwakeDefaults()
|
||||
{
|
||||
Application.runInBackground = true;
|
||||
Screen.sleepTimeout = SleepTimeout.NeverSleep;
|
||||
}
|
||||
|
||||
private void EnsureEnterpriseBinding()
|
||||
{
|
||||
if (!usePicoEnterpriseApi || enterpriseBindingRequested)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
enterpriseBindingRequested = true;
|
||||
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
try
|
||||
{
|
||||
enterpriseInitialized = PXR_Enterprise.InitEnterpriseService(false);
|
||||
PXR_Enterprise.BindEnterpriseService(OnEnterpriseBound);
|
||||
lastPicoError = enterpriseInitialized ? string.Empty : "PICO enterprise init failed";
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
enterpriseInitialized = false;
|
||||
lastPicoError = exception.Message;
|
||||
}
|
||||
#else
|
||||
enterpriseInitialized = true;
|
||||
enterpriseBound = true;
|
||||
#endif
|
||||
RefreshStatus();
|
||||
}
|
||||
|
||||
private void OnEnterpriseBound(bool success)
|
||||
{
|
||||
enterpriseBound = success;
|
||||
if (!success)
|
||||
{
|
||||
lastPicoError = "PICO enterprise bind failed";
|
||||
RefreshStatus();
|
||||
return;
|
||||
}
|
||||
|
||||
lastPicoError = string.Empty;
|
||||
nextPicoRefreshTime = 0.0f;
|
||||
if (KeepAwakeActive)
|
||||
{
|
||||
ApplyPicoEnterpriseKeepAwake();
|
||||
}
|
||||
|
||||
RefreshStatus();
|
||||
}
|
||||
|
||||
private void ApplyPicoEnterpriseKeepAwake()
|
||||
{
|
||||
nextPicoRefreshTime = Time.unscaledTime + Mathf.Max(5.0f, picoRefreshSeconds);
|
||||
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
if (!enterpriseInitialized)
|
||||
{
|
||||
EnsureEnterpriseBinding();
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
CapturePicoSystemDelays();
|
||||
PXR_Enterprise.AcquireWakeLock();
|
||||
PXR_Enterprise.PropertySetSleepDelay(SleepDelayTimeEnum.NEVER);
|
||||
PXR_Enterprise.PropertySetScreenOffDelay(ScreenOffDelayTimeEnum.NEVER, OnScreenOffDelaySet);
|
||||
PXR_Enterprise.SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_AUTOSLEEP, SwitchEnum.S_OFF);
|
||||
|
||||
picoSettingsApplied = true;
|
||||
lastPicoError = string.Empty;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
lastPicoError = exception.Message;
|
||||
}
|
||||
#else
|
||||
picoSettingsApplied = true;
|
||||
#endif
|
||||
RefreshStatus();
|
||||
}
|
||||
|
||||
private void CapturePicoSystemDelays()
|
||||
{
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
if (picoSystemDelaysCaptured || !enterpriseBound)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
previousSleepDelay = PXR_Enterprise.GetSleepDelay();
|
||||
previousScreenOffDelay = PXR_Enterprise.GetScreenOffDelay();
|
||||
picoSystemDelaysCaptured = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
private void OnScreenOffDelaySet(int result)
|
||||
{
|
||||
lastScreenOffDelayResult = result;
|
||||
RefreshStatus();
|
||||
}
|
||||
|
||||
private void ReleasePicoEnterpriseWakeLock()
|
||||
{
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
if (!enterpriseInitialized)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
PXR_Enterprise.ReleaseWakeLock();
|
||||
RestorePicoSystemDelays();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
lastPicoError = exception.Message;
|
||||
}
|
||||
#endif
|
||||
picoSettingsApplied = false;
|
||||
lastScreenOffDelayResult = int.MinValue;
|
||||
}
|
||||
|
||||
private void RestorePicoSystemDelays()
|
||||
{
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
if (!picoSystemDelaysCaptured)
|
||||
{
|
||||
PXR_Enterprise.SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_AUTOSLEEP, SwitchEnum.S_ON);
|
||||
return;
|
||||
}
|
||||
|
||||
PXR_Enterprise.PropertySetSleepDelay(previousSleepDelay);
|
||||
PXR_Enterprise.PropertySetScreenOffDelay(previousScreenOffDelay, null);
|
||||
PXR_Enterprise.SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_AUTOSLEEP, SwitchEnum.S_ON);
|
||||
#endif
|
||||
}
|
||||
|
||||
private void RefreshStatus()
|
||||
{
|
||||
if (!keepAwake)
|
||||
{
|
||||
StatusText = "KeepAwake disabled";
|
||||
return;
|
||||
}
|
||||
|
||||
if (applyWhenSendingOnly && sender != null && !sender.SendEnabled)
|
||||
{
|
||||
StatusText = "KeepAwake waiting";
|
||||
return;
|
||||
}
|
||||
|
||||
string activeState = KeepAwakeActive ? "ON" : "OFF";
|
||||
string picoState = "PICO --";
|
||||
if (usePicoEnterpriseApi)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(lastPicoError))
|
||||
{
|
||||
picoState = "PICO error";
|
||||
}
|
||||
else if (enterpriseBindingRequested && !enterpriseInitialized)
|
||||
{
|
||||
picoState = "PICO init";
|
||||
}
|
||||
else if (enterpriseBound)
|
||||
{
|
||||
picoState = picoSettingsApplied ? "PICO applied" : "PICO bound";
|
||||
}
|
||||
else if (enterpriseBindingRequested)
|
||||
{
|
||||
picoState = "PICO binding";
|
||||
}
|
||||
}
|
||||
|
||||
string screenState = lastScreenOffDelayResult == int.MinValue
|
||||
? string.Empty
|
||||
: " screen " + lastScreenOffDelayResult.ToString();
|
||||
|
||||
StatusText = "KeepAwake " + activeState + " | " + picoState + screenState;
|
||||
}
|
||||
|
||||
private void SetAndroidKeepScreenOn(bool enabled)
|
||||
{
|
||||
if (!useAndroidWindowFlag)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
try
|
||||
{
|
||||
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
||||
{
|
||||
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
|
||||
activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
|
||||
{
|
||||
AndroidJavaObject window = activity.Call<AndroidJavaObject>("getWindow");
|
||||
if (enabled)
|
||||
{
|
||||
window.Call("addFlags", AndroidFlagKeepScreenOn);
|
||||
}
|
||||
else
|
||||
{
|
||||
window.Call("clearFlags", AndroidFlagKeepScreenOn);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
lastPicoError = exception.Message;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 09740726046b89c1b89aad001e0caa83
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
638
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoUdpConfigPanel.cs
Executable file
638
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoUdpConfigPanel.cs
Executable file
@ -0,0 +1,638 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.XR;
|
||||
|
||||
public class PicoUdpConfigPanel : MonoBehaviour
|
||||
{
|
||||
private const int RowCount = 6;
|
||||
private const float AxisRepeatDelay = 0.22f;
|
||||
|
||||
public int targetFrameRate = 90;
|
||||
public bool showOnStart = true;
|
||||
public bool togglePanelWithMenuButton = true;
|
||||
|
||||
private readonly Text[] rowTexts = new Text[RowCount];
|
||||
private readonly Color normalColor = new Color(0.86f, 0.91f, 0.96f, 1.0f);
|
||||
private readonly Color selectedColor = new Color(0.35f, 0.82f, 1.0f, 1.0f);
|
||||
private readonly Color mutedColor = new Color(0.58f, 0.66f, 0.74f, 1.0f);
|
||||
|
||||
private PicoControllerUdpSender sender;
|
||||
private Canvas canvas;
|
||||
private GameObject configPanelObject;
|
||||
private GameObject runHudObject;
|
||||
private Text titleText;
|
||||
private Text statusText;
|
||||
private Text footerText;
|
||||
private Text hudTitleText;
|
||||
private Text hudStatusText;
|
||||
private Text hudDetailText;
|
||||
private Text hudHintText;
|
||||
private TouchScreenKeyboard keyboard;
|
||||
private KeyboardTarget keyboardTarget;
|
||||
private string hostDraft;
|
||||
private int portDraft;
|
||||
private float sendHzDraft;
|
||||
private bool convertDraft;
|
||||
private PicoKeepAwake keepAwake;
|
||||
private int selectedRow;
|
||||
private float nextAxisTime;
|
||||
private bool wasActivatePressed;
|
||||
private bool wasApplyPressed;
|
||||
private bool wasMenuPressed;
|
||||
private string panelMessage = "Ready";
|
||||
|
||||
private enum KeyboardTarget
|
||||
{
|
||||
None,
|
||||
Host,
|
||||
Port,
|
||||
SendHz
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
sender = GetComponent<PicoControllerUdpSender>();
|
||||
if (sender == null)
|
||||
{
|
||||
sender = gameObject.AddComponent<PicoControllerUdpSender>();
|
||||
}
|
||||
|
||||
keepAwake = GetComponent<PicoKeepAwake>();
|
||||
if (keepAwake == null)
|
||||
{
|
||||
keepAwake = gameObject.AddComponent<PicoKeepAwake>();
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
ApplyRuntimeDefaults();
|
||||
EnsurePanel();
|
||||
LoadDraftsFromSender();
|
||||
canvas.gameObject.SetActive(true);
|
||||
SetConfigPanelVisible(showOnStart, false);
|
||||
RefreshPanel();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
HandleKeyboard();
|
||||
HandleControllerInput();
|
||||
RefreshPanel();
|
||||
}
|
||||
|
||||
private void ApplyRuntimeDefaults()
|
||||
{
|
||||
Application.targetFrameRate = targetFrameRate;
|
||||
Application.runInBackground = true;
|
||||
QualitySettings.vSyncCount = 0;
|
||||
Screen.sleepTimeout = SleepTimeout.NeverSleep;
|
||||
XRSettings.eyeTextureResolutionScale = 1.0f;
|
||||
}
|
||||
|
||||
private void EnsurePanel()
|
||||
{
|
||||
Camera panelCamera = Camera.main;
|
||||
if (panelCamera == null)
|
||||
{
|
||||
GameObject cameraObject = new GameObject("XR-RM Main Camera");
|
||||
cameraObject.tag = "MainCamera";
|
||||
panelCamera = cameraObject.AddComponent<Camera>();
|
||||
panelCamera.nearClipPlane = 0.05f;
|
||||
panelCamera.farClipPlane = 100.0f;
|
||||
panelCamera.clearFlags = CameraClearFlags.SolidColor;
|
||||
panelCamera.backgroundColor = new Color(0.02f, 0.025f, 0.03f, 1.0f);
|
||||
|
||||
if (FindObjectOfType<AudioListener>() == null)
|
||||
{
|
||||
cameraObject.AddComponent<AudioListener>();
|
||||
}
|
||||
|
||||
AddTrackedPoseDriverIfAvailable(cameraObject);
|
||||
}
|
||||
|
||||
GameObject canvasObject = new GameObject("XR-RM UDP Config Canvas", typeof(RectTransform), typeof(Canvas), typeof(CanvasScaler));
|
||||
canvasObject.transform.SetParent(panelCamera.transform, false);
|
||||
canvasObject.transform.localPosition = new Vector3(0.0f, 0.0f, 2.0f);
|
||||
canvasObject.transform.localRotation = Quaternion.identity;
|
||||
canvasObject.transform.localScale = Vector3.one * 0.0014f;
|
||||
|
||||
canvas = canvasObject.GetComponent<Canvas>();
|
||||
canvas.renderMode = RenderMode.WorldSpace;
|
||||
canvas.worldCamera = panelCamera;
|
||||
canvas.sortingOrder = 10;
|
||||
|
||||
RectTransform canvasRect = canvasObject.GetComponent<RectTransform>();
|
||||
canvasRect.sizeDelta = new Vector2(980.0f, 640.0f);
|
||||
|
||||
CanvasScaler scaler = canvasObject.GetComponent<CanvasScaler>();
|
||||
scaler.dynamicPixelsPerUnit = 12.0f;
|
||||
scaler.referencePixelsPerUnit = 100.0f;
|
||||
|
||||
configPanelObject = new GameObject("Config Panel", typeof(RectTransform), typeof(CanvasRenderer), typeof(Image));
|
||||
configPanelObject.transform.SetParent(canvasObject.transform, false);
|
||||
RectTransform backgroundRect = configPanelObject.GetComponent<RectTransform>();
|
||||
backgroundRect.anchorMin = Vector2.zero;
|
||||
backgroundRect.anchorMax = Vector2.one;
|
||||
backgroundRect.offsetMin = Vector2.zero;
|
||||
backgroundRect.offsetMax = Vector2.zero;
|
||||
Image background = configPanelObject.GetComponent<Image>();
|
||||
background.color = new Color(0.045f, 0.06f, 0.075f, 0.94f);
|
||||
|
||||
titleText = CreateText("Title", configPanelObject.transform, 38, FontStyle.Bold, TextAnchor.MiddleLeft);
|
||||
SetRect(titleText.rectTransform, new Vector2(0.06f, 0.82f), new Vector2(0.94f, 0.96f), Vector2.zero, Vector2.zero);
|
||||
|
||||
statusText = CreateText("Status", configPanelObject.transform, 22, FontStyle.Normal, TextAnchor.MiddleLeft);
|
||||
statusText.color = mutedColor;
|
||||
SetRect(statusText.rectTransform, new Vector2(0.06f, 0.72f), new Vector2(0.94f, 0.82f), Vector2.zero, Vector2.zero);
|
||||
|
||||
for (int i = 0; i < RowCount; i++)
|
||||
{
|
||||
Text rowText = CreateText("Row " + i, configPanelObject.transform, 27, FontStyle.Normal, TextAnchor.MiddleLeft);
|
||||
float top = 0.68f - i * 0.09f;
|
||||
SetRect(rowText.rectTransform, new Vector2(0.08f, top - 0.075f), new Vector2(0.92f, top), Vector2.zero, Vector2.zero);
|
||||
rowTexts[i] = rowText;
|
||||
}
|
||||
|
||||
footerText = CreateText("Footer", configPanelObject.transform, 23, FontStyle.Normal, TextAnchor.MiddleCenter);
|
||||
footerText.color = normalColor;
|
||||
SetRect(footerText.rectTransform, new Vector2(0.05f, 0.025f), new Vector2(0.95f, 0.15f), Vector2.zero, Vector2.zero);
|
||||
|
||||
CreateRunHud(canvasObject.transform);
|
||||
}
|
||||
|
||||
private void CreateRunHud(Transform canvasParent)
|
||||
{
|
||||
runHudObject = new GameObject("Run HUD", typeof(RectTransform), typeof(CanvasRenderer), typeof(Image));
|
||||
runHudObject.transform.SetParent(canvasParent, false);
|
||||
RectTransform hudRect = runHudObject.GetComponent<RectTransform>();
|
||||
hudRect.anchorMin = Vector2.zero;
|
||||
hudRect.anchorMax = Vector2.one;
|
||||
hudRect.offsetMin = Vector2.zero;
|
||||
hudRect.offsetMax = Vector2.zero;
|
||||
Image hudBackground = runHudObject.GetComponent<Image>();
|
||||
hudBackground.color = new Color(0.018f, 0.026f, 0.032f, 0.88f);
|
||||
|
||||
GameObject headerObject = CreateImage("HUD Header", runHudObject.transform, new Color(0.035f, 0.05f, 0.06f, 0.88f));
|
||||
SetRect(headerObject.GetComponent<RectTransform>(), new Vector2(0.05f, 0.70f), new Vector2(0.95f, 0.92f), Vector2.zero, Vector2.zero);
|
||||
|
||||
hudTitleText = CreateText("HUD Title", headerObject.transform, 34, FontStyle.Bold, TextAnchor.MiddleLeft);
|
||||
SetRect(hudTitleText.rectTransform, new Vector2(0.04f, 0.54f), new Vector2(0.96f, 0.95f), Vector2.zero, Vector2.zero);
|
||||
|
||||
hudStatusText = CreateText("HUD Status", headerObject.transform, 28, FontStyle.Bold, TextAnchor.MiddleLeft);
|
||||
hudStatusText.color = selectedColor;
|
||||
SetRect(hudStatusText.rectTransform, new Vector2(0.04f, 0.15f), new Vector2(0.96f, 0.56f), Vector2.zero, Vector2.zero);
|
||||
|
||||
hudDetailText = CreateText("HUD Detail", runHudObject.transform, 25, FontStyle.Normal, TextAnchor.MiddleCenter);
|
||||
SetRect(hudDetailText.rectTransform, new Vector2(0.07f, 0.36f), new Vector2(0.93f, 0.64f), Vector2.zero, Vector2.zero);
|
||||
|
||||
hudHintText = CreateText("HUD Hint", runHudObject.transform, 23, FontStyle.Normal, TextAnchor.MiddleCenter);
|
||||
hudHintText.color = mutedColor;
|
||||
SetRect(hudHintText.rectTransform, new Vector2(0.07f, 0.08f), new Vector2(0.93f, 0.20f), Vector2.zero, Vector2.zero);
|
||||
|
||||
GameObject verticalLine = CreateImage("HUD Vertical Reticle", runHudObject.transform, new Color(0.35f, 0.82f, 1.0f, 0.38f));
|
||||
SetRect(verticalLine.GetComponent<RectTransform>(), new Vector2(0.498f, 0.27f), new Vector2(0.502f, 0.36f), Vector2.zero, Vector2.zero);
|
||||
|
||||
GameObject horizontalLine = CreateImage("HUD Horizontal Reticle", runHudObject.transform, new Color(0.35f, 0.82f, 1.0f, 0.38f));
|
||||
SetRect(horizontalLine.GetComponent<RectTransform>(), new Vector2(0.47f, 0.313f), new Vector2(0.53f, 0.319f), Vector2.zero, Vector2.zero);
|
||||
}
|
||||
|
||||
private static void AddTrackedPoseDriverIfAvailable(GameObject cameraObject)
|
||||
{
|
||||
string[] typeNames =
|
||||
{
|
||||
"UnityEngine.SpatialTracking.TrackedPoseDriver, UnityEngine.SpatialTracking",
|
||||
"UnityEngine.InputSystem.XR.TrackedPoseDriver, Unity.InputSystem"
|
||||
};
|
||||
|
||||
for (int i = 0; i < typeNames.Length; i++)
|
||||
{
|
||||
Type driverType = Type.GetType(typeNames[i]);
|
||||
if (driverType != null && cameraObject.GetComponent(driverType) == null)
|
||||
{
|
||||
cameraObject.AddComponent(driverType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Text CreateText(string name, Transform parent, int fontSize, FontStyle fontStyle, TextAnchor alignment)
|
||||
{
|
||||
GameObject textObject = new GameObject(name, typeof(RectTransform), typeof(CanvasRenderer), typeof(Text));
|
||||
textObject.transform.SetParent(parent, false);
|
||||
|
||||
Text text = textObject.GetComponent<Text>();
|
||||
text.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
|
||||
text.fontSize = fontSize;
|
||||
text.fontStyle = fontStyle;
|
||||
text.alignment = alignment;
|
||||
text.horizontalOverflow = HorizontalWrapMode.Wrap;
|
||||
text.verticalOverflow = VerticalWrapMode.Truncate;
|
||||
text.resizeTextForBestFit = true;
|
||||
text.resizeTextMinSize = Mathf.Max(12, fontSize - 8);
|
||||
text.resizeTextMaxSize = fontSize;
|
||||
text.color = normalColor;
|
||||
return text;
|
||||
}
|
||||
|
||||
private static void SetRect(RectTransform rectTransform, Vector2 anchorMin, Vector2 anchorMax, Vector2 offsetMin, Vector2 offsetMax)
|
||||
{
|
||||
rectTransform.anchorMin = anchorMin;
|
||||
rectTransform.anchorMax = anchorMax;
|
||||
rectTransform.offsetMin = offsetMin;
|
||||
rectTransform.offsetMax = offsetMax;
|
||||
}
|
||||
|
||||
private static GameObject CreateImage(string name, Transform parent, Color color)
|
||||
{
|
||||
GameObject imageObject = new GameObject(name, typeof(RectTransform), typeof(CanvasRenderer), typeof(Image));
|
||||
imageObject.transform.SetParent(parent, false);
|
||||
Image image = imageObject.GetComponent<Image>();
|
||||
image.color = color;
|
||||
return imageObject;
|
||||
}
|
||||
|
||||
private void LoadDraftsFromSender()
|
||||
{
|
||||
hostDraft = sender.host;
|
||||
portDraft = sender.port;
|
||||
sendHzDraft = sender.sendHz;
|
||||
convertDraft = sender.convertUnityToProjectCoordinates;
|
||||
}
|
||||
|
||||
private void HandleKeyboard()
|
||||
{
|
||||
if (keyboard == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (keyboard.status == TouchScreenKeyboard.Status.Done || keyboard.status == TouchScreenKeyboard.Status.LostFocus)
|
||||
{
|
||||
CommitKeyboardText(keyboard.text);
|
||||
keyboard = null;
|
||||
keyboardTarget = KeyboardTarget.None;
|
||||
}
|
||||
else if (keyboard.status == TouchScreenKeyboard.Status.Canceled)
|
||||
{
|
||||
panelMessage = "Edit canceled";
|
||||
keyboard = null;
|
||||
keyboardTarget = KeyboardTarget.None;
|
||||
}
|
||||
}
|
||||
|
||||
private void CommitKeyboardText(string value)
|
||||
{
|
||||
string trimmed = value == null ? string.Empty : value.Trim();
|
||||
if (keyboardTarget == KeyboardTarget.Host)
|
||||
{
|
||||
hostDraft = trimmed;
|
||||
panelMessage = "Target IP edited";
|
||||
}
|
||||
else if (keyboardTarget == KeyboardTarget.Port)
|
||||
{
|
||||
if (int.TryParse(trimmed, out int parsedPort))
|
||||
{
|
||||
portDraft = Mathf.Clamp(parsedPort, 1, 65535);
|
||||
panelMessage = "Target port edited";
|
||||
}
|
||||
else
|
||||
{
|
||||
panelMessage = "Invalid port text";
|
||||
}
|
||||
}
|
||||
else if (keyboardTarget == KeyboardTarget.SendHz)
|
||||
{
|
||||
if (TryParseFloat(trimmed, out float parsedHz))
|
||||
{
|
||||
sendHzDraft = Mathf.Clamp(parsedHz, 1.0f, 120.0f);
|
||||
panelMessage = "Send rate edited";
|
||||
}
|
||||
else
|
||||
{
|
||||
panelMessage = "Invalid send rate text";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleControllerInput()
|
||||
{
|
||||
bool menuPressed = IsButtonPressed(CommonUsages.menuButton);
|
||||
if (togglePanelWithMenuButton && menuPressed && !wasMenuPressed)
|
||||
{
|
||||
SetConfigPanelVisible(!IsConfigPanelVisible(), true);
|
||||
}
|
||||
|
||||
wasMenuPressed = menuPressed;
|
||||
if (!IsConfigPanelVisible())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Vector2 axis = ReadPrimaryAxis();
|
||||
if (Time.unscaledTime >= nextAxisTime)
|
||||
{
|
||||
if (axis.y > 0.55f)
|
||||
{
|
||||
selectedRow = (selectedRow + RowCount - 1) % RowCount;
|
||||
nextAxisTime = Time.unscaledTime + AxisRepeatDelay;
|
||||
}
|
||||
else if (axis.y < -0.55f)
|
||||
{
|
||||
selectedRow = (selectedRow + 1) % RowCount;
|
||||
nextAxisTime = Time.unscaledTime + AxisRepeatDelay;
|
||||
}
|
||||
else if (axis.x > 0.65f)
|
||||
{
|
||||
AdjustSelectedValue(1);
|
||||
nextAxisTime = Time.unscaledTime + AxisRepeatDelay;
|
||||
}
|
||||
else if (axis.x < -0.65f)
|
||||
{
|
||||
AdjustSelectedValue(-1);
|
||||
nextAxisTime = Time.unscaledTime + AxisRepeatDelay;
|
||||
}
|
||||
}
|
||||
|
||||
bool activatePressed = IsActivatePressed();
|
||||
if (activatePressed && !wasActivatePressed)
|
||||
{
|
||||
ActivateSelectedRow();
|
||||
}
|
||||
|
||||
wasActivatePressed = activatePressed;
|
||||
|
||||
bool applyPressed = IsButtonPressed(CommonUsages.secondaryButton);
|
||||
if (applyPressed && !wasApplyPressed)
|
||||
{
|
||||
ApplyDrafts();
|
||||
}
|
||||
|
||||
wasApplyPressed = applyPressed;
|
||||
}
|
||||
|
||||
private void AdjustSelectedValue(int direction)
|
||||
{
|
||||
if (selectedRow == 1)
|
||||
{
|
||||
portDraft = Mathf.Clamp(portDraft + direction, 1, 65535);
|
||||
panelMessage = "Target port adjusted";
|
||||
}
|
||||
else if (selectedRow == 2)
|
||||
{
|
||||
sendHzDraft = Mathf.Clamp(sendHzDraft + direction * 5.0f, 1.0f, 120.0f);
|
||||
panelMessage = "Send rate adjusted";
|
||||
}
|
||||
else if (selectedRow == 3)
|
||||
{
|
||||
convertDraft = !convertDraft;
|
||||
panelMessage = "Coordinate mode toggled";
|
||||
}
|
||||
else if (selectedRow == 4)
|
||||
{
|
||||
ToggleSending();
|
||||
}
|
||||
}
|
||||
|
||||
private void ActivateSelectedRow()
|
||||
{
|
||||
if (selectedRow == 0)
|
||||
{
|
||||
OpenKeyboard(KeyboardTarget.Host, hostDraft, TouchScreenKeyboardType.URL);
|
||||
}
|
||||
else if (selectedRow == 1)
|
||||
{
|
||||
OpenKeyboard(KeyboardTarget.Port, portDraft.ToString(), TouchScreenKeyboardType.NumberPad);
|
||||
}
|
||||
else if (selectedRow == 2)
|
||||
{
|
||||
OpenKeyboard(KeyboardTarget.SendHz, Mathf.RoundToInt(sendHzDraft).ToString(), TouchScreenKeyboardType.NumberPad);
|
||||
}
|
||||
else if (selectedRow == 3)
|
||||
{
|
||||
convertDraft = !convertDraft;
|
||||
panelMessage = "Coordinate mode toggled";
|
||||
}
|
||||
else if (selectedRow == 4)
|
||||
{
|
||||
ToggleSending();
|
||||
}
|
||||
else if (selectedRow == 5)
|
||||
{
|
||||
ApplyDrafts();
|
||||
}
|
||||
}
|
||||
|
||||
private void OpenKeyboard(KeyboardTarget target, string text, TouchScreenKeyboardType keyboardType)
|
||||
{
|
||||
keyboardTarget = target;
|
||||
keyboard = TouchScreenKeyboard.Open(text, keyboardType, false, false, false, false, "XR-RM UDP");
|
||||
panelMessage = "Editing " + target;
|
||||
}
|
||||
|
||||
private void ToggleSending()
|
||||
{
|
||||
sender.SetSending(!sender.SendEnabled);
|
||||
panelMessage = sender.SendEnabled ? "UDP sending enabled" : "UDP sending paused";
|
||||
}
|
||||
|
||||
private void ApplyDrafts()
|
||||
{
|
||||
bool applied = sender.ApplyConfig(hostDraft, portDraft, sendHzDraft, convertDraft, true);
|
||||
panelMessage = applied ? "Saved and applied" : sender.LastError;
|
||||
}
|
||||
|
||||
private bool IsActivatePressed()
|
||||
{
|
||||
return IsButtonPressed(CommonUsages.primaryButton) || IsButtonPressed(CommonUsages.triggerButton) || ReadTriggerValue() > 0.75f;
|
||||
}
|
||||
|
||||
private static Vector2 ReadPrimaryAxis()
|
||||
{
|
||||
if (TryReadPrimaryAxis(XRNode.RightHand, out Vector2 rightAxis))
|
||||
{
|
||||
return rightAxis;
|
||||
}
|
||||
|
||||
if (TryReadPrimaryAxis(XRNode.LeftHand, out Vector2 leftAxis))
|
||||
{
|
||||
return leftAxis;
|
||||
}
|
||||
|
||||
return Vector2.zero;
|
||||
}
|
||||
|
||||
private static bool TryReadPrimaryAxis(XRNode node, out Vector2 axis)
|
||||
{
|
||||
InputDevice device = InputDevices.GetDeviceAtXRNode(node);
|
||||
if (device.isValid && device.TryGetFeatureValue(CommonUsages.primary2DAxis, out axis))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
axis = Vector2.zero;
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool IsButtonPressed(InputFeatureUsage<bool> usage)
|
||||
{
|
||||
return TryReadButton(XRNode.RightHand, usage) || TryReadButton(XRNode.LeftHand, usage);
|
||||
}
|
||||
|
||||
private static bool TryReadButton(XRNode node, InputFeatureUsage<bool> usage)
|
||||
{
|
||||
InputDevice device = InputDevices.GetDeviceAtXRNode(node);
|
||||
return device.isValid && device.TryGetFeatureValue(usage, out bool pressed) && pressed;
|
||||
}
|
||||
|
||||
private static float ReadTriggerValue()
|
||||
{
|
||||
float rightValue = TryReadTriggerValue(XRNode.RightHand);
|
||||
if (rightValue > 0.0f)
|
||||
{
|
||||
return rightValue;
|
||||
}
|
||||
|
||||
return TryReadTriggerValue(XRNode.LeftHand);
|
||||
}
|
||||
|
||||
private static float TryReadTriggerValue(XRNode node)
|
||||
{
|
||||
InputDevice device = InputDevices.GetDeviceAtXRNode(node);
|
||||
if (device.isValid && device.TryGetFeatureValue(CommonUsages.trigger, out float value))
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
private void RefreshPanel()
|
||||
{
|
||||
if (canvas == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RefreshConfigPanel();
|
||||
RefreshRunHud();
|
||||
}
|
||||
|
||||
private void RefreshConfigPanel()
|
||||
{
|
||||
titleText.text = "XR-RM PICO UDP Sender";
|
||||
statusText.text = BuildConfigStatusText();
|
||||
|
||||
SetRow(0, "Target IP", hostDraft);
|
||||
SetRow(1, "Target Port", portDraft.ToString());
|
||||
SetRow(2, "Send Rate", Mathf.RoundToInt(sendHzDraft) + " Hz");
|
||||
SetRow(3, "Coordinates", convertDraft ? "Project (+Z forward)" : "Unity raw");
|
||||
SetRow(4, "UDP Sending", sender.SendEnabled ? "ON" : "OFF");
|
||||
SetRow(5, "Save & Apply", "press trigger");
|
||||
|
||||
footerText.text = "Stick: select / adjust Trigger, A or X: edit\nB or Y: save Menu: run view";
|
||||
}
|
||||
|
||||
private void RefreshRunHud()
|
||||
{
|
||||
if (runHudObject == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
hudTitleText.text = "XR-RM UDP Sender";
|
||||
hudStatusText.text = (sender.SendEnabled ? "SENDING" : "PAUSED") + " " + BuildEndpointText();
|
||||
hudDetailText.text = BuildTrackingStateText() + " " + BuildGripStateText() + "\n"
|
||||
+ BuildPacketStateText(false) + " " + BuildKeepAwakeStateText();
|
||||
hudHintText.text = "Menu: config panel";
|
||||
}
|
||||
|
||||
private string BuildConfigStatusText()
|
||||
{
|
||||
string endpointState = BuildEndpointText();
|
||||
string sendState = sender.SendEnabled ? "ON" : "OFF";
|
||||
string trackingState = BuildTrackingStateText();
|
||||
string packetState = BuildPacketStateText(true);
|
||||
string keepAwakeState = BuildKeepAwakeStateText();
|
||||
string error = string.IsNullOrEmpty(sender.LastError) ? panelMessage : sender.LastError;
|
||||
return endpointState + " | " + sendState + " | " + trackingState + " | " + packetState + " | " + keepAwakeState + " | " + error;
|
||||
}
|
||||
|
||||
private string BuildEndpointText()
|
||||
{
|
||||
return sender.HasEndpoint ? sender.host + ":" + sender.port : "not configured";
|
||||
}
|
||||
|
||||
private string BuildTrackingStateText()
|
||||
{
|
||||
return "L " + (sender.LeftDeviceValid ? "ok" : "--") + " / R " + (sender.RightDeviceValid ? "ok" : "--");
|
||||
}
|
||||
|
||||
private string BuildGripStateText()
|
||||
{
|
||||
return "Grip L " + (sender.LeftGripPressed ? "ON" : "--") + " / R " + (sender.RightGripPressed ? "ON" : "--");
|
||||
}
|
||||
|
||||
private string BuildPacketStateText(bool compact)
|
||||
{
|
||||
if (sender.SentPackets == 0)
|
||||
{
|
||||
return compact ? "0 pkts" : "Packets 0";
|
||||
}
|
||||
|
||||
double age = Math.Max(0.0, Time.realtimeSinceStartupAsDouble - sender.LastSendTime);
|
||||
string packetCount = sender.SentPackets.ToString(CultureInfo.InvariantCulture);
|
||||
string lastAge = age.ToString("0.0", CultureInfo.InvariantCulture) + "s";
|
||||
return compact ? packetCount + " pkts " + lastAge : "Packets " + packetCount + " Last " + lastAge;
|
||||
}
|
||||
|
||||
private string BuildKeepAwakeStateText()
|
||||
{
|
||||
if (keepAwake == null)
|
||||
{
|
||||
return "KeepAwake --";
|
||||
}
|
||||
|
||||
return keepAwake.StatusText;
|
||||
}
|
||||
|
||||
private void SetRow(int index, string label, string value)
|
||||
{
|
||||
Text rowText = rowTexts[index];
|
||||
bool selected = index == selectedRow;
|
||||
rowText.color = selected ? selectedColor : normalColor;
|
||||
rowText.fontStyle = selected ? FontStyle.Bold : FontStyle.Normal;
|
||||
rowText.text = (selected ? "> " : " ") + label.PadRight(14) + value;
|
||||
}
|
||||
|
||||
private static bool TryParseFloat(string value, out float parsedValue)
|
||||
{
|
||||
return float.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out parsedValue)
|
||||
|| float.TryParse(value, out parsedValue);
|
||||
}
|
||||
|
||||
private bool IsConfigPanelVisible()
|
||||
{
|
||||
return configPanelObject != null && configPanelObject.activeSelf;
|
||||
}
|
||||
|
||||
private void SetConfigPanelVisible(bool visible, bool updateMessage)
|
||||
{
|
||||
if (configPanelObject != null)
|
||||
{
|
||||
configPanelObject.SetActive(visible);
|
||||
}
|
||||
|
||||
if (runHudObject != null)
|
||||
{
|
||||
runHudObject.SetActive(!visible);
|
||||
}
|
||||
|
||||
if (updateMessage)
|
||||
{
|
||||
panelMessage = visible ? "Config panel" : "Run view";
|
||||
}
|
||||
}
|
||||
}
|
||||
11
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoUdpConfigPanel.cs.meta
Executable file
11
unity/XR_RM_PICO_UDP_Sender/Assets/Scripts/PicoUdpConfigPanel.cs.meta
Executable file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6d53b4ec62e44220a350bfe97f87d681
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13b2a357a18be354fa53f3b373988484
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Loaders.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Loaders.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ee2817c3133c6884ab3c7f56bf39f12d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
14
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Loaders/PXR_Loader.asset
Executable file
14
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Loaders/PXR_Loader.asset
Executable file
@ -0,0 +1,14 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 563682312a45bbe4bbd8d243e5e14608, type: 3}
|
||||
m_Name: PXR_Loader
|
||||
m_EditorClassIdentifier:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Loaders/PXR_Loader.asset.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Loaders/PXR_Loader.asset.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a25d5a0e12be3664da944c68c3bbcd6b
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Settings.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Settings.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7451b163683d94f4b848b230514c7eda
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,19 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 1c52faa1787e89a4eaf8abdae2e6ae25, type: 3}
|
||||
m_Name: PXR_Settings
|
||||
m_EditorClassIdentifier:
|
||||
stereoRenderingModeAndroid: 0
|
||||
systemDisplayFrequency: 0
|
||||
optimizeBufferDiscards: 1
|
||||
enableAppSpaceWarp: 0
|
||||
systemSplashScreen: {fileID: 0}
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Settings/PXR_Settings.asset.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/XR/Settings/PXR_Settings.asset.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 059224c120ae442458f8d823f1a61cce
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,48 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d2dc886499c26824283350fa532d087d, type: 3}
|
||||
m_Name: XRGeneralSettingsPerBuildTarget
|
||||
m_EditorClassIdentifier:
|
||||
Keys: 07000000
|
||||
Values:
|
||||
- {fileID: 6605851554665993113}
|
||||
--- !u!114 &2102942924974739106
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4c3631f5e58749a59194e0cf6baf6d5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_RequiresSettingsUpdate: 0
|
||||
m_AutomaticLoading: 0
|
||||
m_AutomaticRunning: 0
|
||||
m_Loaders:
|
||||
- {fileID: 11400000, guid: a25d5a0e12be3664da944c68c3bbcd6b, type: 2}
|
||||
--- !u!114 &6605851554665993113
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d236b7d11115f2143951f1e14045df39, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_LoaderManagerInstance: {fileID: 2102942924974739106}
|
||||
m_InitManagerOnStart: 1
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c49ddd5c17188674cbc8a8202417d809
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/XRI.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/XRI.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b4209dd8ed8b68e47bed72c57621dc31
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/XRI/Settings.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/XRI/Settings.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 899d7e70781ccdc4fb59d70722dadd8a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
unity/XR_RM_PICO_UDP_Sender/Assets/XRI/Settings/Resources.meta
Executable file
8
unity/XR_RM_PICO_UDP_Sender/Assets/XRI/Settings/Resources.meta
Executable file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b10eaead46d3ca344a76e7354c02a5a9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,47 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 191492db6e452eb468b95433ec162164, type: 3}
|
||||
m_Name: InteractionLayerSettings
|
||||
m_EditorClassIdentifier:
|
||||
m_LayerNames:
|
||||
- Default
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5eb3833504bb18c45b28f88ac198d88e
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,17 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 690929a59dc7a42da9030305190d391f, type: 3}
|
||||
m_Name: XRDeviceSimulatorSettings
|
||||
m_EditorClassIdentifier:
|
||||
m_AutomaticallyInstantiateSimulatorPrefab: 0
|
||||
m_AutomaticallyInstantiateInEditorOnly: 1
|
||||
m_SimulatorPrefab: {fileID: 0}
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 59629bd48a2904f4dbf31e7642c990cc
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,16 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2d38fb1463c5c804b8847c20e8873623, type: 3}
|
||||
m_Name: XRInteractionEditorSettings
|
||||
m_EditorClassIdentifier:
|
||||
m_InteractionLayerUpdaterShown: 1
|
||||
m_ShowOldInteractionLayerMaskInInspector: 0
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8503bf4d9a0202a40a1ff4c4676ccad4
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
13
unity/XR_RM_PICO_UDP_Sender/Packages/manifest.json
Executable file
13
unity/XR_RM_PICO_UDP_Sender/Packages/manifest.json
Executable file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"com.unity.xr.picoxr": "file:../../PICO-Unity-Integration-SDK-release_3.4.0",
|
||||
"com.unity.xr.management": "4.4.0",
|
||||
"com.unity.modules.androidjni": "1.0.0",
|
||||
"com.unity.modules.animation": "1.0.0",
|
||||
"com.unity.modules.imageconversion": "1.0.0",
|
||||
"com.unity.modules.jsonserialize": "1.0.0",
|
||||
"com.unity.modules.unitywebrequest": "1.0.0",
|
||||
"com.unity.modules.unitywebrequesttexture": "1.0.0",
|
||||
"com.unity.modules.xr": "1.0.0"
|
||||
}
|
||||
}
|
||||
187
unity/XR_RM_PICO_UDP_Sender/Packages/packages-lock.json
Executable file
187
unity/XR_RM_PICO_UDP_Sender/Packages/packages-lock.json
Executable file
@ -0,0 +1,187 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"com.unity.inputsystem": {
|
||||
"version": "1.14.0",
|
||||
"depth": 2,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.modules.uielements": "1.0.0"
|
||||
},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.mathematics": {
|
||||
"version": "1.2.6",
|
||||
"depth": 2,
|
||||
"source": "registry",
|
||||
"dependencies": {},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.ugui": {
|
||||
"version": "1.0.0",
|
||||
"depth": 2,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.modules.ui": "1.0.0",
|
||||
"com.unity.modules.imgui": "1.0.0"
|
||||
}
|
||||
},
|
||||
"com.unity.xr.core-utils": {
|
||||
"version": "2.5.2",
|
||||
"depth": 1,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.modules.xr": "1.0.0"
|
||||
},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.xr.interaction.toolkit": {
|
||||
"version": "2.6.4",
|
||||
"depth": 1,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.inputsystem": "1.7.0",
|
||||
"com.unity.mathematics": "1.2.6",
|
||||
"com.unity.ugui": "1.0.0",
|
||||
"com.unity.xr.core-utils": "2.2.3",
|
||||
"com.unity.xr.legacyinputhelpers": "2.1.10",
|
||||
"com.unity.modules.audio": "1.0.0",
|
||||
"com.unity.modules.imgui": "1.0.0",
|
||||
"com.unity.modules.physics": "1.0.0"
|
||||
},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.xr.legacyinputhelpers": {
|
||||
"version": "2.1.12",
|
||||
"depth": 1,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.modules.vr": "1.0.0",
|
||||
"com.unity.modules.xr": "1.0.0"
|
||||
},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.xr.management": {
|
||||
"version": "4.4.0",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.modules.subsystems": "1.0.0",
|
||||
"com.unity.modules.vr": "1.0.0",
|
||||
"com.unity.modules.xr": "1.0.0",
|
||||
"com.unity.xr.legacyinputhelpers": "2.1.7"
|
||||
},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.xr.picoxr": {
|
||||
"version": "file:../../PICO-Unity-Integration-SDK-release_3.4.0",
|
||||
"depth": 0,
|
||||
"source": "local",
|
||||
"dependencies": {
|
||||
"com.unity.xr.management": "4.0.0",
|
||||
"com.unity.xr.interaction.toolkit": "2.0.0",
|
||||
"com.unity.xr.core-utils": "2.3.0"
|
||||
}
|
||||
},
|
||||
"com.unity.modules.androidjni": {
|
||||
"version": "1.0.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.modules.animation": {
|
||||
"version": "1.0.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.modules.audio": {
|
||||
"version": "1.0.0",
|
||||
"depth": 2,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.modules.imageconversion": {
|
||||
"version": "1.0.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.modules.imgui": {
|
||||
"version": "1.0.0",
|
||||
"depth": 2,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.modules.jsonserialize": {
|
||||
"version": "1.0.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.modules.physics": {
|
||||
"version": "1.0.0",
|
||||
"depth": 1,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.modules.subsystems": {
|
||||
"version": "1.0.0",
|
||||
"depth": 1,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.modules.jsonserialize": "1.0.0"
|
||||
}
|
||||
},
|
||||
"com.unity.modules.ui": {
|
||||
"version": "1.0.0",
|
||||
"depth": 3,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.modules.uielements": {
|
||||
"version": "1.0.0",
|
||||
"depth": 3,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.modules.ui": "1.0.0",
|
||||
"com.unity.modules.imgui": "1.0.0",
|
||||
"com.unity.modules.jsonserialize": "1.0.0"
|
||||
}
|
||||
},
|
||||
"com.unity.modules.unitywebrequest": {
|
||||
"version": "1.0.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.modules.unitywebrequesttexture": {
|
||||
"version": "1.0.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.modules.unitywebrequest": "1.0.0",
|
||||
"com.unity.modules.imageconversion": "1.0.0"
|
||||
}
|
||||
},
|
||||
"com.unity.modules.vr": {
|
||||
"version": "1.0.0",
|
||||
"depth": 1,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.modules.jsonserialize": "1.0.0",
|
||||
"com.unity.modules.physics": "1.0.0",
|
||||
"com.unity.modules.xr": "1.0.0"
|
||||
}
|
||||
},
|
||||
"com.unity.modules.xr": {
|
||||
"version": "1.0.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.modules.physics": "1.0.0",
|
||||
"com.unity.modules.jsonserialize": "1.0.0",
|
||||
"com.unity.modules.subsystems": "1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
20
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/AudioManager.asset
Executable file
20
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/AudioManager.asset
Executable file
@ -0,0 +1,20 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!11 &1
|
||||
AudioManager:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Volume: 1
|
||||
Rolloff Scale: 1
|
||||
Doppler Factor: 1
|
||||
Default Speaker Mode: 2
|
||||
m_SampleRate: 0
|
||||
m_DSPBufferSize: 1024
|
||||
m_VirtualVoiceCount: 512
|
||||
m_RealVoiceCount: 32
|
||||
m_EnableOutputSuspension: 1
|
||||
m_SpatializerPlugin:
|
||||
m_AmbisonicDecoderPlugin:
|
||||
m_DisableAudio: 0
|
||||
m_VirtualizeEffects: 1
|
||||
m_RequestedDSPBufferSize: 0
|
||||
6
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/ClusterInputManager.asset
Executable file
6
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/ClusterInputManager.asset
Executable file
@ -0,0 +1,6 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!236 &1
|
||||
ClusterInputManager:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Inputs: []
|
||||
39
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/DynamicsManager.asset
Executable file
39
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/DynamicsManager.asset
Executable file
@ -0,0 +1,39 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!55 &1
|
||||
PhysicsManager:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 14
|
||||
m_Gravity: {x: 0, y: -9.81, z: 0}
|
||||
m_DefaultMaterial: {fileID: 0}
|
||||
m_BounceThreshold: 2
|
||||
m_DefaultMaxDepenetrationVelocity: 10
|
||||
m_SleepThreshold: 0.005
|
||||
m_DefaultContactOffset: 0.01
|
||||
m_DefaultSolverIterations: 6
|
||||
m_DefaultSolverVelocityIterations: 1
|
||||
m_QueriesHitBackfaces: 0
|
||||
m_QueriesHitTriggers: 1
|
||||
m_EnableAdaptiveForce: 0
|
||||
m_ClothInterCollisionDistance: 0.1
|
||||
m_ClothInterCollisionStiffness: 0.2
|
||||
m_ContactsGeneration: 1
|
||||
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
m_SimulationMode: 0
|
||||
m_AutoSyncTransforms: 0
|
||||
m_ReuseCollisionCallbacks: 0
|
||||
m_InvokeCollisionCallbacks: 1
|
||||
m_ClothInterCollisionSettingsToggle: 0
|
||||
m_ClothGravity: {x: 0, y: -9.81, z: 0}
|
||||
m_ContactPairsMode: 0
|
||||
m_BroadphaseType: 0
|
||||
m_WorldBounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 250, y: 250, z: 250}
|
||||
m_WorldSubdivisions: 8
|
||||
m_FrictionType: 0
|
||||
m_EnableEnhancedDeterminism: 0
|
||||
m_EnableUnifiedHeightmaps: 1
|
||||
m_ImprovedPatchFriction: 0
|
||||
m_SolverType: 0
|
||||
m_DefaultMaxAngularSpeed: 50
|
||||
@ -0,0 +1,12 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1045 &1
|
||||
EditorBuildSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Scenes:
|
||||
- enabled: 1
|
||||
path: Assets/Scenes/Main.unity
|
||||
guid: 3f6f64df724c4cf3a040530c120c37d7
|
||||
m_configObjects:
|
||||
Unity.XR.PXR.Settings: {fileID: 11400000, guid: 059224c120ae442458f8d823f1a61cce, type: 2}
|
||||
47
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/EditorSettings.asset
Executable file
47
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/EditorSettings.asset
Executable file
@ -0,0 +1,47 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!159 &1
|
||||
EditorSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 12
|
||||
m_SerializationMode: 2
|
||||
m_LineEndingsForNewScripts: 2
|
||||
m_DefaultBehaviorMode: 0
|
||||
m_PrefabRegularEnvironment: {fileID: 0}
|
||||
m_PrefabUIEnvironment: {fileID: 0}
|
||||
m_SpritePackerMode: 0
|
||||
m_SpritePackerCacheSize: 10
|
||||
m_SpritePackerPaddingPower: 1
|
||||
m_Bc7TextureCompressor: 0
|
||||
m_EtcTextureCompressorBehavior: 1
|
||||
m_EtcTextureFastCompressor: 1
|
||||
m_EtcTextureNormalCompressor: 2
|
||||
m_EtcTextureBestCompressor: 4
|
||||
m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp;java;cpp;c;mm;m;h
|
||||
m_ProjectGenerationRootNamespace:
|
||||
m_EnableTextureStreamingInEditMode: 1
|
||||
m_EnableTextureStreamingInPlayMode: 1
|
||||
m_EnableEditorAsyncCPUTextureLoading: 0
|
||||
m_AsyncShaderCompilation: 1
|
||||
m_PrefabModeAllowAutoSave: 1
|
||||
m_EnterPlayModeOptionsEnabled: 0
|
||||
m_EnterPlayModeOptions: 3
|
||||
m_GameObjectNamingDigits: 1
|
||||
m_GameObjectNamingScheme: 0
|
||||
m_AssetNamingUsesSpace: 1
|
||||
m_InspectorUseIMGUIDefaultInspector: 0
|
||||
m_UseLegacyProbeSampleCount: 0
|
||||
m_SerializeInlineMappingsOnOneLine: 1
|
||||
m_DisableCookiesInLightmapper: 0
|
||||
m_AssetPipelineMode: 1
|
||||
m_RefreshImportMode: 0
|
||||
m_CacheServerMode: 0
|
||||
m_CacheServerEndpoint:
|
||||
m_CacheServerNamespacePrefix: default
|
||||
m_CacheServerEnableDownload: 1
|
||||
m_CacheServerEnableUpload: 1
|
||||
m_CacheServerEnableAuth: 0
|
||||
m_CacheServerEnableTls: 0
|
||||
m_CacheServerValidationMode: 2
|
||||
m_CacheServerDownloadBatchSize: 128
|
||||
m_EnableEnlightenBakedGI: 0
|
||||
67
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/GraphicsSettings.asset
Executable file
67
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/GraphicsSettings.asset
Executable file
@ -0,0 +1,67 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!30 &1
|
||||
GraphicsSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 15
|
||||
m_Deferred:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_DeferredReflections:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ScreenSpaceShadows:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_DepthNormals:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_MotionVectors:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_LightHalo:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_LensFlare:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_VideoShadersIncludeMode: 2
|
||||
m_AlwaysIncludedShaders:
|
||||
- {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_PreloadedShaders: []
|
||||
m_PreloadShadersBatchTimeLimit: -1
|
||||
m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_CustomRenderPipeline: {fileID: 0}
|
||||
m_TransparencySortMode: 0
|
||||
m_TransparencySortAxis: {x: 0, y: 0, z: 1}
|
||||
m_DefaultRenderingPath: 1
|
||||
m_DefaultMobileRenderingPath: 1
|
||||
m_TierSettings: []
|
||||
m_LightmapStripping: 0
|
||||
m_FogStripping: 0
|
||||
m_InstancingStripping: 0
|
||||
m_BrgStripping: 0
|
||||
m_LightmapKeepPlain: 1
|
||||
m_LightmapKeepDirCombined: 1
|
||||
m_LightmapKeepDynamicPlain: 1
|
||||
m_LightmapKeepDynamicDirCombined: 1
|
||||
m_LightmapKeepShadowMask: 1
|
||||
m_LightmapKeepSubtractive: 1
|
||||
m_FogKeepLinear: 1
|
||||
m_FogKeepExp: 1
|
||||
m_FogKeepExp2: 1
|
||||
m_AlbedoSwatchInfos: []
|
||||
m_LightsUseLinearIntensity: 0
|
||||
m_LightsUseColorTemperature: 0
|
||||
m_DefaultRenderingLayerMask: 1
|
||||
m_LogWhenShaderIsCompiled: 0
|
||||
m_SRPDefaultSettings: {}
|
||||
m_LightProbeOutsideHullStrategy: 1
|
||||
m_CameraRelativeLightCulling: 0
|
||||
m_CameraRelativeShadowCulling: 0
|
||||
296
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/InputManager.asset
Executable file
296
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/InputManager.asset
Executable file
@ -0,0 +1,296 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!13 &1
|
||||
InputManager:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Axes:
|
||||
- serializedVersion: 3
|
||||
m_Name: Horizontal
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton: left
|
||||
positiveButton: right
|
||||
altNegativeButton: a
|
||||
altPositiveButton: d
|
||||
gravity: 3
|
||||
dead: 0.001
|
||||
sensitivity: 3
|
||||
snap: 1
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Vertical
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton: down
|
||||
positiveButton: up
|
||||
altNegativeButton: s
|
||||
altPositiveButton: w
|
||||
gravity: 3
|
||||
dead: 0.001
|
||||
sensitivity: 3
|
||||
snap: 1
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire1
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: left ctrl
|
||||
altNegativeButton:
|
||||
altPositiveButton: mouse 0
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire2
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: left alt
|
||||
altNegativeButton:
|
||||
altPositiveButton: mouse 1
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire3
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: left shift
|
||||
altNegativeButton:
|
||||
altPositiveButton: mouse 2
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Jump
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: space
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Mouse X
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0
|
||||
sensitivity: 0.1
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 1
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Mouse Y
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0
|
||||
sensitivity: 0.1
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 1
|
||||
axis: 1
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Mouse ScrollWheel
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0
|
||||
sensitivity: 0.1
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 1
|
||||
axis: 2
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Horizontal
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0.19
|
||||
sensitivity: 1
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 2
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Vertical
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0.19
|
||||
sensitivity: 1
|
||||
snap: 0
|
||||
invert: 1
|
||||
type: 2
|
||||
axis: 1
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire1
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: joystick button 0
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire2
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: joystick button 1
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire3
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: joystick button 2
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Jump
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: joystick button 3
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Submit
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: return
|
||||
altNegativeButton:
|
||||
altPositiveButton: joystick button 0
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Submit
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: enter
|
||||
altNegativeButton:
|
||||
altPositiveButton: space
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Cancel
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: escape
|
||||
altNegativeButton:
|
||||
altPositiveButton: joystick button 1
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
m_UsePhysicalKeys: 1
|
||||
35
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/MemorySettings.asset
Executable file
35
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/MemorySettings.asset
Executable file
@ -0,0 +1,35 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!387306366 &1
|
||||
MemorySettings:
|
||||
m_ObjectHideFlags: 0
|
||||
m_EditorMemorySettings:
|
||||
m_MainAllocatorBlockSize: -1
|
||||
m_ThreadAllocatorBlockSize: -1
|
||||
m_MainGfxBlockSize: -1
|
||||
m_ThreadGfxBlockSize: -1
|
||||
m_CacheBlockSize: -1
|
||||
m_TypetreeBlockSize: -1
|
||||
m_ProfilerBlockSize: -1
|
||||
m_ProfilerEditorBlockSize: -1
|
||||
m_BucketAllocatorGranularity: -1
|
||||
m_BucketAllocatorBucketsCount: -1
|
||||
m_BucketAllocatorBlockSize: -1
|
||||
m_BucketAllocatorBlockCount: -1
|
||||
m_ProfilerBucketAllocatorGranularity: -1
|
||||
m_ProfilerBucketAllocatorBucketsCount: -1
|
||||
m_ProfilerBucketAllocatorBlockSize: -1
|
||||
m_ProfilerBucketAllocatorBlockCount: -1
|
||||
m_TempAllocatorSizeMain: -1
|
||||
m_JobTempAllocatorBlockSize: -1
|
||||
m_BackgroundJobTempAllocatorBlockSize: -1
|
||||
m_JobTempAllocatorReducedBlockSize: -1
|
||||
m_TempAllocatorSizeGIBakingWorker: -1
|
||||
m_TempAllocatorSizeNavMeshWorker: -1
|
||||
m_TempAllocatorSizeAudioWorker: -1
|
||||
m_TempAllocatorSizeCloudWorker: -1
|
||||
m_TempAllocatorSizeGfx: -1
|
||||
m_TempAllocatorSizeJobWorker: -1
|
||||
m_TempAllocatorSizeBackgroundWorker: -1
|
||||
m_TempAllocatorSizePreloadManager: -1
|
||||
m_PlatformMemorySettings: {}
|
||||
93
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/NavMeshAreas.asset
Executable file
93
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/NavMeshAreas.asset
Executable file
@ -0,0 +1,93 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!126 &1
|
||||
NavMeshProjectSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
areas:
|
||||
- name: Walkable
|
||||
cost: 1
|
||||
- name: Not Walkable
|
||||
cost: 1
|
||||
- name: Jump
|
||||
cost: 2
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
m_LastAgentTypeID: -887442657
|
||||
m_Settings:
|
||||
- serializedVersion: 3
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: 0.75
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
minRegionArea: 2
|
||||
manualCellSize: 0
|
||||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
buildHeightMesh: 0
|
||||
maxJobWorkers: 0
|
||||
preserveTilesOutsideBounds: 0
|
||||
debug:
|
||||
m_Flags: 0
|
||||
m_SettingNames:
|
||||
- Humanoid
|
||||
36
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/PackageManagerSettings.asset
Executable file
36
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/PackageManagerSettings.asset
Executable file
@ -0,0 +1,36 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &1
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 53
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_EnablePreReleasePackages: 0
|
||||
m_AdvancedSettingsExpanded: 1
|
||||
m_ScopedRegistriesSettingsExpanded: 1
|
||||
m_SeeAllPackageVersions: 0
|
||||
m_DismissPreviewPackagesInUse: 0
|
||||
oneTimeWarningShown: 0
|
||||
m_Registries:
|
||||
- m_Id: main
|
||||
m_Name:
|
||||
m_Url: https://packages.unity.cn
|
||||
m_Scopes: []
|
||||
m_IsDefault: 1
|
||||
m_Capabilities: 7
|
||||
m_ConfigSource: 0
|
||||
m_UserSelectedRegistryName:
|
||||
m_UserAddingNewScopedRegistry: 0
|
||||
m_RegistryInfoDraft:
|
||||
m_Modified: 0
|
||||
m_ErrorMessage:
|
||||
m_UserModificationsInstanceId: -840
|
||||
m_OriginalInstanceId: -842
|
||||
m_LoadAssets: 0
|
||||
48
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/Physics2DSettings.asset
Executable file
48
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/Physics2DSettings.asset
Executable file
@ -0,0 +1,48 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!19 &1
|
||||
Physics2DSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 6
|
||||
m_Gravity: {x: 0, y: -9.81}
|
||||
m_DefaultMaterial: {fileID: 0}
|
||||
m_VelocityIterations: 8
|
||||
m_PositionIterations: 3
|
||||
m_VelocityThreshold: 1
|
||||
m_MaxLinearCorrection: 0.2
|
||||
m_MaxAngularCorrection: 8
|
||||
m_MaxTranslationSpeed: 100
|
||||
m_MaxRotationSpeed: 360
|
||||
m_BaumgarteScale: 0.2
|
||||
m_BaumgarteTimeOfImpactScale: 0.75
|
||||
m_TimeToSleep: 0.5
|
||||
m_LinearSleepTolerance: 0.01
|
||||
m_AngularSleepTolerance: 2
|
||||
m_DefaultContactOffset: 0.01
|
||||
m_JobOptions:
|
||||
serializedVersion: 2
|
||||
useMultithreading: 0
|
||||
useConsistencySorting: 0
|
||||
m_InterpolationPosesPerJob: 100
|
||||
m_NewContactsPerJob: 30
|
||||
m_CollideContactsPerJob: 100
|
||||
m_ClearFlagsPerJob: 200
|
||||
m_ClearBodyForcesPerJob: 200
|
||||
m_SyncDiscreteFixturesPerJob: 50
|
||||
m_SyncContinuousFixturesPerJob: 50
|
||||
m_FindNearestContactsPerJob: 100
|
||||
m_UpdateTriggerContactsPerJob: 100
|
||||
m_IslandSolverCostThreshold: 100
|
||||
m_IslandSolverBodyCostScale: 1
|
||||
m_IslandSolverContactCostScale: 10
|
||||
m_IslandSolverJointCostScale: 10
|
||||
m_IslandSolverBodiesPerJob: 50
|
||||
m_IslandSolverContactsPerJob: 50
|
||||
m_SimulationMode: 0
|
||||
m_QueriesHitTriggers: 1
|
||||
m_QueriesStartInColliders: 1
|
||||
m_CallbacksOnDisable: 1
|
||||
m_ReuseCollisionCallbacks: 1
|
||||
m_AutoSyncTransforms: 0
|
||||
m_GizmoOptions: 10
|
||||
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
7
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/PresetManager.asset
Executable file
7
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/PresetManager.asset
Executable file
@ -0,0 +1,7 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1386491679 &1
|
||||
PresetManager:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_DefaultPresets: {}
|
||||
@ -0,0 +1,773 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!129 &1
|
||||
PlayerSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 26
|
||||
productGUID: 1b62c592226c0bc4fa9f6958e68bfad6
|
||||
AndroidProfiler: 0
|
||||
AndroidFilterTouchesWhenObscured: 0
|
||||
AndroidEnableSustainedPerformanceMode: 0
|
||||
defaultScreenOrientation: 4
|
||||
targetDevice: 2
|
||||
useOnDemandResources: 0
|
||||
accelerometerFrequency: 60
|
||||
companyName: DefaultCompany
|
||||
productName: XR-RM-PICO-UDP-Sender
|
||||
defaultCursor: {fileID: 0}
|
||||
cursorHotspot: {x: 0, y: 0}
|
||||
m_SplashScreenBackgroundColor: {r: 0.12156863, g: 0.12156863, b: 0.1254902, a: 1}
|
||||
m_ShowUnitySplashScreen: 1
|
||||
m_ShowUnitySplashLogo: 1
|
||||
m_SplashScreenOverlayOpacity: 1
|
||||
m_SplashScreenAnimation: 1
|
||||
m_SplashScreenLogoStyle: 1
|
||||
m_SplashScreenDrawMode: 0
|
||||
m_SplashScreenBackgroundAnimationZoom: 1
|
||||
m_SplashScreenLogoAnimationZoom: 1
|
||||
m_SplashScreenBackgroundLandscapeAspect: 1
|
||||
m_SplashScreenBackgroundPortraitAspect: 1
|
||||
m_SplashScreenBackgroundLandscapeUvs:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
m_SplashScreenBackgroundPortraitUvs:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
m_SplashScreenLogos: []
|
||||
m_VirtualRealitySplashScreen: {fileID: 0}
|
||||
m_HolographicTrackingLossScreen: {fileID: 0}
|
||||
defaultScreenWidth: 1920
|
||||
defaultScreenHeight: 1080
|
||||
defaultScreenWidthWeb: 960
|
||||
defaultScreenHeightWeb: 600
|
||||
m_StereoRenderingPath: 0
|
||||
m_ActiveColorSpace: 0
|
||||
unsupportedMSAAFallback: 0
|
||||
m_SpriteBatchVertexThreshold: 300
|
||||
m_MTRendering: 1
|
||||
mipStripping: 0
|
||||
numberOfMipsStripped: 0
|
||||
numberOfMipsStrippedPerMipmapLimitGroup: {}
|
||||
m_StackTraceTypes: 010000000100000001000000010000000100000001000000
|
||||
iosShowActivityIndicatorOnLoading: -1
|
||||
androidShowActivityIndicatorOnLoading: -1
|
||||
iosUseCustomAppBackgroundBehavior: 0
|
||||
allowedAutorotateToPortrait: 1
|
||||
allowedAutorotateToPortraitUpsideDown: 1
|
||||
allowedAutorotateToLandscapeRight: 1
|
||||
allowedAutorotateToLandscapeLeft: 1
|
||||
useOSAutorotation: 1
|
||||
use32BitDisplayBuffer: 1
|
||||
preserveFramebufferAlpha: 0
|
||||
disableDepthAndStencilBuffers: 0
|
||||
androidStartInFullscreen: 1
|
||||
androidRenderOutsideSafeArea: 1
|
||||
androidUseSwappy: 1
|
||||
androidBlitType: 0
|
||||
androidResizableWindow: 0
|
||||
androidDefaultWindowWidth: 1920
|
||||
androidDefaultWindowHeight: 1080
|
||||
androidMinimumWindowWidth: 400
|
||||
androidMinimumWindowHeight: 300
|
||||
androidFullscreenMode: 1
|
||||
androidAutoRotationBehavior: 1
|
||||
androidPredictiveBackSupport: 1
|
||||
defaultIsNativeResolution: 1
|
||||
macRetinaSupport: 1
|
||||
runInBackground: 0
|
||||
captureSingleScreen: 0
|
||||
muteOtherAudioSources: 0
|
||||
Prepare IOS For Recording: 0
|
||||
Force IOS Speakers When Recording: 0
|
||||
audioSpatialExperience: 0
|
||||
deferSystemGesturesMode: 0
|
||||
hideHomeButton: 0
|
||||
submitAnalytics: 1
|
||||
usePlayerLog: 1
|
||||
dedicatedServerOptimizations: 0
|
||||
bakeCollisionMeshes: 0
|
||||
forceSingleInstance: 0
|
||||
useFlipModelSwapchain: 1
|
||||
resizableWindow: 0
|
||||
useMacAppStoreValidation: 0
|
||||
macAppStoreCategory: public.app-category.games
|
||||
gpuSkinning: 0
|
||||
xboxPIXTextureCapture: 0
|
||||
xboxEnableAvatar: 0
|
||||
xboxEnableKinect: 0
|
||||
xboxEnableKinectAutoTracking: 0
|
||||
xboxEnableFitness: 0
|
||||
visibleInBackground: 1
|
||||
allowFullscreenSwitch: 1
|
||||
fullscreenMode: 1
|
||||
xboxSpeechDB: 0
|
||||
xboxEnableHeadOrientation: 0
|
||||
xboxEnableGuest: 0
|
||||
xboxEnablePIXSampling: 0
|
||||
metalFramebufferOnly: 0
|
||||
xboxOneResolution: 0
|
||||
xboxOneSResolution: 0
|
||||
xboxOneXResolution: 3
|
||||
xboxOneMonoLoggingLevel: 0
|
||||
xboxOneLoggingLevel: 1
|
||||
xboxOneDisableEsram: 0
|
||||
xboxOneEnableTypeOptimization: 0
|
||||
xboxOnePresentImmediateThreshold: 0
|
||||
switchQueueCommandMemory: 1048576
|
||||
switchQueueControlMemory: 16384
|
||||
switchQueueComputeMemory: 262144
|
||||
switchNVNShaderPoolsGranularity: 33554432
|
||||
switchNVNDefaultPoolsGranularity: 16777216
|
||||
switchNVNOtherPoolsGranularity: 16777216
|
||||
switchGpuScratchPoolGranularity: 2097152
|
||||
switchAllowGpuScratchShrinking: 0
|
||||
switchNVNMaxPublicTextureIDCount: 0
|
||||
switchNVNMaxPublicSamplerIDCount: 0
|
||||
switchNVNGraphicsFirmwareMemory: 32
|
||||
switchMaxWorkerMultiple: 8
|
||||
stadiaPresentMode: 0
|
||||
stadiaTargetFramerate: 0
|
||||
vulkanNumSwapchainBuffers: 3
|
||||
vulkanEnableSetSRGBWrite: 0
|
||||
vulkanEnablePreTransform: 0
|
||||
vulkanEnableLateAcquireNextImage: 0
|
||||
vulkanEnableCommandBufferRecycling: 1
|
||||
loadStoreDebugModeEnabled: 0
|
||||
visionOSBundleVersion: 1.0
|
||||
tvOSBundleVersion: 1.0
|
||||
bundleVersion: 1.0
|
||||
preloadedAssets: []
|
||||
metroInputSource: 0
|
||||
wsaTransparentSwapchain: 0
|
||||
m_HolographicPauseOnTrackingLoss: 1
|
||||
xboxOneDisableKinectGpuReservation: 1
|
||||
xboxOneEnable7thCore: 1
|
||||
vrSettings:
|
||||
enable360StereoCapture: 0
|
||||
isWsaHolographicRemotingEnabled: 0
|
||||
enableFrameTimingStats: 0
|
||||
enableOpenGLProfilerGPURecorders: 1
|
||||
allowHDRDisplaySupport: 0
|
||||
useHDRDisplay: 0
|
||||
hdrBitDepth: 0
|
||||
m_ColorGamuts: 00000000
|
||||
targetPixelDensity: 30
|
||||
resolutionScalingMode: 0
|
||||
resetResolutionOnWindowResize: 0
|
||||
androidSupportedAspectRatio: 1
|
||||
androidMaxAspectRatio: 2.1
|
||||
applicationIdentifier:
|
||||
Android: com.local.xr_rm_udp_sender
|
||||
buildNumber:
|
||||
Standalone: 0
|
||||
VisionOS: 0
|
||||
iPhone: 0
|
||||
tvOS: 0
|
||||
overrideDefaultApplicationIdentifier: 1
|
||||
AndroidBundleVersionCode: 1
|
||||
AndroidMinSdkVersion: 29
|
||||
AndroidTargetSdkVersion: 0
|
||||
AndroidPreferredInstallLocation: 1
|
||||
aotOptions:
|
||||
stripEngineCode: 1
|
||||
iPhoneStrippingLevel: 0
|
||||
iPhoneScriptCallOptimization: 0
|
||||
ForceInternetPermission: 1
|
||||
ForceSDCardPermission: 0
|
||||
CreateWallpaper: 0
|
||||
APKExpansionFiles: 0
|
||||
keepLoadedShadersAlive: 0
|
||||
StripUnusedMeshComponents: 0
|
||||
strictShaderVariantMatching: 0
|
||||
VertexChannelCompressionMask: 4054
|
||||
iPhoneSdkVersion: 988
|
||||
iOSSimulatorArchitecture: 0
|
||||
iOSTargetOSVersionString: 12.0
|
||||
tvOSSdkVersion: 0
|
||||
tvOSSimulatorArchitecture: 0
|
||||
tvOSRequireExtendedGameController: 0
|
||||
tvOSTargetOSVersionString: 12.0
|
||||
VisionOSSdkVersion: 0
|
||||
VisionOSTargetOSVersionString: 1.0
|
||||
uIPrerenderedIcon: 0
|
||||
uIRequiresPersistentWiFi: 0
|
||||
uIRequiresFullScreen: 1
|
||||
uIStatusBarHidden: 1
|
||||
uIExitOnSuspend: 0
|
||||
uIStatusBarStyle: 0
|
||||
appleTVSplashScreen: {fileID: 0}
|
||||
appleTVSplashScreen2x: {fileID: 0}
|
||||
tvOSSmallIconLayers: []
|
||||
tvOSSmallIconLayers2x: []
|
||||
tvOSLargeIconLayers: []
|
||||
tvOSLargeIconLayers2x: []
|
||||
tvOSTopShelfImageLayers: []
|
||||
tvOSTopShelfImageLayers2x: []
|
||||
tvOSTopShelfImageWideLayers: []
|
||||
tvOSTopShelfImageWideLayers2x: []
|
||||
iOSLaunchScreenType: 0
|
||||
iOSLaunchScreenPortrait: {fileID: 0}
|
||||
iOSLaunchScreenLandscape: {fileID: 0}
|
||||
iOSLaunchScreenBackgroundColor:
|
||||
serializedVersion: 2
|
||||
rgba: 0
|
||||
iOSLaunchScreenFillPct: 100
|
||||
iOSLaunchScreenSize: 100
|
||||
iOSLaunchScreenCustomXibPath:
|
||||
iOSLaunchScreeniPadType: 0
|
||||
iOSLaunchScreeniPadImage: {fileID: 0}
|
||||
iOSLaunchScreeniPadBackgroundColor:
|
||||
serializedVersion: 2
|
||||
rgba: 0
|
||||
iOSLaunchScreeniPadFillPct: 100
|
||||
iOSLaunchScreeniPadSize: 100
|
||||
iOSLaunchScreeniPadCustomXibPath:
|
||||
iOSLaunchScreenCustomStoryboardPath:
|
||||
iOSLaunchScreeniPadCustomStoryboardPath:
|
||||
iOSDeviceRequirements: []
|
||||
iOSURLSchemes: []
|
||||
macOSURLSchemes: []
|
||||
iOSBackgroundModes: 0
|
||||
iOSMetalForceHardShadows: 0
|
||||
metalEditorSupport: 1
|
||||
metalAPIValidation: 1
|
||||
metalCompileShaderBinary: 0
|
||||
iOSRenderExtraFrameOnPause: 0
|
||||
iosCopyPluginsCodeInsteadOfSymlink: 0
|
||||
appleDeveloperTeamID:
|
||||
iOSManualSigningProvisioningProfileID:
|
||||
tvOSManualSigningProvisioningProfileID:
|
||||
VisionOSManualSigningProvisioningProfileID:
|
||||
iOSManualSigningProvisioningProfileType: 0
|
||||
tvOSManualSigningProvisioningProfileType: 0
|
||||
VisionOSManualSigningProvisioningProfileType: 0
|
||||
appleEnableAutomaticSigning: 0
|
||||
iOSRequireARKit: 0
|
||||
iOSAutomaticallyDetectAndAddCapabilities: 1
|
||||
appleEnableProMotion: 0
|
||||
shaderPrecisionModel: 0
|
||||
clonedFromGUID: 00000000000000000000000000000000
|
||||
templatePackageId:
|
||||
templateDefaultScene:
|
||||
useCustomMainManifest: 0
|
||||
useCustomLauncherManifest: 0
|
||||
useCustomMainGradleTemplate: 0
|
||||
useCustomLauncherGradleManifest: 0
|
||||
useCustomBaseGradleTemplate: 0
|
||||
useCustomGradlePropertiesTemplate: 0
|
||||
useCustomGradleSettingsTemplate: 0
|
||||
useCustomProguardFile: 0
|
||||
AndroidTargetArchitectures: 2
|
||||
AndroidTargetDevices: 0
|
||||
AndroidSplashScreenScale: 0
|
||||
androidSplashScreen: {fileID: 0}
|
||||
AndroidKeystoreName:
|
||||
AndroidKeyaliasName:
|
||||
AndroidEnableArmv9SecurityFeatures: 0
|
||||
AndroidBuildApkPerCpuArchitecture: 0
|
||||
AndroidTVCompatibility: 0
|
||||
AndroidIsGame: 1
|
||||
AndroidEnableTango: 0
|
||||
androidEnableBanner: 1
|
||||
androidUseLowAccuracyLocation: 0
|
||||
androidUseCustomKeystore: 0
|
||||
m_AndroidBanners:
|
||||
- width: 320
|
||||
height: 180
|
||||
banner: {fileID: 0}
|
||||
androidGamepadSupportLevel: 0
|
||||
chromeosInputEmulation: 1
|
||||
AndroidMinifyRelease: 0
|
||||
AndroidMinifyDebug: 0
|
||||
AndroidValidateAppBundleSize: 1
|
||||
AndroidAppBundleSizeToValidate: 150
|
||||
m_BuildTargetIcons: []
|
||||
m_BuildTargetPlatformIcons:
|
||||
- m_BuildTarget: Android
|
||||
m_Icons:
|
||||
- m_Textures: []
|
||||
m_Width: 432
|
||||
m_Height: 432
|
||||
m_Kind: 2
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 324
|
||||
m_Height: 324
|
||||
m_Kind: 2
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 216
|
||||
m_Height: 216
|
||||
m_Kind: 2
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 162
|
||||
m_Height: 162
|
||||
m_Kind: 2
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 108
|
||||
m_Height: 108
|
||||
m_Kind: 2
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 81
|
||||
m_Height: 81
|
||||
m_Kind: 2
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 192
|
||||
m_Height: 192
|
||||
m_Kind: 1
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 144
|
||||
m_Height: 144
|
||||
m_Kind: 1
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 96
|
||||
m_Height: 96
|
||||
m_Kind: 1
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 72
|
||||
m_Height: 72
|
||||
m_Kind: 1
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 48
|
||||
m_Height: 48
|
||||
m_Kind: 1
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 36
|
||||
m_Height: 36
|
||||
m_Kind: 1
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 192
|
||||
m_Height: 192
|
||||
m_Kind: 0
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 144
|
||||
m_Height: 144
|
||||
m_Kind: 0
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 96
|
||||
m_Height: 96
|
||||
m_Kind: 0
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 72
|
||||
m_Height: 72
|
||||
m_Kind: 0
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 48
|
||||
m_Height: 48
|
||||
m_Kind: 0
|
||||
m_SubKind:
|
||||
- m_Textures: []
|
||||
m_Width: 36
|
||||
m_Height: 36
|
||||
m_Kind: 0
|
||||
m_SubKind:
|
||||
m_BuildTargetBatching: []
|
||||
m_BuildTargetShaderSettings: []
|
||||
m_BuildTargetGraphicsJobs: []
|
||||
m_BuildTargetGraphicsJobMode: []
|
||||
m_BuildTargetGraphicsAPIs:
|
||||
- m_BuildTarget: AndroidPlayer
|
||||
m_APIs: 0b000000
|
||||
m_Automatic: 0
|
||||
m_BuildTargetVRSettings: []
|
||||
m_DefaultShaderChunkSizeInMB: 16
|
||||
m_DefaultShaderChunkCount: 0
|
||||
openGLRequireES31: 0
|
||||
openGLRequireES31AEP: 0
|
||||
openGLRequireES32: 0
|
||||
m_TemplateCustomTags: {}
|
||||
mobileMTRendering:
|
||||
Android: 1
|
||||
VisionOS: 1
|
||||
iPhone: 1
|
||||
tvOS: 1
|
||||
m_BuildTargetGroupLightmapEncodingQuality: []
|
||||
m_BuildTargetGroupHDRCubemapEncodingQuality: []
|
||||
m_BuildTargetGroupLightmapSettings: []
|
||||
m_BuildTargetGroupLoadStoreDebugModeSettings: []
|
||||
m_BuildTargetNormalMapEncoding: []
|
||||
m_BuildTargetDefaultTextureCompressionFormat: []
|
||||
playModeTestRunnerEnabled: 0
|
||||
runPlayModeTestAsEditModeTest: 0
|
||||
actionOnDotNetUnhandledException: 1
|
||||
enableInternalProfiler: 0
|
||||
logObjCUncaughtExceptions: 1
|
||||
enableCrashReportAPI: 0
|
||||
cameraUsageDescription:
|
||||
locationUsageDescription:
|
||||
microphoneUsageDescription:
|
||||
bluetoothUsageDescription:
|
||||
macOSTargetOSVersion: 10.13.0
|
||||
switchNMETAOverride:
|
||||
switchNetLibKey:
|
||||
switchSocketMemoryPoolSize: 6144
|
||||
switchSocketAllocatorPoolSize: 128
|
||||
switchSocketConcurrencyLimit: 14
|
||||
switchScreenResolutionBehavior: 2
|
||||
switchUseCPUProfiler: 0
|
||||
switchEnableFileSystemTrace: 0
|
||||
switchLTOSetting: 0
|
||||
switchApplicationID: 0x01004b9000490000
|
||||
switchNSODependencies:
|
||||
switchCompilerFlags:
|
||||
switchTitleNames_0:
|
||||
switchTitleNames_1:
|
||||
switchTitleNames_2:
|
||||
switchTitleNames_3:
|
||||
switchTitleNames_4:
|
||||
switchTitleNames_5:
|
||||
switchTitleNames_6:
|
||||
switchTitleNames_7:
|
||||
switchTitleNames_8:
|
||||
switchTitleNames_9:
|
||||
switchTitleNames_10:
|
||||
switchTitleNames_11:
|
||||
switchTitleNames_12:
|
||||
switchTitleNames_13:
|
||||
switchTitleNames_14:
|
||||
switchTitleNames_15:
|
||||
switchPublisherNames_0:
|
||||
switchPublisherNames_1:
|
||||
switchPublisherNames_2:
|
||||
switchPublisherNames_3:
|
||||
switchPublisherNames_4:
|
||||
switchPublisherNames_5:
|
||||
switchPublisherNames_6:
|
||||
switchPublisherNames_7:
|
||||
switchPublisherNames_8:
|
||||
switchPublisherNames_9:
|
||||
switchPublisherNames_10:
|
||||
switchPublisherNames_11:
|
||||
switchPublisherNames_12:
|
||||
switchPublisherNames_13:
|
||||
switchPublisherNames_14:
|
||||
switchPublisherNames_15:
|
||||
switchIcons_0: {fileID: 0}
|
||||
switchIcons_1: {fileID: 0}
|
||||
switchIcons_2: {fileID: 0}
|
||||
switchIcons_3: {fileID: 0}
|
||||
switchIcons_4: {fileID: 0}
|
||||
switchIcons_5: {fileID: 0}
|
||||
switchIcons_6: {fileID: 0}
|
||||
switchIcons_7: {fileID: 0}
|
||||
switchIcons_8: {fileID: 0}
|
||||
switchIcons_9: {fileID: 0}
|
||||
switchIcons_10: {fileID: 0}
|
||||
switchIcons_11: {fileID: 0}
|
||||
switchIcons_12: {fileID: 0}
|
||||
switchIcons_13: {fileID: 0}
|
||||
switchIcons_14: {fileID: 0}
|
||||
switchIcons_15: {fileID: 0}
|
||||
switchSmallIcons_0: {fileID: 0}
|
||||
switchSmallIcons_1: {fileID: 0}
|
||||
switchSmallIcons_2: {fileID: 0}
|
||||
switchSmallIcons_3: {fileID: 0}
|
||||
switchSmallIcons_4: {fileID: 0}
|
||||
switchSmallIcons_5: {fileID: 0}
|
||||
switchSmallIcons_6: {fileID: 0}
|
||||
switchSmallIcons_7: {fileID: 0}
|
||||
switchSmallIcons_8: {fileID: 0}
|
||||
switchSmallIcons_9: {fileID: 0}
|
||||
switchSmallIcons_10: {fileID: 0}
|
||||
switchSmallIcons_11: {fileID: 0}
|
||||
switchSmallIcons_12: {fileID: 0}
|
||||
switchSmallIcons_13: {fileID: 0}
|
||||
switchSmallIcons_14: {fileID: 0}
|
||||
switchSmallIcons_15: {fileID: 0}
|
||||
switchManualHTML:
|
||||
switchAccessibleURLs:
|
||||
switchLegalInformation:
|
||||
switchMainThreadStackSize: 1048576
|
||||
switchPresenceGroupId:
|
||||
switchLogoHandling: 0
|
||||
switchReleaseVersion: 0
|
||||
switchDisplayVersion: 1.0.0
|
||||
switchStartupUserAccount: 0
|
||||
switchSupportedLanguagesMask: 0
|
||||
switchLogoType: 0
|
||||
switchApplicationErrorCodeCategory:
|
||||
switchUserAccountSaveDataSize: 0
|
||||
switchUserAccountSaveDataJournalSize: 0
|
||||
switchApplicationAttribute: 0
|
||||
switchCardSpecSize: -1
|
||||
switchCardSpecClock: -1
|
||||
switchRatingsMask: 0
|
||||
switchRatingsInt_0: 0
|
||||
switchRatingsInt_1: 0
|
||||
switchRatingsInt_2: 0
|
||||
switchRatingsInt_3: 0
|
||||
switchRatingsInt_4: 0
|
||||
switchRatingsInt_5: 0
|
||||
switchRatingsInt_6: 0
|
||||
switchRatingsInt_7: 0
|
||||
switchRatingsInt_8: 0
|
||||
switchRatingsInt_9: 0
|
||||
switchRatingsInt_10: 0
|
||||
switchRatingsInt_11: 0
|
||||
switchRatingsInt_12: 0
|
||||
switchLocalCommunicationIds_0:
|
||||
switchLocalCommunicationIds_1:
|
||||
switchLocalCommunicationIds_2:
|
||||
switchLocalCommunicationIds_3:
|
||||
switchLocalCommunicationIds_4:
|
||||
switchLocalCommunicationIds_5:
|
||||
switchLocalCommunicationIds_6:
|
||||
switchLocalCommunicationIds_7:
|
||||
switchParentalControl: 0
|
||||
switchAllowsScreenshot: 1
|
||||
switchAllowsVideoCapturing: 1
|
||||
switchAllowsRuntimeAddOnContentInstall: 0
|
||||
switchDataLossConfirmation: 0
|
||||
switchUserAccountLockEnabled: 0
|
||||
switchSystemResourceMemory: 16777216
|
||||
switchSupportedNpadStyles: 22
|
||||
switchNativeFsCacheSize: 32
|
||||
switchIsHoldTypeHorizontal: 1
|
||||
switchSupportedNpadCount: 8
|
||||
switchEnableTouchScreen: 1
|
||||
switchSocketConfigEnabled: 0
|
||||
switchTcpInitialSendBufferSize: 32
|
||||
switchTcpInitialReceiveBufferSize: 64
|
||||
switchTcpAutoSendBufferSizeMax: 256
|
||||
switchTcpAutoReceiveBufferSizeMax: 256
|
||||
switchUdpSendBufferSize: 9
|
||||
switchUdpReceiveBufferSize: 42
|
||||
switchSocketBufferEfficiency: 4
|
||||
switchSocketInitializeEnabled: 1
|
||||
switchNetworkInterfaceManagerInitializeEnabled: 1
|
||||
switchDisableHTCSPlayerConnection: 0
|
||||
switchUseNewStyleFilepaths: 1
|
||||
switchUseLegacyFmodPriorities: 0
|
||||
switchUseMicroSleepForYield: 1
|
||||
switchEnableRamDiskSupport: 0
|
||||
switchMicroSleepForYieldTime: 25
|
||||
switchRamDiskSpaceSize: 12
|
||||
ps4NPAgeRating: 12
|
||||
ps4NPTitleSecret:
|
||||
ps4NPTrophyPackPath:
|
||||
ps4ParentalLevel: 11
|
||||
ps4ContentID: ED1633-NPXX51362_00-0000000000000000
|
||||
ps4Category: 0
|
||||
ps4MasterVersion: 01.00
|
||||
ps4AppVersion: 01.00
|
||||
ps4AppType: 0
|
||||
ps4ParamSfxPath:
|
||||
ps4VideoOutPixelFormat: 0
|
||||
ps4VideoOutInitialWidth: 1920
|
||||
ps4VideoOutBaseModeInitialWidth: 1920
|
||||
ps4VideoOutReprojectionRate: 60
|
||||
ps4PronunciationXMLPath:
|
||||
ps4PronunciationSIGPath:
|
||||
ps4BackgroundImagePath:
|
||||
ps4StartupImagePath:
|
||||
ps4StartupImagesFolder:
|
||||
ps4IconImagesFolder:
|
||||
ps4SaveDataImagePath:
|
||||
ps4SdkOverride:
|
||||
ps4BGMPath:
|
||||
ps4ShareFilePath:
|
||||
ps4ShareOverlayImagePath:
|
||||
ps4PrivacyGuardImagePath:
|
||||
ps4ExtraSceSysFile:
|
||||
ps4NPtitleDatPath:
|
||||
ps4RemotePlayKeyAssignment: -1
|
||||
ps4RemotePlayKeyMappingDir:
|
||||
ps4PlayTogetherPlayerCount: 0
|
||||
ps4EnterButtonAssignment: 2
|
||||
ps4ApplicationParam1: 0
|
||||
ps4ApplicationParam2: 0
|
||||
ps4ApplicationParam3: 0
|
||||
ps4ApplicationParam4: 0
|
||||
ps4DownloadDataSize: 0
|
||||
ps4GarlicHeapSize: 2048
|
||||
ps4ProGarlicHeapSize: 2560
|
||||
playerPrefsMaxSize: 32768
|
||||
ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
|
||||
ps4pnSessions: 1
|
||||
ps4pnPresence: 1
|
||||
ps4pnFriends: 1
|
||||
ps4pnGameCustomData: 1
|
||||
playerPrefsSupport: 0
|
||||
enableApplicationExit: 0
|
||||
resetTempFolder: 1
|
||||
restrictedAudioUsageRights: 0
|
||||
ps4UseResolutionFallback: 0
|
||||
ps4ReprojectionSupport: 0
|
||||
ps4UseAudio3dBackend: 0
|
||||
ps4UseLowGarlicFragmentationMode: 1
|
||||
ps4SocialScreenEnabled: 0
|
||||
ps4ScriptOptimizationLevel: 2
|
||||
ps4Audio3dVirtualSpeakerCount: 14
|
||||
ps4attribCpuUsage: 0
|
||||
ps4PatchPkgPath:
|
||||
ps4PatchLatestPkgPath:
|
||||
ps4PatchChangeinfoPath:
|
||||
ps4PatchDayOne: 0
|
||||
ps4attribUserManagement: 0
|
||||
ps4attribMoveSupport: 0
|
||||
ps4attrib3DSupport: 0
|
||||
ps4attribShareSupport: 0
|
||||
ps4attribExclusiveVR: 0
|
||||
ps4disableAutoHideSplash: 0
|
||||
ps4videoRecordingFeaturesUsed: 0
|
||||
ps4contentSearchFeaturesUsed: 0
|
||||
ps4CompatibilityPS5: 0
|
||||
ps4AllowPS5Detection: 0
|
||||
ps4GPU800MHz: 1
|
||||
ps4attribEyeToEyeDistanceSettingVR: 0
|
||||
ps4IncludedModules: []
|
||||
ps4attribVROutputEnabled: 0
|
||||
monoEnv:
|
||||
splashScreenBackgroundSourceLandscape: {fileID: 0}
|
||||
splashScreenBackgroundSourcePortrait: {fileID: 0}
|
||||
blurSplashScreenBackground: 1
|
||||
spritePackerPolicy:
|
||||
webGLMemorySize: 32
|
||||
webGLExceptionSupport: 1
|
||||
webGLNameFilesAsHashes: 0
|
||||
webGLShowDiagnostics: 0
|
||||
webGLDataCaching: 1
|
||||
webGLDebugSymbols: 0
|
||||
webGLEmscriptenArgs:
|
||||
webGLModulesDirectory:
|
||||
webGLTemplate: APPLICATION:Default
|
||||
webGLAnalyzeBuildSize: 0
|
||||
webGLUseEmbeddedResources: 0
|
||||
webGLCompressionFormat: 1
|
||||
webGLWasmArithmeticExceptions: 0
|
||||
webGLLinkerTarget: 1
|
||||
webGLThreadsSupport: 0
|
||||
webGLDecompressionFallback: 0
|
||||
webGLInitialMemorySize: 32
|
||||
webGLMaximumMemorySize: 2048
|
||||
webGLMemoryGrowthMode: 2
|
||||
webGLMemoryLinearGrowthStep: 16
|
||||
webGLMemoryGeometricGrowthStep: 0.2
|
||||
webGLMemoryGeometricGrowthCap: 96
|
||||
webGLPowerPreference: 2
|
||||
scriptingDefineSymbols: {}
|
||||
additionalCompilerArguments: {}
|
||||
platformArchitecture: {}
|
||||
scriptingBackend:
|
||||
Android: 1
|
||||
il2cppCompilerConfiguration: {}
|
||||
il2cppCodeGeneration: {}
|
||||
managedStrippingLevel: {}
|
||||
incrementalIl2cppBuild: {}
|
||||
suppressCommonWarnings: 1
|
||||
allowUnsafeCode: 0
|
||||
useDeterministicCompilation: 1
|
||||
additionalIl2CppArgs:
|
||||
scriptingRuntimeVersion: 1
|
||||
gcIncremental: 1
|
||||
gcWBarrierValidation: 0
|
||||
apiCompatibilityLevelPerPlatform: {}
|
||||
m_RenderingPath: 1
|
||||
m_MobileRenderingPath: 1
|
||||
metroPackageName: XR_RM_PICO_UDP_Sender
|
||||
metroPackageVersion:
|
||||
metroCertificatePath:
|
||||
metroCertificatePassword:
|
||||
metroCertificateSubject:
|
||||
metroCertificateIssuer:
|
||||
metroCertificateNotAfter: 0000000000000000
|
||||
metroApplicationDescription: XR_RM_PICO_UDP_Sender
|
||||
wsaImages: {}
|
||||
metroTileShortName:
|
||||
metroTileShowName: 0
|
||||
metroMediumTileShowName: 0
|
||||
metroLargeTileShowName: 0
|
||||
metroWideTileShowName: 0
|
||||
metroSupportStreamingInstall: 0
|
||||
metroLastRequiredScene: 0
|
||||
metroDefaultTileSize: 1
|
||||
metroTileForegroundText: 2
|
||||
metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
|
||||
metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}
|
||||
metroSplashScreenUseBackgroundColor: 0
|
||||
syncCapabilities: 0
|
||||
platformCapabilities: {}
|
||||
metroTargetDeviceFamilies: {}
|
||||
metroFTAName:
|
||||
metroFTAFileTypes: []
|
||||
metroProtocolName:
|
||||
vcxProjDefaultLanguage:
|
||||
XboxOneProductId:
|
||||
XboxOneUpdateKey:
|
||||
XboxOneSandboxId:
|
||||
XboxOneContentId:
|
||||
XboxOneTitleId:
|
||||
XboxOneSCId:
|
||||
XboxOneGameOsOverridePath:
|
||||
XboxOnePackagingOverridePath:
|
||||
XboxOneAppManifestOverridePath:
|
||||
XboxOneVersion: 1.0.0.0
|
||||
XboxOnePackageEncryption: 0
|
||||
XboxOnePackageUpdateGranularity: 2
|
||||
XboxOneDescription:
|
||||
XboxOneLanguage:
|
||||
- enus
|
||||
XboxOneCapability: []
|
||||
XboxOneGameRating: {}
|
||||
XboxOneIsContentPackage: 0
|
||||
XboxOneEnhancedXboxCompatibilityMode: 0
|
||||
XboxOneEnableGPUVariability: 1
|
||||
XboxOneSockets: {}
|
||||
XboxOneSplashScreen: {fileID: 0}
|
||||
XboxOneAllowedProductIds: []
|
||||
XboxOnePersistentLocalStorageSize: 0
|
||||
XboxOneXTitleMemory: 8
|
||||
XboxOneOverrideIdentityName:
|
||||
XboxOneOverrideIdentityPublisher:
|
||||
vrEditorSettings: {}
|
||||
cloudServicesEnabled: {}
|
||||
luminIcon:
|
||||
m_Name:
|
||||
m_ModelFolderPath:
|
||||
m_PortalFolderPath:
|
||||
luminCert:
|
||||
m_CertPath:
|
||||
m_SignPackage: 1
|
||||
luminIsChannelApp: 0
|
||||
luminVersion:
|
||||
m_VersionCode: 1
|
||||
m_VersionName:
|
||||
hmiPlayerDataPath:
|
||||
hmiForceSRGBBlit: 1
|
||||
embeddedLinuxEnableGamepadInput: 1
|
||||
hmiLogStartupTiming: 0
|
||||
hmiCpuConfiguration:
|
||||
apiCompatibilityLevel: 6
|
||||
activeInputHandler: 2
|
||||
windowsGamepadBackendHint: 0
|
||||
cloudProjectId:
|
||||
framebufferDepthMemorylessMode: 0
|
||||
qualitySettingsNames: []
|
||||
projectName:
|
||||
organizationId:
|
||||
cloudEnabled: 0
|
||||
legacyClampBlendShapeWeights: 0
|
||||
hmiLoadingImage: {fileID: 0}
|
||||
platformRequiresReadableAssets: 0
|
||||
virtualTexturingSupportEnabled: 0
|
||||
insecureHttpOption: 0
|
||||
2
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/ProjectVersion.txt
Executable file
2
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/ProjectVersion.txt
Executable file
@ -0,0 +1,2 @@
|
||||
m_EditorVersion: 2022.3.62f3c1
|
||||
m_EditorVersionWithRevision: 2022.3.62f3c1 (1623fc0bbb97)
|
||||
322
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/QualitySettings.asset
Executable file
322
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/QualitySettings.asset
Executable file
@ -0,0 +1,322 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!47 &1
|
||||
QualitySettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 5
|
||||
m_CurrentQuality: 5
|
||||
m_QualitySettings:
|
||||
- serializedVersion: 3
|
||||
name: Very Low
|
||||
pixelLightCount: 0
|
||||
shadows: 0
|
||||
shadowResolution: 0
|
||||
shadowProjection: 1
|
||||
shadowCascades: 1
|
||||
shadowDistance: 15
|
||||
shadowNearPlaneOffset: 3
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 0
|
||||
skinWeights: 1
|
||||
globalTextureMipmapLimit: 1
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 0
|
||||
antiAliasing: 0
|
||||
softParticles: 0
|
||||
softVegetation: 0
|
||||
realtimeReflectionProbes: 0
|
||||
billboardsFaceCameraPosition: 0
|
||||
useLegacyDetailDistribution: 0
|
||||
vSyncCount: 0
|
||||
realtimeGICPUUsage: 25
|
||||
lodBias: 0.3
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
streamingMipmapsRenderersPerFrame: 512
|
||||
streamingMipmapsMaxLevelReduction: 2
|
||||
streamingMipmapsMaxFileIORequests: 1024
|
||||
particleRaycastBudget: 4
|
||||
asyncUploadTimeSlice: 2
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 3
|
||||
name: Low
|
||||
pixelLightCount: 0
|
||||
shadows: 0
|
||||
shadowResolution: 0
|
||||
shadowProjection: 1
|
||||
shadowCascades: 1
|
||||
shadowDistance: 20
|
||||
shadowNearPlaneOffset: 3
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 0
|
||||
skinWeights: 2
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 0
|
||||
antiAliasing: 0
|
||||
softParticles: 0
|
||||
softVegetation: 0
|
||||
realtimeReflectionProbes: 0
|
||||
billboardsFaceCameraPosition: 0
|
||||
useLegacyDetailDistribution: 0
|
||||
vSyncCount: 0
|
||||
realtimeGICPUUsage: 25
|
||||
lodBias: 0.4
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
streamingMipmapsRenderersPerFrame: 512
|
||||
streamingMipmapsMaxLevelReduction: 2
|
||||
streamingMipmapsMaxFileIORequests: 1024
|
||||
particleRaycastBudget: 16
|
||||
asyncUploadTimeSlice: 2
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 3
|
||||
name: Medium
|
||||
pixelLightCount: 1
|
||||
shadows: 1
|
||||
shadowResolution: 0
|
||||
shadowProjection: 1
|
||||
shadowCascades: 1
|
||||
shadowDistance: 20
|
||||
shadowNearPlaneOffset: 3
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 0
|
||||
skinWeights: 2
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 1
|
||||
antiAliasing: 0
|
||||
softParticles: 0
|
||||
softVegetation: 0
|
||||
realtimeReflectionProbes: 0
|
||||
billboardsFaceCameraPosition: 0
|
||||
useLegacyDetailDistribution: 0
|
||||
vSyncCount: 1
|
||||
realtimeGICPUUsage: 25
|
||||
lodBias: 0.7
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
streamingMipmapsRenderersPerFrame: 512
|
||||
streamingMipmapsMaxLevelReduction: 2
|
||||
streamingMipmapsMaxFileIORequests: 1024
|
||||
particleRaycastBudget: 64
|
||||
asyncUploadTimeSlice: 2
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 3
|
||||
name: High
|
||||
pixelLightCount: 2
|
||||
shadows: 2
|
||||
shadowResolution: 1
|
||||
shadowProjection: 1
|
||||
shadowCascades: 2
|
||||
shadowDistance: 40
|
||||
shadowNearPlaneOffset: 3
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 1
|
||||
skinWeights: 2
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 1
|
||||
antiAliasing: 0
|
||||
softParticles: 0
|
||||
softVegetation: 1
|
||||
realtimeReflectionProbes: 1
|
||||
billboardsFaceCameraPosition: 1
|
||||
useLegacyDetailDistribution: 0
|
||||
vSyncCount: 1
|
||||
realtimeGICPUUsage: 50
|
||||
lodBias: 1
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
streamingMipmapsRenderersPerFrame: 512
|
||||
streamingMipmapsMaxLevelReduction: 2
|
||||
streamingMipmapsMaxFileIORequests: 1024
|
||||
particleRaycastBudget: 256
|
||||
asyncUploadTimeSlice: 2
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 3
|
||||
name: Very High
|
||||
pixelLightCount: 3
|
||||
shadows: 2
|
||||
shadowResolution: 2
|
||||
shadowProjection: 1
|
||||
shadowCascades: 2
|
||||
shadowDistance: 70
|
||||
shadowNearPlaneOffset: 3
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 1
|
||||
skinWeights: 4
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 2
|
||||
antiAliasing: 2
|
||||
softParticles: 1
|
||||
softVegetation: 1
|
||||
realtimeReflectionProbes: 1
|
||||
billboardsFaceCameraPosition: 1
|
||||
useLegacyDetailDistribution: 0
|
||||
vSyncCount: 1
|
||||
realtimeGICPUUsage: 50
|
||||
lodBias: 1.5
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
streamingMipmapsRenderersPerFrame: 512
|
||||
streamingMipmapsMaxLevelReduction: 2
|
||||
streamingMipmapsMaxFileIORequests: 1024
|
||||
particleRaycastBudget: 1024
|
||||
asyncUploadTimeSlice: 2
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 3
|
||||
name: Ultra
|
||||
pixelLightCount: 4
|
||||
shadows: 2
|
||||
shadowResolution: 2
|
||||
shadowProjection: 1
|
||||
shadowCascades: 4
|
||||
shadowDistance: 150
|
||||
shadowNearPlaneOffset: 3
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 1
|
||||
skinWeights: 255
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 2
|
||||
antiAliasing: 2
|
||||
softParticles: 1
|
||||
softVegetation: 1
|
||||
realtimeReflectionProbes: 1
|
||||
billboardsFaceCameraPosition: 1
|
||||
useLegacyDetailDistribution: 0
|
||||
vSyncCount: 1
|
||||
realtimeGICPUUsage: 100
|
||||
lodBias: 2
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
streamingMipmapsRenderersPerFrame: 512
|
||||
streamingMipmapsMaxLevelReduction: 2
|
||||
streamingMipmapsMaxFileIORequests: 1024
|
||||
particleRaycastBudget: 4096
|
||||
asyncUploadTimeSlice: 2
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
m_TextureMipmapLimitGroupNames: []
|
||||
m_PerPlatformDefaultQuality:
|
||||
Android: 2
|
||||
EmbeddedLinux: 5
|
||||
GameCoreScarlett: 5
|
||||
GameCoreXboxOne: 5
|
||||
LinuxHeadlessSimulation: 5
|
||||
Nintendo Switch: 5
|
||||
PS4: 5
|
||||
PS5: 5
|
||||
QNX: 5
|
||||
Server: 5
|
||||
Stadia: 5
|
||||
Standalone: 5
|
||||
VisionOS: 5
|
||||
WebGL: 3
|
||||
Windows Store Apps: 5
|
||||
XboxOne: 5
|
||||
iPhone: 2
|
||||
tvOS: 2
|
||||
121
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/SceneTemplateSettings.json
Executable file
121
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/SceneTemplateSettings.json
Executable file
@ -0,0 +1,121 @@
|
||||
{
|
||||
"templatePinStates": [],
|
||||
"dependencyTypeInfos": [
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.AnimationClip",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEditor.Animations.AnimatorController",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.AnimatorOverrideController",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEditor.Audio.AudioMixerController",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.ComputeShader",
|
||||
"defaultInstantiationMode": 1
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.Cubemap",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.GameObject",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEditor.LightingDataAsset",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.LightingSettings",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.Material",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEditor.MonoScript",
|
||||
"defaultInstantiationMode": 1
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.PhysicMaterial",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.PhysicsMaterial2D",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.Rendering.PostProcessing.PostProcessResources",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.Rendering.VolumeProfile",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEditor.SceneAsset",
|
||||
"defaultInstantiationMode": 1
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.Shader",
|
||||
"defaultInstantiationMode": 1
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.ShaderVariantCollection",
|
||||
"defaultInstantiationMode": 1
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.Texture",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.Texture2D",
|
||||
"defaultInstantiationMode": 0
|
||||
},
|
||||
{
|
||||
"userAdded": false,
|
||||
"type": "UnityEngine.Timeline.TimelineAsset",
|
||||
"defaultInstantiationMode": 0
|
||||
}
|
||||
],
|
||||
"defaultDependencyTypeInfo": {
|
||||
"userAdded": false,
|
||||
"type": "<default_scene_template_dependencies>",
|
||||
"defaultInstantiationMode": 1
|
||||
},
|
||||
"newSceneOverride": 0
|
||||
}
|
||||
43
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/TagManager.asset
Executable file
43
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/TagManager.asset
Executable file
@ -0,0 +1,43 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!78 &1
|
||||
TagManager:
|
||||
serializedVersion: 2
|
||||
tags: []
|
||||
layers:
|
||||
- Default
|
||||
- TransparentFX
|
||||
- Ignore Raycast
|
||||
-
|
||||
- Water
|
||||
- UI
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
m_SortingLayers:
|
||||
- name: Default
|
||||
uniqueID: 0
|
||||
locked: 0
|
||||
9
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/TimeManager.asset
Executable file
9
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/TimeManager.asset
Executable file
@ -0,0 +1,9 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!5 &1
|
||||
TimeManager:
|
||||
m_ObjectHideFlags: 0
|
||||
Fixed Timestep: 0.02
|
||||
Maximum Allowed Timestep: 0.33333334
|
||||
m_TimeScale: 1
|
||||
Maximum Particle Timestep: 0.03
|
||||
38
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/UnityConnectSettings.asset
Executable file
38
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/UnityConnectSettings.asset
Executable file
@ -0,0 +1,38 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!310 &1
|
||||
UnityConnectSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 1
|
||||
m_Enabled: 0
|
||||
m_TestMode: 0
|
||||
m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
|
||||
m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
|
||||
m_ConfigUrl: https://config.uca.cloud.unity3d.com
|
||||
m_DashboardUrl: https://dashboard.unity3d.com
|
||||
m_CNEventUrl: https://cdp.cloud.unity.cn/v1/events
|
||||
m_CNConfigUrl: https://cdp.cloud.unity.cn/config
|
||||
m_TestInitMode: 0
|
||||
CrashReportingSettings:
|
||||
m_EventUrl: https://perf-events.cloud.unity.cn
|
||||
m_Enabled: 0
|
||||
m_LogBufferSize: 10
|
||||
m_CaptureEditorExceptions: 1
|
||||
UnityPurchasingSettings:
|
||||
m_Enabled: 0
|
||||
m_TestMode: 0
|
||||
UnityAnalyticsSettings:
|
||||
m_Enabled: 0
|
||||
m_TestMode: 0
|
||||
m_InitializeOnStartup: 1
|
||||
m_PackageRequiringCoreStatsPresent: 0
|
||||
UnityAdsSettings:
|
||||
m_Enabled: 0
|
||||
m_InitializeOnStartup: 1
|
||||
m_TestMode: 0
|
||||
m_IosGameId:
|
||||
m_AndroidGameId:
|
||||
m_GameIds: {}
|
||||
m_GameId:
|
||||
PerformanceReportingSettings:
|
||||
m_Enabled: 0
|
||||
18
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/VFXManager.asset
Executable file
18
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/VFXManager.asset
Executable file
@ -0,0 +1,18 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!937362698 &1
|
||||
VFXManager:
|
||||
m_ObjectHideFlags: 0
|
||||
m_IndirectShader: {fileID: 0}
|
||||
m_CopyBufferShader: {fileID: 0}
|
||||
m_SortShader: {fileID: 0}
|
||||
m_StripUpdateShader: {fileID: 0}
|
||||
m_EmptyShader: {fileID: 0}
|
||||
m_RenderPipeSettingsPath:
|
||||
m_FixedTimeStep: 0.016666668
|
||||
m_MaxDeltaTime: 0.05
|
||||
m_MaxScrubTime: 30
|
||||
m_CompiledVersion: 0
|
||||
m_RuntimeVersion: 0
|
||||
m_RuntimeResources: {fileID: 0}
|
||||
m_BatchEmptyLifetime: 300
|
||||
8
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/VersionControlSettings.asset
Executable file
8
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/VersionControlSettings.asset
Executable file
@ -0,0 +1,8 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!890905787 &1
|
||||
VersionControlSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Mode: Visible Meta Files
|
||||
m_CollabEditorSettings:
|
||||
inProgressEnabled: 1
|
||||
5
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/XRPackageSettings.asset
Executable file
5
unity/XR_RM_PICO_UDP_Sender/ProjectSettings/XRPackageSettings.asset
Executable file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"m_Settings": [
|
||||
"RemoveLegacyInputHelpersForReload"
|
||||
]
|
||||
}
|
||||
62
unity/XR_RM_PICO_UDP_Sender/README.md
Executable file
62
unity/XR_RM_PICO_UDP_Sender/README.md
Executable file
@ -0,0 +1,62 @@
|
||||
# XR-RM PICO UDP Sender
|
||||
|
||||
Minimal Unity project for the direct PICO 4 Ultra UDP route in
|
||||
`docs/pico4_ultra_udp_teleop_setup.md`.
|
||||
|
||||
Configured target:
|
||||
|
||||
```text
|
||||
Host = 192.168.9.99
|
||||
Port = 15000
|
||||
Send Hz = 60
|
||||
Convert Unity To Project Coordinates = true
|
||||
Package Name = com.local.xr_rm_udp_sender
|
||||
```
|
||||
|
||||
Open this folder with the Ubuntu editor installed at:
|
||||
|
||||
```text
|
||||
/home/robot/Unity/Hub/Editor/2022.3.62f3c1/Editor/Unity
|
||||
```
|
||||
|
||||
Install Android Build Support, Android SDK/NDK, and OpenJDK from Unity Hub.
|
||||
|
||||
The PICO SDK is referenced from the sibling folder:
|
||||
|
||||
```text
|
||||
../PICO-Unity-Integration-SDK-release_3.4.0
|
||||
```
|
||||
|
||||
After opening the project:
|
||||
|
||||
1. Wait for Unity Package Manager to import `PICO Integration 3.4.0`.
|
||||
2. Run `XR-RM -> Apply UDP Sender Android Settings`.
|
||||
3. Build with `XR-RM -> Build Android APK`, or use Unity's Android Build window.
|
||||
|
||||
The automated setup enables Android, PICO XR Loader, API 29, Internet access,
|
||||
IL2CPP + ARM64, and the `PicoControllerUdpSender` scene object.
|
||||
|
||||
Runtime scene components:
|
||||
|
||||
- `PicoControllerUdpSender`: sends left/right controller JSON to the ROS2 host.
|
||||
- `PicoUdpConfigPanel`: in-headset config panel plus run HUD.
|
||||
- `PicoKeepAwake`: while UDP sending is on, requests PICO Enterprise wake lock,
|
||||
disables PICO auto sleep, applies Android `KEEP_SCREEN_ON`, and restores
|
||||
captured screen/sleep timeouts when sending stops.
|
||||
|
||||
The setup menu chooses the UDP target host from `XR_RM_UDP_TARGET_HOST` when
|
||||
set. Otherwise it auto-detects a local IPv4 address; on this Ubuntu machine the
|
||||
current Wi-Fi address is `192.168.9.99`.
|
||||
|
||||
Batchmode build example:
|
||||
|
||||
```bash
|
||||
cd /home/robot/WS_xr/src
|
||||
XR_RM_UDP_TARGET_HOST=192.168.9.99 \
|
||||
/home/robot/Unity/Hub/Editor/2022.3.62f3c1/Editor/Unity \
|
||||
-batchmode \
|
||||
-quit \
|
||||
-projectPath "$(pwd)/unity/XR_RM_PICO_UDP_Sender" \
|
||||
-executeMethod XrRmUdpSenderProjectSetup.BuildAndroidApk \
|
||||
-logFile "$(pwd)/unity_build.log"
|
||||
```
|
||||
Reference in New Issue
Block a user