protected override void FinishSetup(InputDeviceBuilder builder) { base.FinishSetup(builder); var capabilities = description.capabilities; var deviceDescriptor = XRDeviceDescriptor.FromJson(capabilities); if (deviceDescriptor != null) { if (deviceDescriptor.deviceRole == DeviceRole.LeftHanded) { InputSystem.SetDeviceUsage(this, CommonUsages.LeftHand); } else if (deviceDescriptor.deviceRole == DeviceRole.RightHanded) { InputSystem.SetDeviceUsage(this, CommonUsages.RightHand); } } }
internal static string OnFindLayoutForDevice(int deviceId, ref InputDeviceDescription description, string matchedLayout, IInputRuntime runtime) { // If the device isn't a XRInput, we're not interested. if (description.interfaceName != XRUtilities.kXRInterfaceCurrent && description.interfaceName != XRUtilities.kXRInterfaceV1) { return(null); } // If the description doesn't come with a XR SDK descriptor, we're not // interested either. if (string.IsNullOrEmpty(description.capabilities)) { return(null); } // Try to parse the XR descriptor. XRDeviceDescriptor deviceDescriptor; try { deviceDescriptor = XRDeviceDescriptor.FromJson(description.capabilities); } catch (Exception) { return(null); } if (deviceDescriptor == null) { return(null); } if (string.IsNullOrEmpty(matchedLayout)) { if (deviceDescriptor.deviceRole == DeviceRole.LeftHanded || deviceDescriptor.deviceRole == DeviceRole.RightHanded) { matchedLayout = "XRController"; } else if (deviceDescriptor.deviceRole == DeviceRole.Generic) { matchedLayout = "XRHMD"; } } string layoutName = null; if (string.IsNullOrEmpty(description.manufacturer)) { layoutName = string.Format("{0}::{1}", SanitizeName(description.interfaceName), SanitizeName(description.product)); } else { layoutName = string.Format("{0}::{1}::{2}", SanitizeName(description.interfaceName), SanitizeName(description.manufacturer), SanitizeName(description.product)); } var layout = new XRLayoutBuilder { descriptor = deviceDescriptor, parentLayout = matchedLayout, interfaceName = description.interfaceName }; InputSystem.RegisterLayoutBuilder(() => layout.Build(), layoutName, matchedLayout); return(layoutName); }