add unity doc.

This commit is contained in:
2026-05-30 16:04:37 +08:00
parent ce52895ec2
commit f4ee53d9c3
1538 changed files with 221228 additions and 2192 deletions

17
unity/XR_RM_PICO_UDP_Sender/.gitignore vendored Executable file
View File

@ -0,0 +1,17 @@
/Library/
/Temp/
/Obj/
/Build/
/Builds/
/Logs/
/UserSettings/
*.csproj
*.sln
*.user
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
sysinfo.txt

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0b55d9ac4b234bcb984d42d3d87f4f18
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bbe3a47119034546940d4a621f74e77b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a7d6206b5dd744f0967d32f4f87461d1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 25fc9e3c58c3ff84e8cbe943ce7900a9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2397792c84896c346b1c9782d84b4b7b
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ae56b4152c065f545b90d4d8a15a5d90
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c14f862605e067e48a1812ecaeae6cc6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View 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

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 452d3aa7f191564489e0b6bd1da20f22
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a106f6617ef14bc88f737d82559a136e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 3f6f64df724c4cf3a040530c120c37d7
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f169e2b3773b4251a0eebc3dd88e1b7d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e4c7a11d85854eddb40a6a614bfb129c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View 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
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 09740726046b89c1b89aad001e0caa83
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View 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";
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6d53b4ec62e44220a350bfe97f87d681
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 13b2a357a18be354fa53f3b373988484
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ee2817c3133c6884ab3c7f56bf39f12d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a25d5a0e12be3664da944c68c3bbcd6b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7451b163683d94f4b848b230514c7eda
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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: 1c52faa1787e89a4eaf8abdae2e6ae25, type: 3}
m_Name: PXR_Settings
m_EditorClassIdentifier:
stereoRenderingModeAndroid: 0
systemDisplayFrequency: 0
optimizeBufferDiscards: 1
enableAppSpaceWarp: 0
systemSplashScreen: {fileID: 0}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 059224c120ae442458f8d823f1a61cce
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c49ddd5c17188674cbc8a8202417d809
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b4209dd8ed8b68e47bed72c57621dc31
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 899d7e70781ccdc4fb59d70722dadd8a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b10eaead46d3ca344a76e7354c02a5a9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5eb3833504bb18c45b28f88ac198d88e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 59629bd48a2904f4dbf31e7642c990cc
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8503bf4d9a0202a40a1ff4c4676ccad4
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View 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"
}
}

View 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"
}
}
}
}

View 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

View File

@ -0,0 +1,6 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!236 &1
ClusterInputManager:
m_ObjectHideFlags: 0
m_Inputs: []

View 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

View File

@ -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}

View 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

View 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

View 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

View 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: {}

View 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

View 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

View 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

View 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: {}

View File

@ -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

View File

@ -0,0 +1,2 @@
m_EditorVersion: 2022.3.62f3c1
m_EditorVersionWithRevision: 2022.3.62f3c1 (1623fc0bbb97)

View 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

View 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
}

View 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

View 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

View 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

View 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

View 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

View File

@ -0,0 +1,5 @@
{
"m_Settings": [
"RemoveLegacyInputHelpersForReload"
]
}

View 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"
```