meta: adding dependencies
This commit is contained in:
parent
81e1bfa974
commit
1e2a68bd52
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 581b28b7a018d6446a9e55939415171b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"displayName": "Spatial Keyboard",
|
||||
"description": "Virtual spatial keyboard to allow for text entry in a world space UI. This interactable keyboard can be used in your app instead of the platform's system keyboard."
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c0a5d95a237741a4fbac6440bc7a75e1
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,66 @@
|
|||
%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: b53eb82258e249bb97cf3789c6a97dda, type: 3}
|
||||
m_Name: BlendShapeAffordance
|
||||
m_EditorClassIdentifier:
|
||||
m_Comments:
|
||||
m_ReadOnly: 1
|
||||
m_Value:
|
||||
m_StateAnimationCurve:
|
||||
m_UseConstant: 1
|
||||
m_ConstantValue:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_Variable: {fileID: 0}
|
||||
m_List:
|
||||
- stateName: disabled
|
||||
animationStateStartValue: 0
|
||||
animationStateEndValue: 0
|
||||
- stateName: idle
|
||||
animationStateStartValue: 5
|
||||
animationStateEndValue: 5
|
||||
- stateName: hovered
|
||||
animationStateStartValue: 15
|
||||
animationStateEndValue: 15
|
||||
- stateName: hoveredPriority
|
||||
animationStateStartValue: 0
|
||||
animationStateEndValue: 0
|
||||
- stateName: selected
|
||||
animationStateStartValue: 15
|
||||
animationStateEndValue: 15
|
||||
- stateName: activated
|
||||
animationStateStartValue: 0
|
||||
animationStateEndValue: 0
|
||||
- stateName: focused
|
||||
animationStateStartValue: 0
|
||||
animationStateEndValue: 0
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 37a719930348de649a3f10a8836c6a50
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,68 @@
|
|||
%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: b5d80f45fb5f4418a5e84a476e517628, type: 3}
|
||||
m_Name: GrabHandleColorAffordanceTheme
|
||||
m_EditorClassIdentifier:
|
||||
m_Comments:
|
||||
m_ReadOnly: 1
|
||||
m_Value:
|
||||
m_StateAnimationCurve:
|
||||
m_UseConstant: 1
|
||||
m_ConstantValue:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_Variable: {fileID: 0}
|
||||
m_List:
|
||||
- stateName: disabled
|
||||
animationStateStartValue: {r: 0, g: 0, b: 0, a: 0}
|
||||
animationStateEndValue: {r: 0, g: 0, b: 0, a: 0}
|
||||
- stateName: idle
|
||||
animationStateStartValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
animationStateEndValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
- stateName: hovered
|
||||
animationStateStartValue: {r: 0.09411766, g: 0.43921572, b: 0.7137255, a: 1}
|
||||
animationStateEndValue: {r: 0.09411766, g: 0.43921572, b: 0.7137255, a: 1}
|
||||
- stateName: hoveredPriority
|
||||
animationStateStartValue: {r: 0, g: 0, b: 0, a: 0}
|
||||
animationStateEndValue: {r: 0, g: 0, b: 0, a: 0}
|
||||
- stateName: selected
|
||||
animationStateStartValue: {r: 0.1254902, g: 0.5882353, b: 0.95294124, a: 1}
|
||||
animationStateEndValue: {r: 0.1254902, g: 0.5882353, b: 0.95294124, a: 1}
|
||||
- stateName: activated
|
||||
animationStateStartValue: {r: 0.56078434, g: 0.7960785, b: 0.97647065, a: 0}
|
||||
animationStateEndValue: {r: 0.56078434, g: 0.7960785, b: 0.97647065, a: 0}
|
||||
- stateName: focused
|
||||
animationStateStartValue: {r: 0.56078434, g: 0.7960785, b: 0.97647065, a: 0}
|
||||
animationStateEndValue: {r: 0.56078434, g: 0.7960785, b: 0.97647065, a: 0}
|
||||
m_ColorBlendMode: 0
|
||||
m_BlendAmount: 1
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ad4e83cc4eb3a974993a5a183887e287
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,68 @@
|
|||
%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: b5d80f45fb5f4418a5e84a476e517628, type: 3}
|
||||
m_Name: ScaleHandleColorAffordanceTheme
|
||||
m_EditorClassIdentifier:
|
||||
m_Comments:
|
||||
m_ReadOnly: 1
|
||||
m_Value:
|
||||
m_StateAnimationCurve:
|
||||
m_UseConstant: 1
|
||||
m_ConstantValue:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_Variable: {fileID: 0}
|
||||
m_List:
|
||||
- stateName: disabled
|
||||
animationStateStartValue: {r: 0, g: 0, b: 0, a: 0}
|
||||
animationStateEndValue: {r: 0, g: 0, b: 0, a: 0}
|
||||
- stateName: idle
|
||||
animationStateStartValue: {r: 1, g: 1, b: 1, a: 0.050980393}
|
||||
animationStateEndValue: {r: 1, g: 1, b: 1, a: 0.050980393}
|
||||
- stateName: hovered
|
||||
animationStateStartValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
animationStateEndValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
- stateName: hoveredPriority
|
||||
animationStateStartValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
animationStateEndValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
- stateName: selected
|
||||
animationStateStartValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
animationStateEndValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
- stateName: activated
|
||||
animationStateStartValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
animationStateEndValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
- stateName: focused
|
||||
animationStateStartValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
animationStateEndValue: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_ColorBlendMode: 0
|
||||
m_BlendAmount: 1
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0874a22edbf877c4183cb5ccde285f5a
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9ac15806e0a32c34a834dbb1bfa349c0
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
BIN
Game/Assets/Samples/XR Interaction Toolkit/3.0.3/Spatial Keyboard/Audio/Button_22_click.wav
(Stored with Git LFS)
Normal file
BIN
Game/Assets/Samples/XR Interaction Toolkit/3.0.3/Spatial Keyboard/Audio/Button_22_click.wav
(Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -0,0 +1,22 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f81fcd9edaa84754869e9e9acb3aece4
|
||||
AudioImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 6
|
||||
defaultSettings:
|
||||
loadType: 0
|
||||
sampleRateSetting: 0
|
||||
sampleRateOverride: 44100
|
||||
compressionFormat: 1
|
||||
quality: 1
|
||||
conversionMode: 0
|
||||
platformSettingOverrides: {}
|
||||
forceToMono: 0
|
||||
normalize: 1
|
||||
preloadAudioData: 1
|
||||
loadInBackground: 0
|
||||
ambisonic: 0
|
||||
3D: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: be59de3c98b87434f98d65b6c407ad31
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ebddc14e41f0117489ec33fb0c24a865
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,167 @@
|
|||
using UnityEngine;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard;
|
||||
|
||||
namespace UnityEditor.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
[CustomPropertyDrawer(typeof(XRKeyboardConfig.KeyMapping))]
|
||||
public class KeyMappingPropertyDrawer : PropertyDrawer
|
||||
{
|
||||
class SerializedPropertyFields
|
||||
{
|
||||
public SerializedProperty character;
|
||||
public SerializedProperty shiftCharacter;
|
||||
public SerializedProperty displayCharacter;
|
||||
public SerializedProperty shiftDisplayCharacter;
|
||||
public SerializedProperty displayIcon;
|
||||
public SerializedProperty shiftDisplayIcon;
|
||||
public SerializedProperty overrideDefaultKeyFunction;
|
||||
public SerializedProperty keyFunction;
|
||||
public SerializedProperty keyCode;
|
||||
public SerializedProperty disabled;
|
||||
|
||||
public void FindProperties(SerializedProperty property)
|
||||
{
|
||||
character = property.FindPropertyRelative("m_Character");
|
||||
shiftCharacter = property.FindPropertyRelative("m_ShiftCharacter");
|
||||
|
||||
displayCharacter = property.FindPropertyRelative("m_DisplayCharacter");
|
||||
shiftDisplayCharacter = property.FindPropertyRelative("m_ShiftDisplayCharacter");
|
||||
displayIcon = property.FindPropertyRelative("m_DisplayIcon");
|
||||
shiftDisplayIcon = property.FindPropertyRelative("m_ShiftDisplayIcon");
|
||||
|
||||
overrideDefaultKeyFunction = property.FindPropertyRelative("m_OverrideDefaultKeyFunction");
|
||||
keyFunction = property.FindPropertyRelative("m_KeyFunction");
|
||||
keyCode = property.FindPropertyRelative("m_KeyCode");
|
||||
disabled = property.FindPropertyRelative("m_Disabled");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Contents of GUI elements used by this editor.
|
||||
/// </summary>
|
||||
protected static class Contents
|
||||
{
|
||||
public static readonly GUIContent character = EditorGUIUtility.TrTextContent("Character", "Character for this key in non-shifted state. This string will be passed to the keyboard and appended to the keyboard text string or processed as a keyboard command.");
|
||||
public static readonly GUIContent shiftCharacter = EditorGUIUtility.TrTextContent("Shift Character", "Character for this key in a shifted state. This string will be passed to the keyboard and appended to the keyboard text string or processed as a keyboard command.");
|
||||
|
||||
public static readonly GUIContent displayCharacter = EditorGUIUtility.TrTextContent("Display Character", "Display character for this key in a non-shifted state. This string will be displayed on the key text field. If empty, character will be used as a fallback.");
|
||||
public static readonly GUIContent shiftDisplayCharacter = EditorGUIUtility.TrTextContent("Shift Display Character", "Display character for this key in a shifted state. This string will be displayed on the key text field. If empty, shift character will be used as a fallback.");
|
||||
public static readonly GUIContent displayIcon = EditorGUIUtility.TrTextContent("Display Icon", "Display icon for this key in a non-shifted state. This icon will be displayed on the key image field. If empty, the display character or character will be used as a fallback.");
|
||||
public static readonly GUIContent shiftDisplayIcon = EditorGUIUtility.TrTextContent("Shift Display Icon", "Display icon for this key in a shifted state. This icon will be displayed on the key image field. If empty, the shift display character or shift character will be used as a fallback.");
|
||||
|
||||
public static readonly GUIContent overrideDefaultKeyFunction = EditorGUIUtility.TrTextContent("Override Default Key Function", "If true, this will expose a key function property to override the default key function of this config.");
|
||||
public static readonly GUIContent keyFunction = EditorGUIUtility.TrTextContent("Key Function", "KeyFunction used for this key. The function callback will be called on key press and used to communicate with the keyboard API.");
|
||||
public static readonly GUIContent keyCode = EditorGUIUtility.TrTextContent("Key Code", "(Optional) KeyCode used for this key. Used with Key Function to support already defined KeyCode values.");
|
||||
public static readonly GUIContent disabled = EditorGUIUtility.TrTextContent("Disabled", "If true, the key button interactable property will be set to false.");
|
||||
}
|
||||
|
||||
readonly SerializedPropertyFields m_Fields = new SerializedPropertyFields();
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="PropertyDrawer"/>.
|
||||
/// </summary>
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
if (property.isExpanded)
|
||||
{
|
||||
// 1 Foldout header + 3 boldLabel headers + 10 or 9 PropertyField
|
||||
m_Fields.FindProperties(property);
|
||||
var numLines = m_Fields.overrideDefaultKeyFunction.boolValue ? 14 : 13;
|
||||
return EditorGUIUtility.singleLineHeight * numLines + EditorGUIUtility.standardVerticalSpacing * (numLines - 1);
|
||||
}
|
||||
|
||||
return EditorGUIUtility.singleLineHeight;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="PropertyDrawer"/>.
|
||||
/// </summary>
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
EditorGUI.BeginProperty(position, label, property);
|
||||
|
||||
// Don't make child fields be indented
|
||||
var indent = EditorGUI.indentLevel;
|
||||
EditorGUI.indentLevel = 0;
|
||||
|
||||
var propertyRect = position;
|
||||
propertyRect.height = EditorGUIUtility.singleLineHeight;
|
||||
|
||||
m_Fields.FindProperties(property);
|
||||
|
||||
property.isExpanded = EditorGUI.Foldout(propertyRect, property.isExpanded, GetPreviewString(m_Fields), true);
|
||||
|
||||
// Draw expanded properties
|
||||
if (property.isExpanded)
|
||||
{
|
||||
var yDelta = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
||||
propertyRect.y += yDelta;
|
||||
|
||||
// Character settings
|
||||
EditorGUI.LabelField(propertyRect, "Character Settings", EditorStyles.boldLabel);
|
||||
propertyRect.y += yDelta;
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.character, Contents.character);
|
||||
propertyRect.y += yDelta;
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.shiftCharacter, Contents.shiftCharacter);
|
||||
propertyRect.y += yDelta;
|
||||
}
|
||||
|
||||
// Display settings
|
||||
EditorGUI.LabelField(propertyRect, "Display Settings", EditorStyles.boldLabel);
|
||||
propertyRect.y += yDelta;
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.displayCharacter, Contents.displayCharacter);
|
||||
propertyRect.y += yDelta;
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.shiftDisplayCharacter, Contents.shiftDisplayCharacter);
|
||||
propertyRect.y += yDelta;
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.displayIcon, Contents.displayIcon);
|
||||
propertyRect.y += yDelta;
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.shiftDisplayIcon, Contents.shiftDisplayIcon);
|
||||
propertyRect.y += yDelta;
|
||||
}
|
||||
|
||||
// Function settings
|
||||
EditorGUI.LabelField(propertyRect, "Function Settings", EditorStyles.boldLabel);
|
||||
propertyRect.y += yDelta;
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.overrideDefaultKeyFunction, Contents.overrideDefaultKeyFunction);
|
||||
propertyRect.y += yDelta;
|
||||
if (m_Fields.overrideDefaultKeyFunction.boolValue)
|
||||
{
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.keyFunction, Contents.keyFunction);
|
||||
propertyRect.y += yDelta;
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.keyCode, Contents.keyCode);
|
||||
propertyRect.y += yDelta;
|
||||
EditorGUI.PropertyField(propertyRect, m_Fields.disabled, Contents.disabled);
|
||||
propertyRect.y += yDelta;
|
||||
}
|
||||
}
|
||||
|
||||
// Set indent back to what it was
|
||||
EditorGUI.indentLevel = indent;
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
|
||||
static string GetPreviewString(SerializedPropertyFields fields)
|
||||
{
|
||||
if (fields.overrideDefaultKeyFunction.boolValue)
|
||||
{
|
||||
var keyFunctionName = fields.keyFunction.objectReferenceValue != null
|
||||
? fields.keyFunction.objectReferenceValue.name
|
||||
: "None";
|
||||
return $"{fields.character.stringValue} [{keyFunctionName}]";
|
||||
}
|
||||
|
||||
return fields.character.stringValue;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bf84391e5296de6468c2c36a85c6ee65
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,120 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Unity.XR.CoreUtils.Editor;
|
||||
using UnityEditor.PackageManager.UI;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityEditor.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Unity Editor class which registers Project Validation rules for the Spatial Keyboard sample,
|
||||
/// checking that other required samples are installed.
|
||||
/// </summary>
|
||||
static class SpatialKeyboardSampleProjectValidation
|
||||
{
|
||||
const string k_SampleDisplayName = "Spatial Keyboard";
|
||||
const string k_Category = "XR Interaction Toolkit";
|
||||
const string k_StarterAssetsSampleName = "Starter Assets";
|
||||
const string k_ProjectValidationSettingsPath = "Project/XR Plug-in Management/Project Validation";
|
||||
const string k_XRIPackageName = "com.unity.xr.interaction.toolkit";
|
||||
|
||||
static readonly BuildTargetGroup[] s_BuildTargetGroups =
|
||||
((BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup))).Distinct().ToArray();
|
||||
|
||||
static readonly List<BuildValidationRule> s_BuildValidationRules = new List<BuildValidationRule>
|
||||
{
|
||||
new BuildValidationRule
|
||||
{
|
||||
Message = $"[{k_SampleDisplayName}] {k_StarterAssetsSampleName} sample from XR Interaction Toolkit ({k_XRIPackageName}) package must be imported or updated to use this sample.",
|
||||
Category = k_Category,
|
||||
CheckPredicate = () => TryFindSample(k_XRIPackageName, string.Empty, k_StarterAssetsSampleName, out var sample) && sample.isImported,
|
||||
FixIt = () =>
|
||||
{
|
||||
if (TryFindSample(k_XRIPackageName, string.Empty, k_StarterAssetsSampleName, out var sample))
|
||||
{
|
||||
sample.Import(Sample.ImportOptions.OverridePreviousImports);
|
||||
}
|
||||
},
|
||||
FixItAutomatic = true,
|
||||
Error = true,
|
||||
},
|
||||
};
|
||||
|
||||
[InitializeOnLoadMethod]
|
||||
static void RegisterProjectValidationRules()
|
||||
{
|
||||
foreach (var buildTargetGroup in s_BuildTargetGroups)
|
||||
{
|
||||
BuildValidator.AddRules(buildTargetGroup, s_BuildValidationRules);
|
||||
}
|
||||
|
||||
// Delay evaluating conditions for issues to give time for Package Manager and UPM cache to fully initialize.
|
||||
EditorApplication.delayCall += ShowWindowIfIssuesExist;
|
||||
}
|
||||
|
||||
static void ShowWindowIfIssuesExist()
|
||||
{
|
||||
foreach (var validation in s_BuildValidationRules)
|
||||
{
|
||||
if (validation.CheckPredicate == null || !validation.CheckPredicate.Invoke())
|
||||
{
|
||||
ShowWindow();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal static void ShowWindow()
|
||||
{
|
||||
// Delay opening the window since sometimes other settings in the player settings provider redirect to the
|
||||
// project validation window causing serialized objects to be nullified.
|
||||
EditorApplication.delayCall += () =>
|
||||
{
|
||||
SettingsService.OpenProjectSettings(k_ProjectValidationSettingsPath);
|
||||
};
|
||||
}
|
||||
|
||||
static bool TryFindSample(string packageName, string packageVersion, string sampleDisplayName, out Sample sample)
|
||||
{
|
||||
sample = default;
|
||||
|
||||
if (!PackageVersionUtility.IsPackageInstalled(packageName))
|
||||
return false;
|
||||
|
||||
IEnumerable<Sample> packageSamples;
|
||||
try
|
||||
{
|
||||
packageSamples = Sample.FindByPackage(packageName, packageVersion);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError($"Couldn't find samples of the {ToString(packageName, packageVersion)} package; aborting project validation rule. Exception: {e}");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (packageSamples == null)
|
||||
{
|
||||
Debug.LogWarning($"Couldn't find samples of the {ToString(packageName, packageVersion)} package; aborting project validation rule.");
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach (var packageSample in packageSamples)
|
||||
{
|
||||
if (packageSample.displayName == sampleDisplayName)
|
||||
{
|
||||
sample = packageSample;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Debug.LogWarning($"Couldn't find {sampleDisplayName} sample in the {ToString(packageName, packageVersion)} package; aborting project validation rule.");
|
||||
return false;
|
||||
}
|
||||
|
||||
static string ToString(string packageName, string packageVersion)
|
||||
{
|
||||
return string.IsNullOrEmpty(packageVersion) ? packageName : $"{packageName}@{packageVersion}";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 50fef6c461e4ab04ebeadac7b7e61185
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,34 @@
|
|||
using UnityEngine;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard;
|
||||
|
||||
namespace UnityEditor.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Custom editor for an <see cref="XRKeyboardConfig"/>.
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(XRKeyboardConfig), true), CanEditMultipleObjects]
|
||||
public class XRKeyboardConfigEditor : BaseInteractionEditor
|
||||
{
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardConfig.defaultKeyFunction"/>.</summary>
|
||||
protected SerializedProperty m_DefaultKeyFunction;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardConfig.keyMappings"/>.</summary>
|
||||
protected SerializedProperty m_KeyMappings;
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="Editor"/>.
|
||||
/// </summary>
|
||||
protected virtual void OnEnable()
|
||||
{
|
||||
m_DefaultKeyFunction = serializedObject.FindProperty("m_DefaultKeyFunction");
|
||||
m_KeyMappings = serializedObject.FindProperty("m_KeyMappings");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void DrawInspector()
|
||||
{
|
||||
DrawScript();
|
||||
EditorGUILayout.PropertyField(m_DefaultKeyFunction);
|
||||
EditorGUILayout.PropertyField(m_KeyMappings);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 336152d70bca65d49a424cea3b6cd4b8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,119 @@
|
|||
using UnityEngine;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard;
|
||||
|
||||
namespace UnityEditor.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Custom editor for an <see cref="XRKeyboardDisplay"/>.
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(XRKeyboardDisplay), true), CanEditMultipleObjects]
|
||||
public class XRKeyboardDisplayEditor : BaseInteractionEditor
|
||||
{
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.inputField"/>.</summary>
|
||||
protected SerializedProperty m_InputField;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.keyboard"/>.</summary>
|
||||
protected SerializedProperty m_Keyboard;
|
||||
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.useSceneKeyboard"/>.</summary>
|
||||
protected SerializedProperty m_UseSceneKeyboard;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.updateOnKeyPress"/>.</summary>
|
||||
protected SerializedProperty m_UpdateOnKeyPress;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.alwaysObserveKeyboard"/>.</summary>
|
||||
protected SerializedProperty m_AlwaysObserveKeyboard;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.monitorInputFieldCharacterLimit"/>.</summary>
|
||||
protected SerializedProperty m_MonitorInputFieldCharacterLimit;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.clearTextOnSubmit"/>.</summary>
|
||||
protected SerializedProperty m_ClearTextOnSubmit;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.clearTextOnOpen"/>.</summary>
|
||||
protected SerializedProperty m_ClearTextOnOpen;
|
||||
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.onKeyboardOpened"/>.</summary>
|
||||
protected SerializedProperty m_OnKeyboardOpened;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.onKeyboardClosed"/>.</summary>
|
||||
protected SerializedProperty m_OnKeyboardClosed;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.onKeyboardFocusChanged"/>.</summary>
|
||||
protected SerializedProperty m_OnKeyboardFocusChanged;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardDisplay.onTextSubmitted"/>.</summary>
|
||||
protected SerializedProperty m_OnTextSubmitted;
|
||||
|
||||
/// <summary>
|
||||
/// Contents of GUI elements used by this editor.
|
||||
/// </summary>
|
||||
protected static class Contents
|
||||
{
|
||||
public static readonly GUIContent inputField = EditorGUIUtility.TrTextContent("Input Field", "Input field linked to this display");
|
||||
public static readonly GUIContent keyboard = EditorGUIUtility.TrTextContent("Keyboard", "Keyboard for this display to monitor and interact with. If empty this will default to the GlobalNonNativeKeyboard keyboard.");
|
||||
|
||||
public static readonly GUIContent useSceneKeyboard = EditorGUIUtility.TrTextContent("Use Scene Keyboard", "If true, this display will use the keyboard reference. If false or if the keyboard field is empty, this display will use global keyboard.");
|
||||
public static readonly GUIContent updateOnKeyPress = EditorGUIUtility.TrTextContent("Update on Key Press", "If true, this display will update with each key press. If false, this display will update on OnTextSubmit.");
|
||||
public static readonly GUIContent alwaysObserveKeyboard = EditorGUIUtility.TrTextContent("Always Observe Keyboard", "If true, this display will always subscribe to the keyboard updates. If false, this display will subscribe to keyboard when the input field gains focus.");
|
||||
public static readonly GUIContent monitorInputFieldCharacterLimit = EditorGUIUtility.TrTextContent("Monitor Input Field Character Limit", "If true, this display will use the input field's character limit to limit the update text from the keyboard and will pass this into the keyboard when opening.");
|
||||
public static readonly GUIContent clearTextOnSubmit = EditorGUIUtility.TrTextContent("Clear Text on Submit", "If true, this display will clear the input field text on text submit from the keyboard.");
|
||||
public static readonly GUIContent clearTextOnOpen = EditorGUIUtility.TrTextContent("Clear Text on Open", "If true, this display will clear the input field text when the keyboard opens.");
|
||||
|
||||
public static readonly GUIContent keyboardEvents = EditorGUIUtility.TrTextContent("Keyboard Display Events", "Events associated with the keyboard display");
|
||||
public static readonly GUIContent onKeyboardOpened = EditorGUIUtility.TrTextContent("On Keyboard Opened", "The event that is called when this display opens a keyboard.");
|
||||
public static readonly GUIContent onKeyboardClosed = EditorGUIUtility.TrTextContent("On Keyboard Closed", "The event that is called when the keyboard this display is observing is closed.");
|
||||
public static readonly GUIContent onKeyboardFocusChanged = EditorGUIUtility.TrTextContent("On Keyboard Focus Changed", "The event that is called when the keyboard changes focus and this display is not focused.");
|
||||
public static readonly GUIContent onTextSubmitted = EditorGUIUtility.TrTextContent("On Text Submitted", "The event that is called when this display receives a text submitted event from the keyboard. Invoked with the keyboard text as a parameter.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="Editor"/>.
|
||||
/// </summary>
|
||||
protected virtual void OnEnable()
|
||||
{
|
||||
m_InputField = serializedObject.FindProperty("m_InputField");
|
||||
m_Keyboard = serializedObject.FindProperty("m_Keyboard");
|
||||
|
||||
m_UseSceneKeyboard = serializedObject.FindProperty("m_UseSceneKeyboard");
|
||||
m_UpdateOnKeyPress = serializedObject.FindProperty("m_UpdateOnKeyPress");
|
||||
m_AlwaysObserveKeyboard = serializedObject.FindProperty("m_AlwaysObserveKeyboard");
|
||||
m_MonitorInputFieldCharacterLimit = serializedObject.FindProperty("m_MonitorInputFieldCharacterLimit");
|
||||
m_ClearTextOnSubmit = serializedObject.FindProperty("m_ClearTextOnSubmit");
|
||||
m_ClearTextOnOpen = serializedObject.FindProperty("m_ClearTextOnOpen");
|
||||
|
||||
m_OnKeyboardOpened = serializedObject.FindProperty("m_OnKeyboardOpened");
|
||||
m_OnKeyboardClosed = serializedObject.FindProperty("m_OnKeyboardClosed");
|
||||
m_OnKeyboardFocusChanged = serializedObject.FindProperty("m_OnKeyboardFocusChanged");
|
||||
m_OnTextSubmitted = serializedObject.FindProperty("m_OnTextSubmitted");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void DrawInspector()
|
||||
{
|
||||
DrawScript();
|
||||
|
||||
EditorGUILayout.PropertyField(m_InputField, Contents.inputField);
|
||||
EditorGUILayout.PropertyField(m_UseSceneKeyboard, Contents.useSceneKeyboard);
|
||||
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
using (new EditorGUI.DisabledScope(!m_UseSceneKeyboard.boolValue || Application.isPlaying))
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_Keyboard, Contents.keyboard);
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUILayout.PropertyField(m_UpdateOnKeyPress, Contents.updateOnKeyPress);
|
||||
EditorGUILayout.PropertyField(m_AlwaysObserveKeyboard, Contents.alwaysObserveKeyboard);
|
||||
EditorGUILayout.PropertyField(m_MonitorInputFieldCharacterLimit, Contents.monitorInputFieldCharacterLimit);
|
||||
EditorGUILayout.PropertyField(m_ClearTextOnSubmit, Contents.clearTextOnSubmit);
|
||||
EditorGUILayout.PropertyField(m_ClearTextOnOpen, Contents.clearTextOnOpen);
|
||||
|
||||
DrawKeyboardEvents();
|
||||
}
|
||||
|
||||
void DrawKeyboardEvents()
|
||||
{
|
||||
m_OnTextSubmitted.isExpanded = EditorGUILayout.Foldout(m_OnTextSubmitted.isExpanded, Contents.keyboardEvents, toggleOnLabelClick: true);
|
||||
if (m_OnTextSubmitted.isExpanded)
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_OnTextSubmitted, Contents.onTextSubmitted);
|
||||
EditorGUILayout.PropertyField(m_OnKeyboardOpened, Contents.onKeyboardOpened);
|
||||
EditorGUILayout.PropertyField(m_OnKeyboardClosed, Contents.onKeyboardClosed);
|
||||
EditorGUILayout.PropertyField(m_OnKeyboardFocusChanged, Contents.onKeyboardFocusChanged);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 933dba84a98d0a94facc4dd555755984
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,112 @@
|
|||
using UnityEngine;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard;
|
||||
|
||||
namespace UnityEditor.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Custom editor for an <see cref="XRKeyboard"/>.
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(XRKeyboard), true), CanEditMultipleObjects]
|
||||
public class XRKeyboardEditor : BaseInteractionEditor
|
||||
{
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.submitOnEnter"/>.</summary>
|
||||
protected SerializedProperty m_SubmitOnEnter;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.closeOnSubmit"/>.</summary>
|
||||
protected SerializedProperty m_CloseOnSubmit;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.doubleClickInterval"/>.</summary>
|
||||
protected SerializedProperty m_DoubleClickInterval;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.subsetLayout"/>.</summary>
|
||||
protected SerializedProperty m_SubsetLayout;
|
||||
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.onTextSubmitted"/>.</summary>
|
||||
protected SerializedProperty m_OnTextSubmit;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.onTextUpdated"/>.</summary>
|
||||
protected SerializedProperty m_OnTextUpdate;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.onKeyPressed"/>.</summary>
|
||||
protected SerializedProperty m_OnKeyPressed;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.onShifted"/>.</summary>
|
||||
protected SerializedProperty m_OnShift;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.onLayoutChanged"/>.</summary>
|
||||
protected SerializedProperty m_OnLayoutChange;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.onOpened"/>.</summary>
|
||||
protected SerializedProperty m_OnOpen;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.onClosed"/>.</summary>
|
||||
protected SerializedProperty m_OnClose;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.onFocusChanged"/>.</summary>
|
||||
protected SerializedProperty m_OnFocusChanged;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboard.onCharacterLimitReached"/>.</summary>
|
||||
protected SerializedProperty m_OnCharacterLimitReached;
|
||||
|
||||
/// <summary>
|
||||
/// Contents of GUI elements used by this editor.
|
||||
/// </summary>
|
||||
protected static class Contents
|
||||
{
|
||||
public static readonly GUIContent submitOnEnter = EditorGUIUtility.TrTextContent("Submit On Enter", "If true, On Text Submit will be invoked when the keyboard receives a return or enter command. Otherwise it will treat return or enter as a newline.");
|
||||
public static readonly GUIContent closeOnSubmit = EditorGUIUtility.TrTextContent("Close On Submit", "If true, keyboard will close on enter or return command.");
|
||||
public static readonly GUIContent doubleClickInterval = EditorGUIUtility.TrTextContent("Double Click Interval", "Interval in which a key pressed twice would be considered a double click.");
|
||||
public static readonly GUIContent subsetLayout = EditorGUIUtility.TrTextContent("Subset Layout", "List of layouts this keyboard is able to switch between given the corresponding layout command.");
|
||||
|
||||
public static readonly GUIContent keyboardEvents = EditorGUIUtility.TrTextContent("Keyboard Events", "Events associated with the keyboard.");
|
||||
public static readonly GUIContent onTextSubmit = EditorGUIUtility.TrTextContent("On Text Submitted", "Event invoked when keyboard submits text.");
|
||||
public static readonly GUIContent onTextUpdate = EditorGUIUtility.TrTextContent("On Text Updated", "Event invoked when keyboard text is updated.");
|
||||
public static readonly GUIContent onKeyPressed = EditorGUIUtility.TrTextContent("On Key Pressed", "Event invoked after a key is pressed.");
|
||||
public static readonly GUIContent onShift = EditorGUIUtility.TrTextContent("On Shifted", "Event invoked after keyboard shift is changed.");
|
||||
public static readonly GUIContent onLayoutChange = EditorGUIUtility.TrTextContent("On Layout Changed", "Event invoked when the keyboard is opened. Called with the keyboard and the new layout string key.");
|
||||
public static readonly GUIContent onOpen = EditorGUIUtility.TrTextContent("On Opened", "Event invoked when the keyboard is opened.");
|
||||
public static readonly GUIContent onClose = EditorGUIUtility.TrTextContent("On Closed", "Event invoked after the keyboard is closed.");
|
||||
public static readonly GUIContent onFocusChanged = EditorGUIUtility.TrTextContent("On Focus Changed", "Event invoked when the keyboard changes or gains input field focus.");
|
||||
public static readonly GUIContent onCharacterLimitReached = EditorGUIUtility.TrTextContent("On Character Limit Reached", "Event invoked when the keyboard tries to update text, but the character of the input field is reached.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="Editor"/>.
|
||||
/// </summary>
|
||||
protected virtual void OnEnable()
|
||||
{
|
||||
m_SubmitOnEnter = serializedObject.FindProperty("m_SubmitOnEnter");
|
||||
m_CloseOnSubmit = serializedObject.FindProperty("m_CloseOnSubmit");
|
||||
m_DoubleClickInterval = serializedObject.FindProperty("m_DoubleClickInterval");
|
||||
m_SubsetLayout = serializedObject.FindProperty("m_SubsetLayout");
|
||||
|
||||
m_OnTextSubmit = serializedObject.FindProperty("m_OnTextSubmitted");
|
||||
m_OnTextUpdate = serializedObject.FindProperty("m_OnTextUpdated");
|
||||
m_OnKeyPressed = serializedObject.FindProperty("m_OnKeyPressed");
|
||||
m_OnShift = serializedObject.FindProperty("m_OnShifted");
|
||||
m_OnLayoutChange = serializedObject.FindProperty("m_OnLayoutChanged");
|
||||
m_OnOpen = serializedObject.FindProperty("m_OnOpened");
|
||||
m_OnClose = serializedObject.FindProperty("m_OnClosed");
|
||||
m_OnFocusChanged = serializedObject.FindProperty("m_OnFocusChanged");
|
||||
m_OnCharacterLimitReached = serializedObject.FindProperty("m_OnCharacterLimitReached");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void DrawInspector()
|
||||
{
|
||||
DrawScript();
|
||||
EditorGUILayout.PropertyField(m_SubmitOnEnter, Contents.submitOnEnter);
|
||||
EditorGUILayout.PropertyField(m_CloseOnSubmit, Contents.closeOnSubmit);
|
||||
EditorGUILayout.PropertyField(m_DoubleClickInterval, Contents.doubleClickInterval);
|
||||
EditorGUILayout.PropertyField(m_SubsetLayout, Contents.subsetLayout);
|
||||
|
||||
DrawKeyboardEvents();
|
||||
}
|
||||
|
||||
void DrawKeyboardEvents()
|
||||
{
|
||||
m_OnOpen.isExpanded = EditorGUILayout.Foldout(m_OnOpen.isExpanded, Contents.keyboardEvents, toggleOnLabelClick: true);
|
||||
if (m_OnOpen.isExpanded)
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_OnOpen, Contents.onOpen);
|
||||
EditorGUILayout.PropertyField(m_OnClose, Contents.onClose);
|
||||
EditorGUILayout.PropertyField(m_OnFocusChanged, Contents.onFocusChanged);
|
||||
EditorGUILayout.PropertyField(m_OnTextSubmit, Contents.onTextSubmit);
|
||||
EditorGUILayout.PropertyField(m_OnTextUpdate, Contents.onTextUpdate);
|
||||
EditorGUILayout.PropertyField(m_OnKeyPressed, Contents.onKeyPressed);
|
||||
EditorGUILayout.PropertyField(m_OnShift, Contents.onShift);
|
||||
EditorGUILayout.PropertyField(m_OnLayoutChange, Contents.onLayoutChange);
|
||||
EditorGUILayout.PropertyField(m_OnCharacterLimitReached, Contents.onCharacterLimitReached);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a09373fc8a4b6ae4e9868ff02f9e336a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,150 @@
|
|||
using UnityEditor.UI;
|
||||
using UnityEngine;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard;
|
||||
|
||||
namespace UnityEditor.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Custom editor for an <see cref="XRKeyboardKey"/>.
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(XRKeyboardKey), true), CanEditMultipleObjects]
|
||||
public class XRKeyboardKeyEditor : ButtonEditor
|
||||
{
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.keyFunction"/>.</summary>
|
||||
protected SerializedProperty m_KeyFunction;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.keyCode"/>.</summary>
|
||||
protected SerializedProperty m_KeyCode;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.character"/>.</summary>
|
||||
protected SerializedProperty m_Character;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.displayCharacter"/>.</summary>
|
||||
protected SerializedProperty m_DisplayCharacter;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.displayIcon"/>.</summary>
|
||||
protected SerializedProperty m_DisplayIcon;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.shiftCharacter"/>.</summary>
|
||||
protected SerializedProperty m_ShiftCharacter;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.shiftDisplayCharacter"/>.</summary>
|
||||
protected SerializedProperty m_ShiftDisplayCharacter;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.shiftDisplayIcon"/>.</summary>
|
||||
protected SerializedProperty m_ShiftDisplayIcon;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.updateOnKeyDown"/>.</summary>
|
||||
protected SerializedProperty m_UpdateOnKeyDown;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.textComponent"/>.</summary>
|
||||
protected SerializedProperty m_TextComponent;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.audioSource"/>.</summary>
|
||||
protected SerializedProperty m_AudioSource;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.highlightComponent"/>.</summary>
|
||||
protected SerializedProperty m_HighlightComponent;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="XRKeyboardKey.iconComponent"/>.</summary>
|
||||
protected SerializedProperty m_IconComponent;
|
||||
|
||||
/// <summary>
|
||||
/// Contents of GUI elements used by this editor.
|
||||
/// </summary>
|
||||
protected static class Contents
|
||||
{
|
||||
public static readonly GUIContent keyFunction = EditorGUIUtility.TrTextContent("Key Function", "KeyFunction used for this key. The FunctionCallBack will be called on key press and used to communicate with the keyboard.");
|
||||
public static readonly GUIContent keyCode = EditorGUIUtility.TrTextContent("Key Code", "(Optional) KeyCode used for this key. Used in conjunction with KeyCodeFunction or as a fallback for standard commands.");
|
||||
public static readonly GUIContent character = EditorGUIUtility.TrTextContent("Character", "Character for this key in non-shifted state. This string will be passed to the keyboard and appended to the keyboard text string or processed as a keyboard command.");
|
||||
public static readonly GUIContent displayCharacter = EditorGUIUtility.TrTextContent("Display Character", "Display character for this key in a non-shifted state. This string will be displayed on the key text field. If empty, character will be used as a fall back.");
|
||||
public static readonly GUIContent displayIcon = EditorGUIUtility.TrTextContent("Display Icon", "Display icon for this key in a non-shifted state. This icon will be displayed on the key image field. If empty, the display character or character will be used as a fall back.");
|
||||
public static readonly GUIContent shiftCharacter = EditorGUIUtility.TrTextContent("Shift Character", "Character for this key in a shifted state. This string will be passed to the keyboard and appended to the keyboard text string or processed as a keyboard command.");
|
||||
public static readonly GUIContent shiftDisplayCharacter = EditorGUIUtility.TrTextContent("Shift Display Character", "Display character for this key in a shifted state. This string will be displayed on the key text field. If empty, shift character will be used as a fall back.");
|
||||
public static readonly GUIContent shiftDisplayIcon = EditorGUIUtility.TrTextContent("Shift Display Icon", "Display icon for this key in a shifted state. This icon will be displayed on the key image field. If empty, the shift display character or shift character will be used as a fall back.");
|
||||
|
||||
public static readonly GUIContent updateOnDown = EditorGUIUtility.TrTextContent("Update on key down", "If true, the key pressed event will fire on button down. If false, the key pressed event will fire on OnClick.");
|
||||
public static readonly GUIContent textComponent = EditorGUIUtility.TrTextContent("Text Component", "Text field used to display key character.");
|
||||
public static readonly GUIContent audioSource = EditorGUIUtility.TrTextContent("Audio Source", "(Optional) Audio source played when key is pressed.");
|
||||
public static readonly GUIContent highlightComponent = EditorGUIUtility.TrTextContent("Highlight Component", "(Optional) Image used to highlight key indicating and active state.");
|
||||
public static readonly GUIContent iconComponent = EditorGUIUtility.TrTextContent("Icon Component", "(Optional) Image used for key icon, used as an alternative to a character.");
|
||||
public static readonly GUIContent buttonSettings = EditorGUIUtility.TrTextContent("Button Settings", "Settings for the keyboard key button.");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnEnable()
|
||||
{
|
||||
base.OnEnable();
|
||||
m_KeyFunction = serializedObject.FindProperty("m_KeyFunction");
|
||||
m_KeyCode = serializedObject.FindProperty("m_KeyCode");
|
||||
m_Character = serializedObject.FindProperty("m_Character");
|
||||
m_DisplayCharacter = serializedObject.FindProperty("m_DisplayCharacter");
|
||||
m_DisplayIcon = serializedObject.FindProperty("m_DisplayIcon");
|
||||
m_ShiftCharacter = serializedObject.FindProperty("m_ShiftCharacter");
|
||||
m_ShiftDisplayCharacter = serializedObject.FindProperty("m_ShiftDisplayCharacter");
|
||||
m_ShiftDisplayIcon = serializedObject.FindProperty("m_ShiftDisplayIcon");
|
||||
m_UpdateOnKeyDown = serializedObject.FindProperty("m_UpdateOnKeyDown");
|
||||
m_TextComponent = serializedObject.FindProperty("m_TextComponent");
|
||||
m_AudioSource = serializedObject.FindProperty("m_AudioSource");
|
||||
m_HighlightComponent = serializedObject.FindProperty("m_HighlightComponent");
|
||||
m_IconComponent = serializedObject.FindProperty("m_IconComponent");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
serializedObject.Update();
|
||||
DrawCharacterSettings();
|
||||
DrawDisplaySettings();
|
||||
DrawFunctionSettings();
|
||||
DrawComponentReferences();
|
||||
|
||||
// Draw basic key settings
|
||||
EditorGUILayout.PropertyField(m_UpdateOnKeyDown, Contents.updateOnDown);
|
||||
|
||||
// Draw button settings if that section is expanded
|
||||
m_UpdateOnKeyDown.isExpanded = EditorGUILayout.Foldout(m_UpdateOnKeyDown.isExpanded, Contents.buttonSettings, toggleOnLabelClick: true);
|
||||
if (m_UpdateOnKeyDown.isExpanded)
|
||||
{
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
base.OnInspectorGUI();
|
||||
}
|
||||
}
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
void DrawCharacterSettings()
|
||||
{
|
||||
EditorGUILayout.LabelField("Character Settings", EditorStyles.boldLabel);
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_Character, Contents.character);
|
||||
EditorGUILayout.PropertyField(m_ShiftCharacter, Contents.shiftCharacter);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawDisplaySettings()
|
||||
{
|
||||
EditorGUILayout.LabelField("Display Settings", EditorStyles.boldLabel);
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_DisplayCharacter, Contents.displayCharacter);
|
||||
EditorGUILayout.PropertyField(m_ShiftDisplayCharacter, Contents.shiftDisplayCharacter);
|
||||
EditorGUILayout.PropertyField(m_DisplayIcon, Contents.displayIcon);
|
||||
EditorGUILayout.PropertyField(m_ShiftDisplayIcon, Contents.shiftDisplayIcon);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawFunctionSettings()
|
||||
{
|
||||
EditorGUILayout.LabelField("Function Settings", EditorStyles.boldLabel);
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_KeyFunction, Contents.keyFunction);
|
||||
EditorGUILayout.PropertyField(m_KeyCode, Contents.keyCode);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawComponentReferences()
|
||||
{
|
||||
EditorGUILayout.LabelField("Component References", EditorStyles.boldLabel);
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_TextComponent, Contents.textComponent);
|
||||
EditorGUILayout.PropertyField(m_IconComponent, Contents.iconComponent);
|
||||
EditorGUILayout.PropertyField(m_HighlightComponent, Contents.highlightComponent);
|
||||
EditorGUILayout.PropertyField(m_AudioSource, Contents.audioSource);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2af9f13e3aa49624c9ed2bafb94c7146
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"name": "Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"Unity.XR.Interaction.Toolkit",
|
||||
"Unity.XR.Interaction.Toolkit.Editor",
|
||||
"Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard",
|
||||
"Unity.XR.CoreUtils",
|
||||
"Unity.XR.CoreUtils.Editor"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: caec957259cc5814287297ecb624a01b
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4d9dadfef58ccfc42be08b6ede878073
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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: 58528143acafcd44e93258c8e6a59dc5, type: 3}
|
||||
m_Name: Hide Function
|
||||
m_EditorClassIdentifier:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fafb46c355cbf0c4ab314558d216a90f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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: 92861f72e977a244cb0be6d8410a8d99, type: 3}
|
||||
m_Name: Key Code Function
|
||||
m_EditorClassIdentifier:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2ff02eb02547eaf41855aabb5c603f8b
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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: 0f25471b9f361d64ba3aebe064d73092, type: 3}
|
||||
m_Name: Layout Function
|
||||
m_EditorClassIdentifier:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: abe6f1e7debe4b842a92014211d944fb
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,15 @@
|
|||
%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: cad704687d7908f42b71e1e4516c590a, type: 3}
|
||||
m_Name: Shift Key Function
|
||||
m_EditorClassIdentifier:
|
||||
m_CapsLockDisplayIcon: {fileID: 21300000, guid: e9767100377274c4891dcd86110e54c5, type: 3}
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fd75c3033834cc447bf5886f0424c0b9
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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: 4857d519405a3874cb91aea6424e314d, type: 3}
|
||||
m_Name: Value Key Function
|
||||
m_EditorClassIdentifier:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5e3d82ae0a9ac0d43ada00a218daeefd
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ad3bc6be3dfc6fe4c93410327d58b369
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3f07009ab4050c7409967e768aa6a2fc
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,436 @@
|
|||
%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: 944d8cf1c59c0e8468bcd7e2fd86fe4d, type: 3}
|
||||
m_Name: LayoutAlphaNumeric
|
||||
m_EditorClassIdentifier:
|
||||
m_DefaultKeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyMappings:
|
||||
- m_Character: 1
|
||||
m_DisplayCharacter: 1
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 1
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: 2
|
||||
m_DisplayCharacter: 2
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 2
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: 3
|
||||
m_DisplayCharacter: 3
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 3
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: 4
|
||||
m_DisplayCharacter: 4
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 4
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: 5
|
||||
m_DisplayCharacter: 5
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 5
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: 6
|
||||
m_DisplayCharacter: 6
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 6
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: 7
|
||||
m_DisplayCharacter: 7
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 7
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: 8
|
||||
m_DisplayCharacter: 8
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 8
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: 9
|
||||
m_DisplayCharacter: 9
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 9
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: 0
|
||||
m_DisplayCharacter: 0
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: 0
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: q
|
||||
m_DisplayCharacter: q
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: Q
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: w
|
||||
m_DisplayCharacter: w
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: W
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: e
|
||||
m_DisplayCharacter: e
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: E
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: r
|
||||
m_DisplayCharacter: r
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: R
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: t
|
||||
m_DisplayCharacter: t
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: T
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: y
|
||||
m_DisplayCharacter: y
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: Y
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: u
|
||||
m_DisplayCharacter: u
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: U
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: i
|
||||
m_DisplayCharacter: i
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: I
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: o
|
||||
m_DisplayCharacter: o
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: O
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: p
|
||||
m_DisplayCharacter: p
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: P
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: a
|
||||
m_DisplayCharacter: a
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: A
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: s
|
||||
m_DisplayCharacter: s
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: S
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: d
|
||||
m_DisplayCharacter: d
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: D
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: f
|
||||
m_DisplayCharacter: f
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: F
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: g
|
||||
m_DisplayCharacter: g
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: G
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: h
|
||||
m_DisplayCharacter: h
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: H
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: j
|
||||
m_DisplayCharacter: j
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: J
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: k
|
||||
m_DisplayCharacter: k
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: K
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: l
|
||||
m_DisplayCharacter: l
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: L
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: \s
|
||||
m_DisplayCharacter: shift
|
||||
m_DisplayIcon: {fileID: 21300000, guid: acf80862a3f4c634394d450c760a8785, type: 3}
|
||||
m_ShiftCharacter: \s
|
||||
m_ShiftDisplayCharacter: shift
|
||||
m_ShiftDisplayIcon: {fileID: 21300000, guid: acf80862a3f4c634394d450c760a8785, type: 3}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: fd75c3033834cc447bf5886f0424c0b9, type: 2}
|
||||
m_KeyCode: 304
|
||||
m_Disabled: 0
|
||||
- m_Character: z
|
||||
m_DisplayCharacter: z
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: Z
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: x
|
||||
m_DisplayCharacter: x
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: X
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: c
|
||||
m_DisplayCharacter: c
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: C
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: v
|
||||
m_DisplayCharacter: v
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: V
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: b
|
||||
m_DisplayCharacter: b
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: B
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: n
|
||||
m_DisplayCharacter: n
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: N
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: m
|
||||
m_DisplayCharacter: m
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: M
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: \h
|
||||
m_DisplayCharacter: Hide
|
||||
m_DisplayIcon: {fileID: 21300000, guid: c79d61212a86f46498cf3acc9f5a3df9, type: 3}
|
||||
m_ShiftCharacter: \h
|
||||
m_ShiftDisplayCharacter: Hide
|
||||
m_ShiftDisplayIcon: {fileID: 21300000, guid: c79d61212a86f46498cf3acc9f5a3df9, type: 3}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: fafb46c355cbf0c4ab314558d216a90f, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: \e
|
||||
m_DisplayCharacter:
|
||||
m_DisplayIcon: {fileID: 21300000, guid: 1ba3355ce4a17124f9f3b0da441ac021, type: 3}
|
||||
m_ShiftCharacter: \e
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 21300000, guid: 1ba3355ce4a17124f9f3b0da441ac021, type: 3}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: abe6f1e7debe4b842a92014211d944fb, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 1
|
||||
- m_Character: \sym
|
||||
m_DisplayCharacter: '#+='
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: \sym
|
||||
m_ShiftDisplayCharacter: '#+='
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: abe6f1e7debe4b842a92014211d944fb, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: ' '
|
||||
m_DisplayCharacter: Space
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: ' '
|
||||
m_ShiftDisplayCharacter: Space
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyCode: 32
|
||||
m_Disabled: 0
|
||||
- m_Character: \r
|
||||
m_DisplayCharacter: Enter
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: \r
|
||||
m_ShiftDisplayCharacter: Enter
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: 2ff02eb02547eaf41855aabb5c603f8b, type: 2}
|
||||
m_KeyCode: 13
|
||||
m_Disabled: 0
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2580319e56ac659458811dcad1c26d69
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,436 @@
|
|||
%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: 944d8cf1c59c0e8468bcd7e2fd86fe4d, type: 3}
|
||||
m_Name: LayoutSymbols
|
||||
m_EditorClassIdentifier:
|
||||
m_DefaultKeyFunction: {fileID: 11400000, guid: 5e3d82ae0a9ac0d43ada00a218daeefd, type: 2}
|
||||
m_KeyMappings:
|
||||
- m_Character: '-'
|
||||
m_DisplayCharacter: '-'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: /
|
||||
m_DisplayCharacter: /
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: ':'
|
||||
m_DisplayCharacter: ':'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: ;
|
||||
m_DisplayCharacter: ;
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: (
|
||||
m_DisplayCharacter: (
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: )
|
||||
m_DisplayCharacter: )
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: $
|
||||
m_DisplayCharacter: $
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '&'
|
||||
m_DisplayCharacter: '&'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '@'
|
||||
m_DisplayCharacter: '@'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '"'
|
||||
m_DisplayCharacter: '"'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '['
|
||||
m_DisplayCharacter: '['
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: ']'
|
||||
m_DisplayCharacter: ']'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '{'
|
||||
m_DisplayCharacter: '{'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '}'
|
||||
m_DisplayCharacter: '}'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '#'
|
||||
m_DisplayCharacter: '#'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '%'
|
||||
m_DisplayCharacter: '%'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: ^
|
||||
m_DisplayCharacter: ^
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '*'
|
||||
m_DisplayCharacter: '*'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: +
|
||||
m_DisplayCharacter: +
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: =
|
||||
m_DisplayCharacter: =
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: _
|
||||
m_DisplayCharacter: _
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: \
|
||||
m_DisplayCharacter: \
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '|'
|
||||
m_DisplayCharacter: '|'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: ~
|
||||
m_DisplayCharacter: ~
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: <
|
||||
m_DisplayCharacter: <
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '>'
|
||||
m_DisplayCharacter: '>'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: "\u20AC"
|
||||
m_DisplayCharacter: "\u20AC"
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: "\xA3"
|
||||
m_DisplayCharacter: "\xA3"
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: "\xA5"
|
||||
m_DisplayCharacter: "\xA5"
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: \s
|
||||
m_DisplayCharacter: shift
|
||||
m_DisplayIcon: {fileID: 21300000, guid: acf80862a3f4c634394d450c760a8785, type: 3}
|
||||
m_ShiftCharacter: \s
|
||||
m_ShiftDisplayCharacter: shift
|
||||
m_ShiftDisplayIcon: {fileID: 21300000, guid: acf80862a3f4c634394d450c760a8785, type: 3}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: fd75c3033834cc447bf5886f0424c0b9, type: 2}
|
||||
m_KeyCode: 304
|
||||
m_Disabled: 1
|
||||
- m_Character: .
|
||||
m_DisplayCharacter: .
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: ','
|
||||
m_DisplayCharacter: ','
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '?'
|
||||
m_DisplayCharacter: '?'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '!'
|
||||
m_DisplayCharacter: '!'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: ''''
|
||||
m_DisplayCharacter: ''''
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: "\u2022"
|
||||
m_DisplayCharacter: "\u2022"
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: '`'
|
||||
m_DisplayCharacter: '`'
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: \h
|
||||
m_DisplayCharacter: Hide
|
||||
m_DisplayIcon: {fileID: 21300000, guid: c79d61212a86f46498cf3acc9f5a3df9, type: 3}
|
||||
m_ShiftCharacter: \h
|
||||
m_ShiftDisplayCharacter: Hide
|
||||
m_ShiftDisplayIcon: {fileID: 21300000, guid: c79d61212a86f46498cf3acc9f5a3df9, type: 3}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: fafb46c355cbf0c4ab314558d216a90f, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: \e
|
||||
m_DisplayCharacter:
|
||||
m_DisplayIcon: {fileID: 21300000, guid: 1ba3355ce4a17124f9f3b0da441ac021, type: 3}
|
||||
m_ShiftCharacter: \e
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 21300000, guid: 1ba3355ce4a17124f9f3b0da441ac021, type: 3}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: abe6f1e7debe4b842a92014211d944fb, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 1
|
||||
- m_Character: \sym
|
||||
m_DisplayCharacter: ABC
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: \sym
|
||||
m_ShiftDisplayCharacter: ABC
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: abe6f1e7debe4b842a92014211d944fb, type: 2}
|
||||
m_KeyCode: 0
|
||||
m_Disabled: 0
|
||||
- m_Character: ' '
|
||||
m_DisplayCharacter: Space
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: ' '
|
||||
m_ShiftDisplayCharacter: Space
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 0
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 32
|
||||
m_Disabled: 0
|
||||
- m_Character: \r
|
||||
m_DisplayCharacter: Enter
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter: \r
|
||||
m_ShiftDisplayCharacter: Enter
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_OverrideDefaultKeyFunction: 1
|
||||
m_KeyFunction: {fileID: 11400000, guid: 2ff02eb02547eaf41855aabb5c603f8b, type: 2}
|
||||
m_KeyCode: 13
|
||||
m_Disabled: 0
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 846fe994ca156db429b72643cdf7c042
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7e29b6f228e3ffe4ab218055470fceff
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,80 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: GrabHandle
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_BuildTextureStacks: []
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e6214d327b0cf3f4fbb4085685e38d0a
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,16 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e7883133e628dff4a86f50c082f77055, type: 3}
|
||||
m_Name: MaterialPipelineHandler
|
||||
m_EditorClassIdentifier:
|
||||
m_ShaderContainers: []
|
||||
m_AutoRefreshShaders: 1
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: eb7e5e68631561a4a8ccf587221af3a3
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,102 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: ScaleHandle
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ValidKeywords:
|
||||
- _ALPHABLEND_ON
|
||||
- _GLOSSYREFLECTIONS_OFF
|
||||
- _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
||||
- _SPECULARHIGHLIGHTS_OFF
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: 3000
|
||||
stringTagMap:
|
||||
RenderType: Transparent
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _SpecGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _ColorMask: 15
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 10
|
||||
- _GlossMapScale: 0
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 0
|
||||
- _Metallic: 0
|
||||
- _Mode: 2
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 1
|
||||
- _SpecularHighlights: 0
|
||||
- _SrcBlend: 5
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _Strength: 0.2
|
||||
- _UVSec: 0
|
||||
- _UseUIAlphaClip: 0
|
||||
- _ZWrite: 0
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 0.050980393}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
m_BuildTextureStacks: []
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 14907cbcede41d94f99fc623c76cce72
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: dd1cc06898271ab49802c8ff94559648
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
BIN
Game/Assets/Samples/XR Interaction Toolkit/3.0.3/Spatial Keyboard/Models/CurvedHandle.fbx
(Stored with Git LFS)
Normal file
BIN
Game/Assets/Samples/XR Interaction Toolkit/3.0.3/Spatial Keyboard/Models/CurvedHandle.fbx
(Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -0,0 +1,106 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ae54ba12b7f49c840a53ce0b50b389b6
|
||||
ModelImporter:
|
||||
serializedVersion: 21300
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 1
|
||||
motionNodeName:
|
||||
rigImportErrors:
|
||||
rigImportWarnings:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
BIN
Game/Assets/Samples/XR Interaction Toolkit/3.0.3/Spatial Keyboard/Models/CurvedHandleWedge.fbx
(Stored with Git LFS)
Normal file
BIN
Game/Assets/Samples/XR Interaction Toolkit/3.0.3/Spatial Keyboard/Models/CurvedHandleWedge.fbx
(Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -0,0 +1,106 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e1baba050113e0f44bd4f6b52e77696d
|
||||
ModelImporter:
|
||||
serializedVersion: 21300
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 0
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 1
|
||||
motionNodeName:
|
||||
rigImportErrors:
|
||||
rigImportWarnings:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 0
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 0
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
BIN
Game/Assets/Samples/XR Interaction Toolkit/3.0.3/Spatial Keyboard/Models/Spatial Panel Manipulator Model.fbx
(Stored with Git LFS)
Normal file
BIN
Game/Assets/Samples/XR Interaction Toolkit/3.0.3/Spatial Keyboard/Models/Spatial Panel Manipulator Model.fbx
(Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -0,0 +1,106 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e6666376763e6204a9760e199b9c04f5
|
||||
ModelImporter:
|
||||
serializedVersion: 21300
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 1
|
||||
motionNodeName:
|
||||
rigImportErrors:
|
||||
rigImportWarnings:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 0
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 1
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 60e4fc3810bec6144ba8b5da8afc6935
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,755 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &5185231984917197337
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5185231984917197345}
|
||||
- component: {fileID: 5185231984917197344}
|
||||
- component: {fileID: 5185231984917197343}
|
||||
- component: {fileID: 5185231984917197342}
|
||||
- component: {fileID: 5185231984917197340}
|
||||
- component: {fileID: 5185231984917197339}
|
||||
- component: {fileID: 5185231984917197338}
|
||||
- component: {fileID: 1715446783570025663}
|
||||
- component: {fileID: 3293349416794078848}
|
||||
m_Layer: 5
|
||||
m_Name: Input Field Global Keyboard
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5185231984917197345
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5185231984917197337}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.003, y: 0.003, z: 0.003}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 8437028974135710645}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 300, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!223 &5185231984917197344
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5185231984917197337}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 25
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &5185231984917197343
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5185231984917197337}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 1
|
||||
--- !u!114 &5185231984917197342
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5185231984917197337}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!222 &5185231984917197340
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5185231984917197337}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &5185231984917197339
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5185231984917197337}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0.7490196}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 8
|
||||
--- !u!114 &5185231984917197338
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5185231984917197337}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 16
|
||||
m_Right: 16
|
||||
m_Top: 12
|
||||
m_Bottom: 16
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 10
|
||||
m_ChildForceExpandWidth: 0
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!114 &1715446783570025663
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5185231984917197337}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_HorizontalFit: 0
|
||||
m_VerticalFit: 1
|
||||
--- !u!114 &3293349416794078848
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5185231984917197337}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 7951c64acb0fa62458bf30a60089fe2d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreReversedGraphics: 0
|
||||
m_CheckFor2DOcclusion: 0
|
||||
m_CheckFor3DOcclusion: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RaycastTriggerInteraction: 1
|
||||
--- !u!1 &8437028974135710644
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8437028974135710645}
|
||||
- component: {fileID: 8437028974135710649}
|
||||
- component: {fileID: 8437028974135710648}
|
||||
- component: {fileID: 8437028974135710651}
|
||||
- component: {fileID: 8437028974135710650}
|
||||
m_Layer: 5
|
||||
m_Name: InputField (TMP)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8437028974135710645
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974135710644}
|
||||
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:
|
||||
- {fileID: 8437028975400972187}
|
||||
m_Father: {fileID: 5185231984917197345}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 160, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8437028974135710649
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974135710644}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8437028974135710648
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974135710644}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &8437028974135710651
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974135710644}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 8437028974135710648}
|
||||
m_TextViewport: {fileID: 8437028975400972187}
|
||||
m_TextComponent: {fileID: 8437028974540207066}
|
||||
m_Placeholder: {fileID: 8437028974606165540}
|
||||
m_VerticalScrollbar: {fileID: 0}
|
||||
m_VerticalScrollbarEventHandler: {fileID: 0}
|
||||
m_LayoutGroup: {fileID: 0}
|
||||
m_ScrollSensitivity: 1
|
||||
m_ContentType: 0
|
||||
m_InputType: 0
|
||||
m_AsteriskChar: 42
|
||||
m_KeyboardType: 0
|
||||
m_LineType: 0
|
||||
m_HideMobileInput: 0
|
||||
m_HideSoftKeyboard: 1
|
||||
m_CharacterValidation: 0
|
||||
m_RegexValue:
|
||||
m_GlobalPointSize: 14
|
||||
m_CharacterLimit: 0
|
||||
m_OnEndEdit:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnSubmit:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnSelect:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnDeselect:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnTextSelection:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnEndTextSelection:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnTouchScreenKeyboardStatusChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||
m_CustomCaretColor: 0
|
||||
m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
|
||||
m_Text:
|
||||
m_CaretBlinkRate: 0.85
|
||||
m_CaretWidth: 1
|
||||
m_ReadOnly: 0
|
||||
m_RichText: 1
|
||||
m_GlobalFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_OnFocusSelectAll: 1
|
||||
m_ResetOnDeActivation: 1
|
||||
m_RestoreOriginalTextOnEscape: 1
|
||||
m_isRichTextEditingAllowed: 0
|
||||
m_LineLimit: 0
|
||||
m_InputValidator: {fileID: 0}
|
||||
--- !u!114 &8437028974135710650
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974135710644}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a2317ceab4d3d38419fe16eebc1c0cd3, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_InputField: {fileID: 8437028974135710651}
|
||||
m_Keyboard: {fileID: 0}
|
||||
m_UseSceneKeyboard: 0
|
||||
m_UpdateOnKeyPress: 1
|
||||
m_AlwaysObserveKeyboard: 0
|
||||
m_MonitorInputFieldCharacterLimit: 0
|
||||
m_ClearTextOnSubmit: 0
|
||||
m_ClearTextOnOpen: 0
|
||||
m_OnTextSubmitted:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnKeyboardOpened:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnKeyboardClosed:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnKeyboardFocusChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &8437028974540207060
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8437028974540207061}
|
||||
- component: {fileID: 8437028974540207067}
|
||||
- component: {fileID: 8437028974540207066}
|
||||
m_Layer: 5
|
||||
m_Name: Text
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8437028974540207061
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974540207060}
|
||||
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: 8437028975400972187}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8437028974540207067
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974540207060}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8437028974540207066
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974540207060}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u200B"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4281479730
|
||||
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 14
|
||||
m_fontSizeBase: 14
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 1
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!1 &8437028974606165537
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8437028974606165542}
|
||||
- component: {fileID: 8437028974606165541}
|
||||
- component: {fileID: 8437028974606165540}
|
||||
- component: {fileID: 8437028974606165543}
|
||||
m_Layer: 5
|
||||
m_Name: Placeholder
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8437028974606165542
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974606165537}
|
||||
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: 8437028975400972187}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8437028974606165541
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974606165537}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8437028974606165540
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974606165537}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: Enter text...
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 2150773298
|
||||
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 14
|
||||
m_fontSizeBase: 14
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 2
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 1
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &8437028974606165543
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028974606165537}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 1
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: -1
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!1 &8437028975400972186
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8437028975400972187}
|
||||
- component: {fileID: 8437028975400972184}
|
||||
m_Layer: 5
|
||||
m_Name: Text Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8437028975400972187
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028975400972186}
|
||||
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:
|
||||
- {fileID: 8437028974606165542}
|
||||
- {fileID: 8437028974540207061}
|
||||
m_Father: {fileID: 8437028974135710645}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: -0.5}
|
||||
m_SizeDelta: {x: -20, y: -13}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &8437028975400972184
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8437028975400972186}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding: {x: -8, y: -5, z: -8, w: -5}
|
||||
m_Softness: {x: 0, y: 0}
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1ff0f8852dba09f44a33463b31d011bc
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,755 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2106131159180314403
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2106131159180314395}
|
||||
- component: {fileID: 2106131159180314394}
|
||||
- component: {fileID: 2106131159180314405}
|
||||
- component: {fileID: 2106131159180314404}
|
||||
- component: {fileID: 2106131159180314406}
|
||||
- component: {fileID: 2106131159180314401}
|
||||
- component: {fileID: 2106131159180314400}
|
||||
- component: {fileID: 5548896429074786693}
|
||||
- component: {fileID: 8609631233081117626}
|
||||
m_Layer: 5
|
||||
m_Name: Input Field World Keyboard
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2106131159180314395
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2106131159180314403}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.003, y: 0.003, z: 0.003}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 3447935437714240047}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 300, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!223 &2106131159180314394
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2106131159180314403}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 25
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &2106131159180314405
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2106131159180314403}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 1
|
||||
--- !u!114 &2106131159180314404
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2106131159180314403}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!222 &2106131159180314406
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2106131159180314403}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &2106131159180314401
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2106131159180314403}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0.7490196}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 8
|
||||
--- !u!114 &2106131159180314400
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2106131159180314403}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 16
|
||||
m_Right: 16
|
||||
m_Top: 12
|
||||
m_Bottom: 16
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 10
|
||||
m_ChildForceExpandWidth: 0
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!114 &5548896429074786693
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2106131159180314403}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_HorizontalFit: 0
|
||||
m_VerticalFit: 1
|
||||
--- !u!114 &8609631233081117626
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2106131159180314403}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 7951c64acb0fa62458bf30a60089fe2d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreReversedGraphics: 0
|
||||
m_CheckFor2DOcclusion: 0
|
||||
m_CheckFor3DOcclusion: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RaycastTriggerInteraction: 1
|
||||
--- !u!1 &3447935436786261979
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3447935436786261978}
|
||||
- component: {fileID: 3447935436786261983}
|
||||
- component: {fileID: 3447935436786261980}
|
||||
- component: {fileID: 3447935436786261981}
|
||||
m_Layer: 5
|
||||
m_Name: Placeholder
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3447935436786261978
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935436786261979}
|
||||
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: 3447935436979216421}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3447935436786261983
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935436786261979}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3447935436786261980
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935436786261979}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: Enter text...
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 2150773298
|
||||
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 14
|
||||
m_fontSizeBase: 14
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 2
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 1
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &3447935436786261981
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935436786261979}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 1
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: -1
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!1 &3447935436979216418
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3447935436979216421}
|
||||
- component: {fileID: 3447935436979216420}
|
||||
m_Layer: 5
|
||||
m_Name: Text Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3447935436979216421
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935436979216418}
|
||||
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:
|
||||
- {fileID: 3447935436786261978}
|
||||
- {fileID: 3447935437304462856}
|
||||
m_Father: {fileID: 3447935437714240047}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: -0.5}
|
||||
m_SizeDelta: {x: -20, y: -13}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &3447935436979216420
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935436979216418}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding: {x: -8, y: -5, z: -8, w: -5}
|
||||
m_Softness: {x: 0, y: 0}
|
||||
--- !u!1 &3447935437304462857
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3447935437304462856}
|
||||
- component: {fileID: 3447935437304462858}
|
||||
- component: {fileID: 3447935437304462859}
|
||||
m_Layer: 5
|
||||
m_Name: Text
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3447935437304462856
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935437304462857}
|
||||
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: 3447935436979216421}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3447935437304462858
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935437304462857}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3447935437304462859
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935437304462857}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u200B"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4281479730
|
||||
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 14
|
||||
m_fontSizeBase: 14
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 1
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!1 &3447935437714240044
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3447935437714240047}
|
||||
- component: {fileID: 3447935437714240051}
|
||||
- component: {fileID: 3447935437714240048}
|
||||
- component: {fileID: 3447935437714240049}
|
||||
- component: {fileID: 3447935437714240046}
|
||||
m_Layer: 5
|
||||
m_Name: InputField (TMP)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3447935437714240047
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935437714240044}
|
||||
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:
|
||||
- {fileID: 3447935436979216421}
|
||||
m_Father: {fileID: 2106131159180314395}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 160, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3447935437714240051
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935437714240044}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3447935437714240048
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935437714240044}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &3447935437714240049
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935437714240044}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 3447935437714240048}
|
||||
m_TextViewport: {fileID: 3447935436979216421}
|
||||
m_TextComponent: {fileID: 3447935437304462859}
|
||||
m_Placeholder: {fileID: 3447935436786261980}
|
||||
m_VerticalScrollbar: {fileID: 0}
|
||||
m_VerticalScrollbarEventHandler: {fileID: 0}
|
||||
m_LayoutGroup: {fileID: 0}
|
||||
m_ScrollSensitivity: 1
|
||||
m_ContentType: 0
|
||||
m_InputType: 0
|
||||
m_AsteriskChar: 42
|
||||
m_KeyboardType: 0
|
||||
m_LineType: 0
|
||||
m_HideMobileInput: 0
|
||||
m_HideSoftKeyboard: 1
|
||||
m_CharacterValidation: 0
|
||||
m_RegexValue:
|
||||
m_GlobalPointSize: 14
|
||||
m_CharacterLimit: 8
|
||||
m_OnEndEdit:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnSubmit:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnSelect:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnDeselect:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnTextSelection:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnEndTextSelection:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnTouchScreenKeyboardStatusChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||
m_CustomCaretColor: 0
|
||||
m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
|
||||
m_Text:
|
||||
m_CaretBlinkRate: 0.85
|
||||
m_CaretWidth: 1
|
||||
m_ReadOnly: 0
|
||||
m_RichText: 1
|
||||
m_GlobalFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_OnFocusSelectAll: 1
|
||||
m_ResetOnDeActivation: 0
|
||||
m_RestoreOriginalTextOnEscape: 1
|
||||
m_isRichTextEditingAllowed: 0
|
||||
m_LineLimit: 0
|
||||
m_InputValidator: {fileID: 0}
|
||||
--- !u!114 &3447935437714240046
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3447935437714240044}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a2317ceab4d3d38419fe16eebc1c0cd3, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_InputField: {fileID: 3447935437714240049}
|
||||
m_Keyboard: {fileID: 0}
|
||||
m_UseSceneKeyboard: 1
|
||||
m_UpdateOnKeyPress: 1
|
||||
m_AlwaysObserveKeyboard: 0
|
||||
m_MonitorInputFieldCharacterLimit: 0
|
||||
m_ClearTextOnSubmit: 0
|
||||
m_ClearTextOnOpen: 0
|
||||
m_OnTextSubmitted:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnKeyboardOpened:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnKeyboardClosed:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_OnKeyboardFocusChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 978a908aeff4f144dadda280e00e34ee
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,132 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3702302986624515272
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3923090998476762128}
|
||||
- component: {fileID: 3579071922695784126}
|
||||
m_Layer: 0
|
||||
m_Name: Scale Handle Collider
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &3923090998476762128
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3702302986624515272}
|
||||
m_LocalRotation: {x: 0.000000044703487, y: 0.7071068, z: -0.7071068, w: 0.000000044703487}
|
||||
m_LocalPosition: {x: -0.686, y: 0, z: 0.632}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2196794532296188522}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 90, y: -30, z: -210}
|
||||
--- !u!64 &3579071922695784126
|
||||
MeshCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3702302986624515272}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 4
|
||||
m_Convex: 1
|
||||
m_CookingOptions: 30
|
||||
m_Mesh: {fileID: 6788383922943872000, guid: e1baba050113e0f44bd4f6b52e77696d, type: 3}
|
||||
--- !u!1 &6633183498948813012
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2196794532296188522}
|
||||
- component: {fileID: 7807628761442964775}
|
||||
- component: {fileID: 3361920201703168660}
|
||||
m_Layer: 0
|
||||
m_Name: Scale Handle
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2196794532296188522
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6633183498948813012}
|
||||
m_LocalRotation: {x: -0, y: -0.7071068, z: 0.7071068, w: 0}
|
||||
m_LocalPosition: {x: 3.7499998, y: 0.75, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 3923090998476762128}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 180}
|
||||
--- !u!33 &7807628761442964775
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6633183498948813012}
|
||||
m_Mesh: {fileID: 8128991250398310201, guid: ae54ba12b7f49c840a53ce0b50b389b6, type: 3}
|
||||
--- !u!23 &3361920201703168660
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6633183498948813012}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 14907cbcede41d94f99fc623c76cce72, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ed6de342cc483934a84e46eb1cfdbe6a
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,53 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2314523925997562666
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2314523925997562660}
|
||||
- component: {fileID: 2314523925997562667}
|
||||
m_Layer: 0
|
||||
m_Name: XRI Global Keyboard Manager
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2314523925997562660
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2314523925997562666}
|
||||
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_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &2314523925997562667
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2314523925997562666}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 015b50343a7cf174ebb7703245f6ba72, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_KeyboardPrefab: {fileID: 7339749990365776448, guid: 1aaf2dceef22d1147bfc70d706ddd188, type: 3}
|
||||
m_PlayerRoot: {fileID: 0}
|
||||
m_Keyboard: {fileID: 0}
|
||||
m_KeyboardOffset: {x: 0, y: -0.35, z: 0.25}
|
||||
m_CameraTransform: {fileID: 0}
|
||||
m_RepositionOutOfViewKeyboardOnOpen: 1
|
||||
m_FacingKeyboardThreshold: 0.15
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 763522a439f36ac4d881f5652181a2ee
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,633 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1253337762353444269
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2197442164563211728}
|
||||
- component: {fileID: 2743443539172796335}
|
||||
- component: {fileID: 5599558209658972096}
|
||||
- component: {fileID: 5185769617649039493}
|
||||
- component: {fileID: 3017688714510272995}
|
||||
- component: {fileID: 8919338462331172391}
|
||||
m_Layer: 5
|
||||
m_Name: XRI Keyboard Key
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2197442164563211728
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1253337762353444269}
|
||||
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:
|
||||
- {fileID: 5792483888663696090}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 64, y: 64}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2743443539172796335
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1253337762353444269}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &5599558209658972096
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1253337762353444269}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 84bf39f7245577d4491b0aa8ea6016ee, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 0
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 0.18039216, g: 0.18039216, b: 0.18039216, a: 1}
|
||||
m_HighlightedColor: {r: 0.1254902, g: 0.5882353, b: 0.9529412, a: 0.6313726}
|
||||
m_PressedColor: {r: 0.1254902, g: 0.5882353, b: 0.9529412, a: 1}
|
||||
m_SelectedColor: {r: 0.18039216, g: 0.18039216, b: 0.18039216, a: 1}
|
||||
m_DisabledColor: {r: 0.047058824, g: 0.047058824, b: 0.047058824, a: 1}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 5764233770622607508}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_KeyFunction: {fileID: 0}
|
||||
m_KeyCode: 0
|
||||
m_Character:
|
||||
m_DisplayCharacter:
|
||||
m_DisplayIcon: {fileID: 0}
|
||||
m_ShiftCharacter:
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 0}
|
||||
m_UpdateOnKeyDown: 1
|
||||
m_TextComponent: {fileID: 1230688967838103642}
|
||||
m_IconComponent: {fileID: 434614208518678406}
|
||||
m_HighlightComponent: {fileID: 1500099412274214952}
|
||||
m_AudioSource: {fileID: 8919338462331172391}
|
||||
--- !u!114 &5185769617649039493
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1253337762353444269}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 07b3638c2f5db5b479ff24c2859713d4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_PokeFollowTransform: {fileID: 5792483888663696090}
|
||||
m_SmoothingSpeed: 16
|
||||
m_ReturnToInitialPosition: 1
|
||||
m_ApplyIfChildIsTarget: 1
|
||||
m_ClampToMaxDistance: 1
|
||||
m_MaxDistance: 10
|
||||
--- !u!114 &3017688714510272995
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1253337762353444269}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 0}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!82 &8919338462331172391
|
||||
AudioSource:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1253337762353444269}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 4
|
||||
OutputAudioMixerGroup: {fileID: 0}
|
||||
m_audioClip: {fileID: 8300000, guid: f81fcd9edaa84754869e9e9acb3aece4, type: 3}
|
||||
m_PlayOnAwake: 0
|
||||
m_Volume: 1
|
||||
m_Pitch: 1
|
||||
Loop: 0
|
||||
Mute: 0
|
||||
Spatialize: 0
|
||||
SpatializePostEffects: 0
|
||||
Priority: 128
|
||||
DopplerLevel: 1
|
||||
MinDistance: 1
|
||||
MaxDistance: 500
|
||||
Pan2D: 0
|
||||
rolloffMode: 0
|
||||
BypassEffects: 0
|
||||
BypassListenerEffects: 0
|
||||
BypassReverbZones: 0
|
||||
rolloffCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
panLevelCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
spreadCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
reverbZoneMixCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
--- !u!1 &4620195480082662092
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7744964415469400118}
|
||||
- component: {fileID: 9011756104155648123}
|
||||
- component: {fileID: 1500099412274214952}
|
||||
m_Layer: 5
|
||||
m_Name: Highlight
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7744964415469400118
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4620195480082662092}
|
||||
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: 5792483888663696090}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 64, y: 64}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &9011756104155648123
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4620195480082662092}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1500099412274214952
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4620195480082662092}
|
||||
m_Enabled: 0
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.1254902, g: 0.5882353, b: 0.9529412, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: b5ef5a94299045b4988c14406eb10d19, type: 3}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 1
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &6587516960349639740
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4749110839071018368}
|
||||
- component: {fileID: 6235336889950583525}
|
||||
- component: {fileID: 1230688967838103642}
|
||||
m_Layer: 5
|
||||
m_Name: Text
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4749110839071018368
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6587516960349639740}
|
||||
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: 5792483888663696090}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 160, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6235336889950583525
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6587516960349639740}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1230688967838103642
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6587516960349639740}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text:
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 24
|
||||
m_fontSizeBase: 24
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!1 &6788957415840782927
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5017493697046792933}
|
||||
- component: {fileID: 5842188131676396847}
|
||||
- component: {fileID: 434614208518678406}
|
||||
m_Layer: 5
|
||||
m_Name: Icon
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5017493697046792933
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6788957415840782927}
|
||||
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: 5792483888663696090}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 32, y: 32}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5842188131676396847
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6788957415840782927}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &434614208518678406
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6788957415840782927}
|
||||
m_Enabled: 0
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &9128965994530478997
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5792483888663696090}
|
||||
- component: {fileID: 8949111014583776716}
|
||||
- component: {fileID: 5764233770622607508}
|
||||
- component: {fileID: 3718196666601218021}
|
||||
m_Layer: 5
|
||||
m_Name: Image
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5792483888663696090
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9128965994530478997}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -10}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4749110839071018368}
|
||||
- {fileID: 5017493697046792933}
|
||||
- {fileID: 7744964415469400118}
|
||||
m_Father: {fileID: 2197442164563211728}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 64, y: 64}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8949111014583776716
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9128965994530478997}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5764233770622607508
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9128965994530478997}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 30a9256eb7d98ad4188fe103a8e7143b, type: 3}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &3718196666601218021
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9128965994530478997}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_ShowMaskGraphic: 1
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8a27b1b39d17cdc4c8f3da30ea294c6f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4dfac36245beb8e4d884a833a5a0517f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1aaf2dceef22d1147bfc70d706ddd188
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 65c75791c4df60f4aa83f4a60b748ca6
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,241 @@
|
|||
using TMPro;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Utilities;
|
||||
|
||||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Manages spawning and positioning of the global keyboard.
|
||||
/// </summary>
|
||||
public class GlobalNonNativeKeyboard : MonoBehaviour
|
||||
{
|
||||
public static GlobalNonNativeKeyboard instance { get; private set; }
|
||||
|
||||
[SerializeField, Tooltip("The prefab with the XR Keyboard component to automatically instantiate.")]
|
||||
GameObject m_KeyboardPrefab;
|
||||
|
||||
/// <summary>
|
||||
/// The prefab with the XR Keyboard component to automatically instantiate.
|
||||
/// </summary>
|
||||
public GameObject keyboardPrefab
|
||||
{
|
||||
get => m_KeyboardPrefab;
|
||||
set => m_KeyboardPrefab = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("The parent Transform to instantiate the Keyboard Prefab under.")]
|
||||
Transform m_PlayerRoot;
|
||||
|
||||
/// <summary>
|
||||
/// The parent Transform to instantiate the Keyboard Prefab under.
|
||||
/// </summary>
|
||||
public Transform playerRoot
|
||||
{
|
||||
get => m_PlayerRoot;
|
||||
set => m_PlayerRoot = value;
|
||||
}
|
||||
|
||||
[HideInInspector]
|
||||
[SerializeField]
|
||||
XRKeyboard m_Keyboard;
|
||||
|
||||
/// <summary>
|
||||
/// Global keyboard instance.
|
||||
/// </summary>
|
||||
public XRKeyboard keyboard
|
||||
{
|
||||
get => m_Keyboard;
|
||||
set => m_Keyboard = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Position offset from the camera to place the keyboard.")]
|
||||
Vector3 m_KeyboardOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Position offset from the camera to place the keyboard.
|
||||
/// </summary>
|
||||
public Vector3 keyboardOffset
|
||||
{
|
||||
get => m_KeyboardOffset;
|
||||
set => m_KeyboardOffset = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Transform of the camera. If left empty, this will default to Camera.main.")]
|
||||
Transform m_CameraTransform;
|
||||
|
||||
/// <summary>
|
||||
/// Transform of the camera. If left empty, this will default to Camera.main.
|
||||
/// </summary>
|
||||
public Transform cameraTransform
|
||||
{
|
||||
get => m_CameraTransform;
|
||||
set => m_CameraTransform = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("If true, the keyboard will be repositioned to the starting position if it is out of view when Show Keyboard is called.")]
|
||||
bool m_RepositionOutOfViewKeyboardOnOpen = true;
|
||||
|
||||
/// <summary>
|
||||
/// If true, the keyboard will be repositioned to the starting position if it is out of view when Show Keyboard is called.
|
||||
/// </summary>
|
||||
public bool repositionOutOfViewKeyboardOnOpen
|
||||
{
|
||||
get => m_RepositionOutOfViewKeyboardOnOpen;
|
||||
set => m_RepositionOutOfViewKeyboardOnOpen = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Threshold for the dot product when determining if the keyboard is out of view and should be repositioned. The lower the threshold, the wider the field of view."), Range(0f, 1f)]
|
||||
float m_FacingKeyboardThreshold = 0.15f;
|
||||
|
||||
/// <summary>
|
||||
/// Threshold for the dot product when determining if the keyboard is out of view and should be repositioned. The lower the threshold, the wider the field of view.
|
||||
/// </summary>
|
||||
public float facingKeyboardThreshold
|
||||
{
|
||||
get => m_FacingKeyboardThreshold;
|
||||
set => m_FacingKeyboardThreshold = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
void Awake()
|
||||
{
|
||||
if (instance != null && instance != this)
|
||||
{
|
||||
Destroy(this);
|
||||
return;
|
||||
}
|
||||
|
||||
instance = this;
|
||||
|
||||
if (m_CameraTransform == null)
|
||||
{
|
||||
var mainCamera = Camera.main;
|
||||
if (mainCamera != null)
|
||||
m_CameraTransform = mainCamera.transform;
|
||||
else
|
||||
Debug.LogWarning("Could not find main camera to assign the missing Camera Transform property.", this);
|
||||
}
|
||||
|
||||
if (m_KeyboardPrefab != null)
|
||||
{
|
||||
keyboard = Instantiate(m_KeyboardPrefab, m_PlayerRoot).GetComponent<XRKeyboard>();
|
||||
keyboard.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Opens the global keyboard with a <see cref="TMP_InputField"/> to monitor.
|
||||
/// </summary>
|
||||
/// <remarks>This will update the keyboard with <see cref="TMP_InputField.text"/> as the existing string for the keyboard.</remarks>
|
||||
/// <param name="inputField">The input field for the global keyboard to monitor</param>
|
||||
/// <param name="observeCharacterLimit">If true, the global keyboard will respect the character limit of the
|
||||
/// <see cref="inputField"/>. This is false by default.</param>
|
||||
public virtual void ShowKeyboard(TMP_InputField inputField, bool observeCharacterLimit = false)
|
||||
{
|
||||
if (keyboard == null)
|
||||
return;
|
||||
|
||||
// Check if keyboard is already open or should be repositioned
|
||||
var shouldPositionKeyboard = !keyboard.isOpen || (m_RepositionOutOfViewKeyboardOnOpen && IsKeyboardOutOfView());
|
||||
|
||||
// Open keyboard
|
||||
keyboard.Open(inputField, observeCharacterLimit);
|
||||
|
||||
// Position keyboard in front of user if the keyboard is closed
|
||||
if (shouldPositionKeyboard)
|
||||
PositionKeyboard(m_CameraTransform);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Opens the global keyboard with the option to populate it with existing text.
|
||||
/// </summary>
|
||||
/// <remarks>This will update the keyboard with <see cref="text"/> as the existing string for the keyboard.</remarks>
|
||||
/// <param name="text">The existing text string to populate the keyboard with on open.</param>
|
||||
public virtual void ShowKeyboard(string text)
|
||||
{
|
||||
if (keyboard == null)
|
||||
return;
|
||||
|
||||
// Check if keyboard is already open or should be repositioned
|
||||
var shouldPositionKeyboard = !keyboard.isOpen || (m_RepositionOutOfViewKeyboardOnOpen && IsKeyboardOutOfView());
|
||||
|
||||
// Open keyboard
|
||||
keyboard.Open(text);
|
||||
|
||||
// Position keyboard in front of user if the keyboard is closed
|
||||
if (shouldPositionKeyboard)
|
||||
PositionKeyboard(m_CameraTransform);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Opens the global keyboard with the option to clear any existing keyboard text.
|
||||
/// </summary>
|
||||
/// <param name="clearKeyboardText">If true, the keyboard will open with no string populated in the keyboard. If false,
|
||||
/// the existing text will be maintained. This is false by default.</param>
|
||||
public void ShowKeyboard(bool clearKeyboardText = false)
|
||||
{
|
||||
if (keyboard == null)
|
||||
return;
|
||||
|
||||
ShowKeyboard(clearKeyboardText ? string.Empty : keyboard.text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Closes the global keyboard.
|
||||
/// </summary>
|
||||
public virtual void HideKeyboard()
|
||||
{
|
||||
if (keyboard == null)
|
||||
return;
|
||||
|
||||
keyboard.Close();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reposition <see cref="keyboard"/> to starting position if it is out of view. Keyboard will only reposition if is active and enabled.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Field if view is defined by the <see cref="facingKeyboardThreshold"/>, and the starting position
|
||||
/// is defined by the <see cref="keyboardOffset"/> in relation to the camera.
|
||||
/// </remarks>
|
||||
public void RepositionKeyboardIfOutOfView()
|
||||
{
|
||||
if (IsKeyboardOutOfView())
|
||||
{
|
||||
if (keyboard.isOpen)
|
||||
PositionKeyboard(m_CameraTransform);
|
||||
}
|
||||
}
|
||||
|
||||
void PositionKeyboard(Transform target)
|
||||
{
|
||||
var position = target.position +
|
||||
target.right * m_KeyboardOffset.x +
|
||||
target.forward * m_KeyboardOffset.z +
|
||||
Vector3.up * m_KeyboardOffset.y;
|
||||
keyboard.transform.position = position;
|
||||
FaceKeyboardAtTarget(m_CameraTransform);
|
||||
}
|
||||
|
||||
void FaceKeyboardAtTarget(Transform target)
|
||||
{
|
||||
var forward = (keyboard.transform.position - target.position).normalized;
|
||||
BurstMathUtility.OrthogonalLookRotation(forward, Vector3.up, out var newTarget);
|
||||
keyboard.transform.rotation = newTarget;
|
||||
}
|
||||
|
||||
bool IsKeyboardOutOfView()
|
||||
{
|
||||
if (m_CameraTransform == null || keyboard == null)
|
||||
{
|
||||
Debug.LogWarning("Camera or keyboard reference is null. Unable to determine if keyboard is out of view.", this);
|
||||
return false;
|
||||
}
|
||||
|
||||
var dotProduct = Vector3.Dot(m_CameraTransform.forward, (keyboard.transform.position - m_CameraTransform.position).normalized);
|
||||
return dotProduct < m_FacingKeyboardThreshold;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 015b50343a7cf174ebb7703245f6ba72
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,70 @@
|
|||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Abstract class defining callbacks for key functionality. Allows users to extend
|
||||
/// custom functionality of keys and keyboard.
|
||||
/// </summary>
|
||||
public abstract class KeyFunction : ScriptableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Pre-process function when a key is pressed.
|
||||
/// </summary>
|
||||
/// <param name="keyboardContext">The current keyboard associated with <see cref="key"/>.</param>
|
||||
/// <param name="key">The key that is being pressed.</param>
|
||||
public virtual void PreprocessKey(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
if (keyboardContext != null)
|
||||
keyboardContext.PreprocessKeyPress(key);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Primary function callback when a key is pressed. Use this function to interface directly with a keyboard
|
||||
/// and process logic based on the current keyboard and key context.
|
||||
/// </summary>
|
||||
/// <param name="keyboardContext">The current keyboard associated with <see cref="key"/>.</param>
|
||||
/// <param name="key">The key that is being pressed.</param>
|
||||
public abstract void ProcessKey(XRKeyboard keyboardContext, XRKeyboardKey key);
|
||||
|
||||
/// <summary>
|
||||
/// Post-process function when a key is pressed. This function calls <see cref="XRKeyboard.PostprocessKeyPress"/> on the keyboard.
|
||||
/// </summary>
|
||||
/// <param name="keyboardContext">The current keyboard associated with <see cref="key"/>.</param>
|
||||
/// <param name="key">The key that is being pressed.</param>
|
||||
public virtual void PostprocessKey(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
if (keyboardContext != null)
|
||||
keyboardContext.PostprocessKeyPress(key);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Uses keyboard and key context to determine if this key function should override the key's display icon.
|
||||
/// </summary>
|
||||
/// <param name="keyboardContext">Current keyboard context.</param>
|
||||
/// <param name="key">Current keyboard key.</param>
|
||||
/// <returns>Returns true if this key function should override the display icon.</returns>
|
||||
public virtual bool OverrideDisplayIcon(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns display icon for this key function based on the context of the key and keyboard.
|
||||
/// </summary>
|
||||
/// <param name="keyboardContext">Current keyboard context.</param>
|
||||
/// <param name="key">Current keyboard key.</param>
|
||||
/// <returns>Returns display icon for this key.</returns>
|
||||
public virtual Sprite GetDisplayIcon(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allows this key function to process when a key is refreshing its display.
|
||||
/// </summary>
|
||||
/// <param name="keyboardContext">The current keyboard associated with <see cref="key"/>.</param>
|
||||
/// <param name="key">The key that is refreshing the display.</param>
|
||||
public virtual void ProcessRefreshDisplay(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 18e905492db2a3e4e9fd486d79848865
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 89613eddc1ae20046a22fe8d45de2d0d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,16 @@
|
|||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard.KeyFunctions
|
||||
{
|
||||
/// <summary>
|
||||
/// Key function used to hide the keyboard.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "Hide Function", menuName = "XR/Spatial Keyboard/Hide Key Function", order = 1)]
|
||||
public class HideFunction : KeyFunction
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override void ProcessKey(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
if (keyboardContext != null)
|
||||
keyboardContext.Close(false);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 58528143acafcd44e93258c8e6a59dc5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,16 @@
|
|||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard.KeyFunctions
|
||||
{
|
||||
/// <summary>
|
||||
/// Key function used to send a key code for the keyboard to process.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "Key Code Function", menuName = "XR/Spatial Keyboard/Key Code Key Function", order = 1)]
|
||||
public class KeyCodeFunction : KeyFunction
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override void ProcessKey(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
if (keyboardContext != null)
|
||||
keyboardContext.ProcessKeyCode(key.keyCode);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 92861f72e977a244cb0be6d8410a8d99
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,16 @@
|
|||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard.KeyFunctions
|
||||
{
|
||||
/// <summary>
|
||||
/// Key function used to update the keyboard layout.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "Layout Function", menuName = "XR/Spatial Keyboard/Layout Key Function", order = 1)]
|
||||
public class LayoutFunction : KeyFunction
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override void ProcessKey(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
if (keyboardContext != null)
|
||||
keyboardContext.UpdateLayout(key.GetEffectiveCharacter());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0f25471b9f361d64ba3aebe064d73092
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,71 @@
|
|||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard.KeyFunctions
|
||||
{
|
||||
/// <summary>
|
||||
/// Key function used to process shift and caps lock functionality.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "Shift Function", menuName = "XR/Spatial Keyboard/Shift Key Function", order = 1)]
|
||||
public class ShiftFunction : KeyFunction
|
||||
{
|
||||
[SerializeField]
|
||||
Sprite m_CapsLockDisplayIcon;
|
||||
|
||||
public Sprite capsLockDisplayIcon
|
||||
{
|
||||
get => m_CapsLockDisplayIcon;
|
||||
set => m_CapsLockDisplayIcon = value;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Sprite GetDisplayIcon(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
// This method won't be called unless OverrideDisplayIcon below returns true,
|
||||
// so no need for logic to return a shift display icon, which is already set up
|
||||
// as the default in the UI.
|
||||
return m_CapsLockDisplayIcon;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool OverrideDisplayIcon(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
return keyboardContext != null && keyboardContext.capsLocked;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void ProcessKey(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
if (keyboardContext == null)
|
||||
return;
|
||||
|
||||
var keyCode = KeyCode.LeftShift;
|
||||
|
||||
// Check the caps lock state of the keyboard. If they key is shifted, check if there is a double click.
|
||||
if (keyboardContext.capsLocked ||(keyboardContext.shifted && key.timeSinceLastClick < keyboardContext.doubleClickInterval))
|
||||
keyCode = KeyCode.CapsLock;
|
||||
|
||||
keyboardContext.ProcessKeyCode(keyCode);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void PostprocessKey(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
base.PostprocessKey(keyboardContext, key);
|
||||
RefreshKeyHighlight(keyboardContext, key);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void ProcessRefreshDisplay(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
base.ProcessRefreshDisplay(keyboardContext, key);
|
||||
RefreshKeyHighlight(keyboardContext, key);
|
||||
}
|
||||
|
||||
protected void RefreshKeyHighlight(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
if (keyboardContext == null)
|
||||
return;
|
||||
|
||||
var highlight = keyboardContext.capsLocked || keyboardContext.shifted;
|
||||
key.EnableHighlight(highlight);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cad704687d7908f42b71e1e4516c590a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,16 @@
|
|||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard.KeyFunctions
|
||||
{
|
||||
/// <summary>
|
||||
/// Key function used to update the keyboard text with a string value.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "Value Key Function", menuName = "XR/Spatial Keyboard/Value Key Function", order = 1)]
|
||||
public class ValueKeyFunction : KeyFunction
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override void ProcessKey(XRKeyboard keyboardContext, XRKeyboardKey key)
|
||||
{
|
||||
if (keyboardContext != null)
|
||||
keyboardContext.UpdateText(key.GetEffectiveCharacter());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4857d519405a3874cb91aea6424e314d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,796 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine.Pool;
|
||||
|
||||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Virtual spatial keyboard.
|
||||
/// </summary>
|
||||
public class XRKeyboard : MonoBehaviour
|
||||
{
|
||||
/// <summary>
|
||||
/// Layout this keyboard is able to switch to with the corresponding layout command.
|
||||
/// </summary>
|
||||
/// <seealso cref="subsetLayout"/>
|
||||
[Serializable]
|
||||
public struct SubsetMapping
|
||||
{
|
||||
[SerializeField, Tooltip("This drives what GameObject layout is displayed.")]
|
||||
string m_LayoutString;
|
||||
|
||||
/// <summary>
|
||||
/// This drives what GameObject layout is displayed.
|
||||
/// </summary>
|
||||
public string layoutString
|
||||
{
|
||||
get => m_LayoutString;
|
||||
set => m_LayoutString = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("GameObject root of the layout which contains the set of keys.")]
|
||||
XRKeyboardLayout m_LayoutRoot;
|
||||
|
||||
/// <summary>
|
||||
/// GameObject root of the layout which contains the set of keys.
|
||||
/// </summary>
|
||||
public XRKeyboardLayout layoutRoot
|
||||
{
|
||||
get => m_LayoutRoot;
|
||||
set => m_LayoutRoot = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Config asset which contains the key definitions for the layout when this is turned on.")]
|
||||
XRKeyboardConfig m_ToggleOnConfig;
|
||||
|
||||
/// <summary>
|
||||
/// Config asset which contains the key definitions for the layout when this is turned on.
|
||||
/// </summary>
|
||||
public XRKeyboardConfig toggleOnConfig
|
||||
{
|
||||
get => m_ToggleOnConfig;
|
||||
set => m_ToggleOnConfig = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Config asset which is the default config when this is turned off.")]
|
||||
XRKeyboardConfig m_ToggleOffConfig;
|
||||
|
||||
/// <summary>
|
||||
/// Config asset which is the default config when this is turned off.
|
||||
/// </summary>
|
||||
public XRKeyboardConfig toggleOffConfig
|
||||
{
|
||||
get => m_ToggleOffConfig;
|
||||
set => m_ToggleOffConfig = value;
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField, HideInInspector]
|
||||
string m_Text = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// String of text currently in the keyboard. Setter invokes <see cref="onTextUpdated"/> when updated.
|
||||
/// </summary>
|
||||
public string text
|
||||
{
|
||||
get => m_Text;
|
||||
protected set
|
||||
{
|
||||
if (m_Text != value)
|
||||
{
|
||||
m_Text = value;
|
||||
caretPosition = Math.Clamp(caretPosition, 0, m_Text.Length);
|
||||
using (m_KeyboardTextEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
args.keyboardText = text;
|
||||
onTextUpdated?.Invoke(args);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField, HideInInspector]
|
||||
TMP_InputField m_CurrentInputField;
|
||||
|
||||
/// <summary>
|
||||
/// Current input field this keyboard is observing.
|
||||
/// </summary>
|
||||
protected TMP_InputField currentInputField
|
||||
{
|
||||
get => m_CurrentInputField;
|
||||
set
|
||||
{
|
||||
if (m_CurrentInputField == value)
|
||||
return;
|
||||
|
||||
StopObservingInputField(m_CurrentInputField);
|
||||
m_CurrentInputField = value;
|
||||
StartObservingInputField(m_CurrentInputField);
|
||||
|
||||
using (m_KeyboardTextEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
args.keyboardText = text;
|
||||
onFocusChanged?.Invoke(args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyboardTextEvent m_OnTextSubmitted = new KeyboardTextEvent();
|
||||
|
||||
/// <summary>
|
||||
/// Event invoked when keyboard submits text.
|
||||
/// </summary>
|
||||
public KeyboardTextEvent onTextSubmitted
|
||||
{
|
||||
get => m_OnTextSubmitted;
|
||||
set => m_OnTextSubmitted = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyboardTextEvent m_OnTextUpdated = new KeyboardTextEvent();
|
||||
|
||||
/// <summary>
|
||||
/// Event invoked when keyboard text is updated.
|
||||
/// </summary>
|
||||
public KeyboardTextEvent onTextUpdated
|
||||
{
|
||||
get => m_OnTextUpdated;
|
||||
set => m_OnTextUpdated = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyboardKeyEvent m_OnKeyPressed = new KeyboardKeyEvent();
|
||||
|
||||
/// <summary>
|
||||
/// Event invoked after a key is pressed.
|
||||
/// </summary>
|
||||
public KeyboardKeyEvent onKeyPressed
|
||||
{
|
||||
get => m_OnKeyPressed;
|
||||
set => m_OnKeyPressed = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyboardModifiersEvent m_OnShifted = new KeyboardModifiersEvent();
|
||||
|
||||
/// <summary>
|
||||
/// Event invoked after keyboard shift is changed. These event args also contain the value for the caps lock state.
|
||||
/// </summary>
|
||||
public KeyboardModifiersEvent onShifted
|
||||
{
|
||||
get => m_OnShifted;
|
||||
set => m_OnShifted = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyboardLayoutEvent m_OnLayoutChanged = new KeyboardLayoutEvent();
|
||||
|
||||
/// <summary>
|
||||
/// Event invoked when keyboard layout is changed.
|
||||
/// </summary>
|
||||
public KeyboardLayoutEvent onLayoutChanged
|
||||
{
|
||||
get => m_OnLayoutChanged;
|
||||
set => m_OnLayoutChanged = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyboardTextEvent m_OnOpened = new KeyboardTextEvent();
|
||||
|
||||
/// <summary>
|
||||
/// Event invoked when the keyboard is opened.
|
||||
/// </summary>
|
||||
public KeyboardTextEvent onOpened
|
||||
{
|
||||
get => m_OnOpened;
|
||||
set => m_OnOpened = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyboardTextEvent m_OnClosed;
|
||||
|
||||
/// <summary>
|
||||
/// Event invoked after the keyboard is closed.
|
||||
/// </summary>
|
||||
public KeyboardTextEvent onClosed
|
||||
{
|
||||
get => m_OnClosed;
|
||||
set => m_OnClosed = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyboardTextEvent m_OnFocusChanged = new KeyboardTextEvent();
|
||||
|
||||
/// <summary>
|
||||
/// Event invoked when the keyboard changes or gains input field focus.
|
||||
/// </summary>
|
||||
public KeyboardTextEvent onFocusChanged
|
||||
{
|
||||
get => m_OnFocusChanged;
|
||||
set => m_OnFocusChanged = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyboardEvent m_OnCharacterLimitReached = new KeyboardEvent();
|
||||
|
||||
/// <summary>
|
||||
/// Event invoked when the keyboard tries to update text, but the character of the input field is reached.
|
||||
/// </summary>
|
||||
public KeyboardEvent onCharacterLimitReached
|
||||
{
|
||||
get => m_OnCharacterLimitReached;
|
||||
set => m_OnCharacterLimitReached = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
bool m_SubmitOnEnter = true;
|
||||
|
||||
/// <summary>
|
||||
/// If true, <see cref="onTextSubmitted"/> will be invoked when the keyboard receives a return or enter command. Otherwise,
|
||||
/// it will treat return or enter as a newline.
|
||||
/// </summary>
|
||||
public bool submitOnEnter
|
||||
{
|
||||
get => m_SubmitOnEnter;
|
||||
set => m_SubmitOnEnter = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
bool m_CloseOnSubmit;
|
||||
|
||||
/// <summary>
|
||||
/// If true, keyboard will close on enter or return command.
|
||||
/// </summary>
|
||||
public bool closeOnSubmit
|
||||
{
|
||||
get => m_CloseOnSubmit;
|
||||
set => m_CloseOnSubmit = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
float m_DoubleClickInterval = 2f;
|
||||
|
||||
/// <summary>
|
||||
/// Interval in which a key pressed twice would be considered a double click.
|
||||
/// </summary>
|
||||
public float doubleClickInterval
|
||||
{
|
||||
get => m_DoubleClickInterval;
|
||||
set => m_DoubleClickInterval = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
List<SubsetMapping> m_SubsetLayout;
|
||||
|
||||
/// <summary>
|
||||
/// List of layouts this keyboard is able to switch between given the corresponding layout command.
|
||||
/// </summary>
|
||||
/// <remarks>This supports multiple layout roots updating with the same <see cref="SubsetMapping.layoutString"/>.</remarks>
|
||||
public List<SubsetMapping> subsetLayout
|
||||
{
|
||||
get => m_SubsetLayout;
|
||||
set => m_SubsetLayout = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List of keys associated with this keyboard.
|
||||
/// </summary>
|
||||
public List<XRKeyboardKey> keys { get; set; }
|
||||
|
||||
int m_CaretPosition;
|
||||
|
||||
/// <summary>
|
||||
/// Caret index of this keyboard.
|
||||
/// </summary>
|
||||
public int caretPosition
|
||||
{
|
||||
get => m_CaretPosition;
|
||||
protected set => m_CaretPosition = value;
|
||||
}
|
||||
|
||||
bool m_Shifted;
|
||||
|
||||
/// <summary>
|
||||
/// (Read Only) Gets the shift state of the keyboard.
|
||||
/// </summary>
|
||||
public bool shifted => m_Shifted;
|
||||
|
||||
bool m_CapsLocked;
|
||||
|
||||
/// <summary>
|
||||
/// (Read Only) Gets the caps lock state of the keyboard.
|
||||
/// </summary>
|
||||
public bool capsLocked => m_CapsLocked;
|
||||
|
||||
bool m_IsOpen;
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the keyboard has been opened with the open function and the keyboard is active and enabled, otherwise returns false.
|
||||
/// </summary>
|
||||
public bool isOpen => (m_IsOpen && isActiveAndEnabled);
|
||||
|
||||
Dictionary<string, List<SubsetMapping>> m_SubsetLayoutMap;
|
||||
HashSet<XRKeyboardLayout> m_KeyboardLayouts;
|
||||
|
||||
// Reusable event args
|
||||
readonly LinkedPool<KeyboardTextEventArgs> m_KeyboardTextEventArgs = new LinkedPool<KeyboardTextEventArgs>(() => new KeyboardTextEventArgs(), collectionCheck: false);
|
||||
readonly LinkedPool<KeyboardLayoutEventArgs> m_KeyboardLayoutEventArgs = new LinkedPool<KeyboardLayoutEventArgs>(() => new KeyboardLayoutEventArgs(), collectionCheck: false);
|
||||
readonly LinkedPool<KeyboardModifiersEventArgs> m_KeyboardModifiersEventArgs = new LinkedPool<KeyboardModifiersEventArgs>(() => new KeyboardModifiersEventArgs(), collectionCheck: false);
|
||||
readonly LinkedPool<KeyboardKeyEventArgs> m_KeyboardKeyEventArgs = new LinkedPool<KeyboardKeyEventArgs>(() => new KeyboardKeyEventArgs(), collectionCheck: false);
|
||||
readonly LinkedPool<KeyboardBaseEventArgs> m_KeyboardBaseEventArgs = new LinkedPool<KeyboardBaseEventArgs>(() => new KeyboardBaseEventArgs(), collectionCheck: false);
|
||||
|
||||
int m_CharacterLimit = -1;
|
||||
bool m_MonitorCharacterLimit;
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
void Awake()
|
||||
{
|
||||
m_SubsetLayoutMap = new Dictionary<string, List<SubsetMapping>>();
|
||||
m_KeyboardLayouts = new HashSet<XRKeyboardLayout>();
|
||||
|
||||
foreach (var subsetMapping in m_SubsetLayout)
|
||||
{
|
||||
if (m_SubsetLayoutMap.TryGetValue(subsetMapping.layoutString, out var subsetMappings))
|
||||
subsetMappings.Add(subsetMapping);
|
||||
else
|
||||
m_SubsetLayoutMap[subsetMapping.layoutString] = new List<SubsetMapping> { subsetMapping };
|
||||
|
||||
m_KeyboardLayouts.Add(subsetMapping.layoutRoot);
|
||||
}
|
||||
|
||||
keys = new List<XRKeyboardKey>();
|
||||
GetComponentsInChildren(true, keys);
|
||||
keys.ForEach(key => key.keyboard = this);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
void OnDisable()
|
||||
{
|
||||
// Reset if this component is turned off without first calling close function
|
||||
m_IsOpen = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processes a <see cref="KeyCode"/>.
|
||||
/// </summary>
|
||||
/// <param name="keyCode">Key code to process.</param>
|
||||
/// <returns>True on supported KeyCode.</returns>
|
||||
/// <remarks>
|
||||
/// Override this method to add support for additional <see cref="KeyCode"/>.
|
||||
/// </remarks>
|
||||
public virtual bool ProcessKeyCode(KeyCode keyCode)
|
||||
{
|
||||
var success = true;
|
||||
switch (keyCode)
|
||||
{
|
||||
case KeyCode.LeftShift:
|
||||
case KeyCode.RightShift:
|
||||
Shift(!m_Shifted);
|
||||
break;
|
||||
case KeyCode.CapsLock:
|
||||
CapsLock(!m_CapsLocked);
|
||||
break;
|
||||
case KeyCode.Backspace:
|
||||
Backspace();
|
||||
break;
|
||||
case KeyCode.Delete:
|
||||
Delete();
|
||||
break;
|
||||
case KeyCode.Clear:
|
||||
Clear();
|
||||
break;
|
||||
case KeyCode.Space:
|
||||
UpdateText(" ");
|
||||
break;
|
||||
case KeyCode.Return:
|
||||
case KeyCode.KeypadEnter:
|
||||
if (submitOnEnter)
|
||||
{
|
||||
Submit();
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateText("\n");
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to process the key based on the key's character. Used as a fallback when KeyFunction is
|
||||
/// empty on the key.
|
||||
/// </summary>
|
||||
/// <param name="key">Key to attempt to process</param>
|
||||
public virtual void TryProcessKeyPress(XRKeyboardKey key)
|
||||
{
|
||||
if (key == null || !ReferenceEquals(key.keyboard, this))
|
||||
return;
|
||||
|
||||
// Process key stroke
|
||||
if (onKeyPressed != null)
|
||||
{
|
||||
// Try to process key code
|
||||
if (ProcessKeyCode(key.keyCode))
|
||||
return;
|
||||
|
||||
var keyPress = key.GetEffectiveCharacter();
|
||||
|
||||
// Monitor for subset change
|
||||
if (UpdateLayout(keyPress))
|
||||
return;
|
||||
|
||||
switch (keyPress)
|
||||
{
|
||||
case "\\s":
|
||||
// Shift
|
||||
Shift(!m_Shifted);
|
||||
break;
|
||||
case "\\caps":
|
||||
CapsLock(!m_CapsLocked);
|
||||
break;
|
||||
case "\\b":
|
||||
// Backspace
|
||||
Backspace();
|
||||
break;
|
||||
case "\\c":
|
||||
// cancel
|
||||
break;
|
||||
case "\\r" when submitOnEnter:
|
||||
{
|
||||
Submit();
|
||||
break;
|
||||
}
|
||||
case "\\cl":
|
||||
// Clear
|
||||
Clear();
|
||||
break;
|
||||
case "\\h":
|
||||
// Hide
|
||||
Close();
|
||||
break;
|
||||
default:
|
||||
{
|
||||
UpdateText(keyPress);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pre-process function when a key is pressed.
|
||||
/// </summary>
|
||||
/// <param name="key">Key that is about to process.</param>
|
||||
public virtual void PreprocessKeyPress(XRKeyboardKey key)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Post-process function when a key is pressed.
|
||||
/// </summary>
|
||||
/// <param name="key">Key that has just been processed.</param>
|
||||
public virtual void PostprocessKeyPress(XRKeyboardKey key)
|
||||
{
|
||||
using (m_KeyboardKeyEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
args.key = key;
|
||||
onKeyPressed.Invoke(args);
|
||||
}
|
||||
}
|
||||
|
||||
#region Process Key Functions
|
||||
|
||||
/// <summary>
|
||||
/// Updates the keyboard text by inserting the <see cref="newText"/> string into the existing <see cref="text"/>.
|
||||
/// </summary>
|
||||
/// <param name="newText">The new text to insert into the current keyboard text.</param>
|
||||
/// <remarks>If the keyboard is set to monitor the input field's character limit, the keyboard will ensure
|
||||
/// the text does not exceed the <see cref="TMP_InputField.characterLimit"/>.</remarks>
|
||||
public virtual void UpdateText(string newText)
|
||||
{
|
||||
// Attempt to add key press to current text
|
||||
var updatedText = text;
|
||||
|
||||
updatedText = updatedText.Insert(caretPosition, newText);
|
||||
|
||||
var isUpdatedTextWithinLimits = !m_MonitorCharacterLimit || updatedText.Length <= m_CharacterLimit;
|
||||
if (isUpdatedTextWithinLimits)
|
||||
{
|
||||
caretPosition += newText.Length;
|
||||
text = updatedText;
|
||||
}
|
||||
else
|
||||
{
|
||||
using (m_KeyboardBaseEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
onCharacterLimitReached?.Invoke(args);
|
||||
}
|
||||
}
|
||||
|
||||
// Turn off shift after typing a letter
|
||||
if (m_Shifted && !m_CapsLocked)
|
||||
Shift(!m_Shifted);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Process shift command for keyboard.
|
||||
/// </summary>
|
||||
public virtual void Shift(bool shiftValue)
|
||||
{
|
||||
m_Shifted = shiftValue;
|
||||
using (m_KeyboardModifiersEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
args.shiftValue = m_Shifted;
|
||||
args.capsLockValue = m_CapsLocked;
|
||||
onShifted.Invoke(args);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Process caps lock command for keyboard.
|
||||
/// </summary>
|
||||
public virtual void CapsLock(bool capsLockValue)
|
||||
{
|
||||
m_CapsLocked = capsLockValue;
|
||||
Shift(capsLockValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Process backspace command for keyboard.
|
||||
/// </summary>
|
||||
public virtual void Backspace()
|
||||
{
|
||||
if (caretPosition > 0)
|
||||
{
|
||||
--caretPosition;
|
||||
text = text.Remove(caretPosition, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Process delete command for keyboard and deletes one character.
|
||||
/// </summary>
|
||||
public virtual void Delete()
|
||||
{
|
||||
if (caretPosition < text.Length)
|
||||
{
|
||||
text = text.Remove(caretPosition, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invokes <see cref="onTextSubmitted"/> event and closes keyboard if <see cref="closeOnSubmit"/> is true.
|
||||
/// </summary>
|
||||
public virtual void Submit()
|
||||
{
|
||||
using (m_KeyboardTextEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
args.keyboardText = text;
|
||||
onTextSubmitted?.Invoke(args);
|
||||
}
|
||||
|
||||
if (closeOnSubmit)
|
||||
Close(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears text to an empty string.
|
||||
/// </summary>
|
||||
public virtual void Clear()
|
||||
{
|
||||
text = string.Empty;
|
||||
caretPosition = text.Length;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up the <see cref="SubsetMapping"/> associated with the <see cref="layoutKey"/> and updates the
|
||||
/// <see cref="XRKeyboardLayout"/> on the <see cref="SubsetMapping.layoutRoot"/>. If the
|
||||
/// <see cref="XRKeyboardLayout.activeKeyMapping"/> is already <see cref="SubsetMapping.toggleOnConfig"/>,
|
||||
/// <see cref="SubsetMapping.toggleOffConfig"/> will be set as the active key mapping.
|
||||
/// </summary>
|
||||
/// <param name="layoutKey">The string of the new layout as it is registered in the <see cref="subsetLayout"/>.</param>
|
||||
/// <returns>Returns true if the layout was successfully found and changed.</returns>
|
||||
/// <remarks>By default, shift or caps lock will be turned off on layout change.</remarks>
|
||||
public virtual bool UpdateLayout(string layoutKey)
|
||||
{
|
||||
if (m_SubsetLayoutMap.TryGetValue(layoutKey, out var subsetMappings))
|
||||
{
|
||||
foreach (var subsetMapping in subsetMappings)
|
||||
{
|
||||
var layout = subsetMapping.layoutRoot;
|
||||
layout.activeKeyMapping = layout.activeKeyMapping != subsetMapping.toggleOnConfig ? subsetMapping.toggleOnConfig : subsetMapping.toggleOffConfig;
|
||||
}
|
||||
|
||||
if (m_Shifted || m_CapsLocked)
|
||||
CapsLock(false);
|
||||
|
||||
using (m_KeyboardLayoutEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
args.layout = layoutKey;
|
||||
onLayoutChanged.Invoke(args);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Open Functions
|
||||
|
||||
/// <summary>
|
||||
/// Opens the keyboard with a <see cref="TMP_InputField"/> parameter as the active input field.
|
||||
/// </summary>
|
||||
/// <param name="inputField">The input field opening this keyboard.</param>
|
||||
/// <param name="observeCharacterLimit">If true, keyboard will observe the character limit from the <see cref="inputField"/>.</param>
|
||||
public virtual void Open(TMP_InputField inputField, bool observeCharacterLimit = false)
|
||||
{
|
||||
currentInputField = inputField;
|
||||
m_MonitorCharacterLimit = observeCharacterLimit;
|
||||
m_CharacterLimit = observeCharacterLimit ? currentInputField.characterLimit : -1;
|
||||
|
||||
Open(currentInputField.text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Opens the keyboard with any existing text.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Shortcut for <c>Open(text)</c>.
|
||||
/// </remarks>
|
||||
public void Open() => Open(text);
|
||||
|
||||
/// <summary>
|
||||
/// Opens the keyboard with an empty string and clear any existing text in the input field or keyboard.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Shortcut for <c>Open(string.Empty)</c>.
|
||||
/// </remarks>
|
||||
public void OpenCleared() => Open(string.Empty);
|
||||
|
||||
/// <summary>
|
||||
/// Opens the keyboard with a given string to populate the keyboard text.
|
||||
/// </summary>
|
||||
/// <param name="newText">Text string to set the keyboard <see cref="text"/> to.</param>
|
||||
/// <remarks>The <see cref="onOpened"/> event is fired before the text is updating with <see cref="newText"/>
|
||||
/// to give any observers that would be listening the opportunity to close and stop observing before the text is updated.
|
||||
/// This is a common use case for any <see cref="XRKeyboardDisplay"/> utilizing the global keyboard. </remarks>
|
||||
public virtual void Open(string newText)
|
||||
{
|
||||
if (!isActiveAndEnabled)
|
||||
{
|
||||
// Fire event before updating text because any displays observing keyboards will be listening to that text change
|
||||
// This gives them the opportunity to close and stop observing before the text is updated.
|
||||
using (m_KeyboardTextEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
args.keyboardText = text;
|
||||
onOpened?.Invoke(args);
|
||||
}
|
||||
}
|
||||
|
||||
caretPosition = newText.Length;
|
||||
text = newText;
|
||||
gameObject.SetActive(true);
|
||||
m_IsOpen = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Close Functions
|
||||
|
||||
/// <summary>
|
||||
/// Process close command for keyboard.
|
||||
/// </summary>
|
||||
/// <remarks>Stops observing active input field, resets variables, and hides this GameObject.</remarks>
|
||||
public virtual void Close()
|
||||
{
|
||||
// Clear any input field the keyboard is observing
|
||||
currentInputField = null;
|
||||
|
||||
m_MonitorCharacterLimit = false;
|
||||
m_CharacterLimit = -1;
|
||||
|
||||
if (m_Shifted || m_CapsLocked)
|
||||
CapsLock(false);
|
||||
|
||||
using (m_KeyboardTextEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
args.keyboardText = text;
|
||||
onClosed?.Invoke(args);
|
||||
}
|
||||
|
||||
gameObject.SetActive(false);
|
||||
m_IsOpen = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Process close command for keyboard. Optional overload for clearing text and resetting layout on close.
|
||||
/// </summary>
|
||||
/// <param name="clearText">If true, text will be cleared upon keyboard closing. This will happen after the
|
||||
/// <see cref="onClosed"/> event is fired so the observers have time to stop listening.</param>
|
||||
/// <param name="resetLayout">If true, each <see cref="XRKeyboardLayout"/> will reset to the <see cref="XRKeyboardLayout.defaultKeyMapping"/>.</param>
|
||||
/// <remarks>Please note, if <see cref="clearText"/> is true, the text will be cleared and the <see cref="onTextUpdated"/>
|
||||
/// event will be fired. This means any observers will be notified of an empty string. To avoid unwanted behavior of
|
||||
/// the text clearing, use the <see cref="onClosed"/> event to unsubscribe to the keyboard events before the text is cleared.</remarks>
|
||||
public virtual void Close(bool clearText, bool resetLayout = true)
|
||||
{
|
||||
Close();
|
||||
|
||||
if (clearText)
|
||||
text = string.Empty;
|
||||
|
||||
// Reset keyboard layout on close
|
||||
if (resetLayout)
|
||||
{
|
||||
// Loop through each layout root and reset to default layouts
|
||||
foreach (var layoutRoot in m_KeyboardLayouts)
|
||||
{
|
||||
layoutRoot.SetDefaultLayout();
|
||||
}
|
||||
|
||||
// Fire event of layout change to ensure highlighted buttons are reset
|
||||
using (m_KeyboardLayoutEventArgs.Get(out var args))
|
||||
{
|
||||
args.keyboard = this;
|
||||
args.layout = "default";
|
||||
onLayoutChanged.Invoke(args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Input Field Handling
|
||||
|
||||
protected virtual void StopObservingInputField(TMP_InputField inputField)
|
||||
{
|
||||
if (inputField == null)
|
||||
return;
|
||||
|
||||
currentInputField.onValueChanged.RemoveListener(OnInputFieldValueChange);
|
||||
}
|
||||
|
||||
protected virtual void StartObservingInputField(TMP_InputField inputField)
|
||||
{
|
||||
if (inputField == null)
|
||||
return;
|
||||
|
||||
currentInputField.onValueChanged.AddListener(OnInputFieldValueChange);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Callback method invoked when the input field's text value changes.
|
||||
/// </summary>
|
||||
/// <param name="updatedText">The text of the input field.</param>
|
||||
protected virtual void OnInputFieldValueChange(string updatedText)
|
||||
{
|
||||
caretPosition = updatedText.Length;
|
||||
text = updatedText;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4f17a1b36fcb274449d030ef08f66941
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,175 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Scriptable object that defines key mappings to support swapping <see cref="XRKeyboardLayout"/>. There should be one
|
||||
/// instance of the <see cref="XRKeyboardConfig"/> for each layout (i.e. alphanumeric, symbols, etc.).
|
||||
/// </summary>
|
||||
public class XRKeyboardConfig : ScriptableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Class representing the data needed to populate keys.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class KeyMapping
|
||||
{
|
||||
[SerializeField]
|
||||
string m_Character;
|
||||
|
||||
/// <summary>
|
||||
/// Character for this key in non-shifted state. This string will be passed to the keyboard and appended to the keyboard text string or processed as a keyboard command.
|
||||
/// </summary>
|
||||
public string character
|
||||
{
|
||||
get => m_Character;
|
||||
set => m_Character = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
string m_DisplayCharacter;
|
||||
|
||||
/// <summary>
|
||||
/// Display character for this key in a non-shifted state. This string will be displayed on the key text field.
|
||||
/// If empty, character will be used as a fallback.
|
||||
/// </summary>
|
||||
public string displayCharacter
|
||||
{
|
||||
get => m_DisplayCharacter;
|
||||
set => m_DisplayCharacter = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
Sprite m_DisplayIcon;
|
||||
|
||||
/// <summary>
|
||||
/// Display icon for this key in a non-shifted state. This icon will be displayed on the key image field.
|
||||
/// If empty, the display character or character will be used as a fallback.
|
||||
/// </summary>
|
||||
public Sprite displayIcon
|
||||
{
|
||||
get => m_DisplayIcon;
|
||||
set => m_DisplayIcon = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
string m_ShiftCharacter;
|
||||
|
||||
/// <summary>
|
||||
/// Character for this key in a shifted state. This string will be passed to the keyboard and appended to
|
||||
/// the keyboard text string or processed as a keyboard command.
|
||||
/// </summary>
|
||||
public string shiftCharacter
|
||||
{
|
||||
get => m_ShiftCharacter;
|
||||
set => m_ShiftCharacter = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
string m_ShiftDisplayCharacter;
|
||||
|
||||
/// <summary>
|
||||
/// Display character for this key in a shifted state. This string will be displayed on the key
|
||||
/// text field. If empty, shift character will be used as a fallback.
|
||||
/// </summary>
|
||||
public string shiftDisplayCharacter
|
||||
{
|
||||
get => m_ShiftDisplayCharacter;
|
||||
set => m_ShiftDisplayCharacter = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
Sprite m_ShiftDisplayIcon;
|
||||
|
||||
/// <summary>
|
||||
/// Display icon for this key in a shifted state. This icon will be displayed on the key image field.
|
||||
/// If empty, the shift display character or shift character will be used as a fallback.
|
||||
/// </summary>
|
||||
public Sprite shiftDisplayIcon
|
||||
{
|
||||
get => m_ShiftDisplayIcon;
|
||||
set => m_ShiftDisplayIcon = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
bool m_OverrideDefaultKeyFunction;
|
||||
|
||||
/// <summary>
|
||||
/// If true, this will expose a key function property to override the default key function of this config.
|
||||
/// </summary>
|
||||
public bool overrideDefaultKeyFunction
|
||||
{
|
||||
get => m_OverrideDefaultKeyFunction;
|
||||
set => m_OverrideDefaultKeyFunction = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyFunction m_KeyFunction;
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="KeyFunction"/> used for this key. The function callback will be called on key press
|
||||
/// and used to communicate with the keyboard API.
|
||||
/// </summary>
|
||||
public KeyFunction keyFunction
|
||||
{
|
||||
get => m_KeyFunction;
|
||||
set => m_KeyFunction = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
KeyCode m_KeyCode;
|
||||
|
||||
/// <summary>
|
||||
/// (Optional) <see cref="KeyCode"/> used for this key. Used with <see cref="keyFunction"/> to
|
||||
/// support already defined KeyCode values.
|
||||
/// </summary>
|
||||
public KeyCode keyCode
|
||||
{
|
||||
get => m_KeyCode;
|
||||
set => m_KeyCode = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
bool m_Disabled;
|
||||
|
||||
/// <summary>
|
||||
/// If true, the key button interactable property will be set to false.
|
||||
/// </summary>
|
||||
public bool disabled
|
||||
{
|
||||
get => m_Disabled;
|
||||
set => m_Disabled = value;
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Default key function for each key in this mapping.")]
|
||||
KeyFunction m_DefaultKeyFunction;
|
||||
|
||||
/// <summary>
|
||||
/// Default key function for each key in this mapping.
|
||||
/// </summary>
|
||||
/// <remarks>This is a utility feature that reduces the authoring needed when most key mappings share the same
|
||||
/// functionality (i.e. value keys that append characters).</remarks>
|
||||
public KeyFunction defaultKeyFunction
|
||||
{
|
||||
get => m_DefaultKeyFunction;
|
||||
set => m_DefaultKeyFunction = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List of each key mapping in this layout.
|
||||
/// </summary>
|
||||
[SerializeField, Tooltip("List of each key mapping in this layout.")]
|
||||
List<KeyMapping> m_KeyMappings;
|
||||
|
||||
/// <summary>
|
||||
/// List of each key mapping in this layout.
|
||||
/// </summary>
|
||||
public List<KeyMapping> keyMappings
|
||||
{
|
||||
get => m_KeyMappings;
|
||||
set => m_KeyMappings = value;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 944d8cf1c59c0e8468bcd7e2fd86fe4d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,390 @@
|
|||
using TMPro;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Utility class to help facilitate input field relationship with <see cref="XRKeyboard"/>
|
||||
/// </summary>
|
||||
public class XRKeyboardDisplay : MonoBehaviour
|
||||
{
|
||||
[SerializeField, Tooltip("Input field linked to this display.")]
|
||||
TMP_InputField m_InputField;
|
||||
|
||||
/// <summary>
|
||||
/// Input field linked to this display.
|
||||
/// </summary>
|
||||
public TMP_InputField inputField
|
||||
{
|
||||
get => m_InputField;
|
||||
set
|
||||
{
|
||||
if (inputField != null)
|
||||
m_InputField.onSelect.RemoveListener(OnInputFieldGainedFocus);
|
||||
|
||||
m_InputField = value;
|
||||
|
||||
if (inputField != null)
|
||||
{
|
||||
m_InputField.resetOnDeActivation = false;
|
||||
m_InputField.onSelect.AddListener(OnInputFieldGainedFocus);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The script requires setter property logic to be run, so disable when playing
|
||||
[SerializeField, Tooltip("Keyboard for this display to monitor and interact with. If empty this will default to the GlobalNonNativeKeyboard keyboard.")]
|
||||
XRKeyboard m_Keyboard;
|
||||
|
||||
/// <summary>
|
||||
/// Keyboard for this display to monitor and interact with. If empty this will default to the <see cref="GlobalNonNativeKeyboard"/> keyboard.
|
||||
/// </summary>
|
||||
public XRKeyboard keyboard
|
||||
{
|
||||
get => m_Keyboard;
|
||||
set => SetKeyboard(value);
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("If true, this display will use the keyboard reference. If false or if the keyboard field is empty, this display will use global keyboard.")]
|
||||
bool m_UseSceneKeyboard;
|
||||
|
||||
/// <summary>
|
||||
/// If true, this display will use the keyboard reference. If false or if the keyboard field is empty,
|
||||
/// this display will use global keyboard.
|
||||
/// </summary>
|
||||
public bool useSceneKeyboard
|
||||
{
|
||||
get => m_UseSceneKeyboard;
|
||||
set => m_UseSceneKeyboard = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("If true, this display will update with each key press. If false, this display will update on OnTextSubmit.")]
|
||||
bool m_UpdateOnKeyPress = true;
|
||||
|
||||
/// <summary>
|
||||
/// If true, this display will update with each key press. If false, this display will update on OnTextSubmit.
|
||||
/// </summary>
|
||||
public bool updateOnKeyPress
|
||||
{
|
||||
get => m_UpdateOnKeyPress;
|
||||
set => m_UpdateOnKeyPress = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("If true, this display will always subscribe to the keyboard updates. If false, this display will subscribe to keyboard when the input field gains focus.")]
|
||||
bool m_AlwaysObserveKeyboard;
|
||||
|
||||
/// <summary>
|
||||
/// If true, this display will always subscribe to the keyboard updates. If false, this display will subscribe
|
||||
/// to keyboard when the input field gains focus.
|
||||
/// </summary>
|
||||
public bool alwaysObserveKeyboard
|
||||
{
|
||||
get => m_AlwaysObserveKeyboard;
|
||||
set => m_AlwaysObserveKeyboard = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("If true, this display will use the input field's character limit to limit the update text from the keyboard and will pass this into the keyboard when opening.")]
|
||||
public bool m_MonitorInputFieldCharacterLimit;
|
||||
|
||||
/// <summary>
|
||||
/// If true, this display will use the input field's character limit to limit the update text from the keyboard
|
||||
/// and will pass this into the keyboard when opening if.
|
||||
/// </summary>
|
||||
public bool monitorInputFieldCharacterLimit
|
||||
{
|
||||
get => m_MonitorInputFieldCharacterLimit;
|
||||
set => m_MonitorInputFieldCharacterLimit = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("If true, this display will clear the input field text on text submit from the keyboard.")]
|
||||
public bool m_ClearTextOnSubmit;
|
||||
|
||||
/// <summary>
|
||||
/// If true, this display will clear the input field text on text submit from the keyboard.
|
||||
/// </summary>
|
||||
public bool clearTextOnSubmit
|
||||
{
|
||||
get => m_ClearTextOnSubmit;
|
||||
set => m_ClearTextOnSubmit = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("If true, this display will clear the input field text when the keyboard opens.")]
|
||||
public bool m_ClearTextOnOpen;
|
||||
|
||||
/// <summary>
|
||||
/// If true, this display will clear the input field text on text submit from the keyboard.
|
||||
/// </summary>
|
||||
public bool clearTextOnOpen
|
||||
{
|
||||
get => m_ClearTextOnOpen;
|
||||
set => m_ClearTextOnOpen = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("The event that is called when this display receives a text submitted event from the keyboard. Invoked with the keyboard text as a parameter.")]
|
||||
UnityEvent<string> m_OnTextSubmitted = new UnityEvent<string>();
|
||||
|
||||
/// <summary>
|
||||
/// The event that is called when this display receives a text submitted event from the keyboard.
|
||||
/// </summary>
|
||||
public UnityEvent<string> onTextSubmitted
|
||||
{
|
||||
get => m_OnTextSubmitted;
|
||||
set => m_OnTextSubmitted = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("The event that is called when this display opens a keyboard.")]
|
||||
UnityEvent m_OnKeyboardOpened = new UnityEvent();
|
||||
|
||||
/// <summary>
|
||||
/// The event that is called when this display opens a keyboard.
|
||||
/// </summary>
|
||||
public UnityEvent onKeyboardOpened
|
||||
{
|
||||
get => m_OnKeyboardOpened;
|
||||
set => m_OnKeyboardOpened = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("The event that is called when the keyboard this display is observing is closed.")]
|
||||
UnityEvent m_OnKeyboardClosed = new UnityEvent();
|
||||
|
||||
/// <summary>
|
||||
/// The event that is called when the keyboard this display is observing is closed.
|
||||
/// </summary>
|
||||
public UnityEvent onKeyboardClosed
|
||||
{
|
||||
get => m_OnKeyboardClosed;
|
||||
set => m_OnKeyboardClosed = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("The event that is called when the keyboard changes focus and this display is not focused.")]
|
||||
UnityEvent m_OnKeyboardFocusChanged = new UnityEvent();
|
||||
|
||||
/// <summary>
|
||||
/// The event that is called when the keyboard changes focus and this display is not focused.
|
||||
/// </summary>
|
||||
public UnityEvent onKeyboardFocusChanged
|
||||
{
|
||||
get => m_OnKeyboardFocusChanged;
|
||||
set => m_OnKeyboardFocusChanged = value;
|
||||
}
|
||||
|
||||
// Active keyboard for this display
|
||||
XRKeyboard m_ActiveKeyboard;
|
||||
|
||||
bool m_IsActivelyObservingKeyboard;
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
void Awake()
|
||||
{
|
||||
// Set active keyboard to any serialized keyboard
|
||||
m_ActiveKeyboard = m_Keyboard;
|
||||
|
||||
if (m_InputField != null)
|
||||
{
|
||||
// resetOnDeActivation should be false so the caret position does not break with the keyboard interaction
|
||||
m_InputField.resetOnDeActivation = false;
|
||||
|
||||
// shouldHideSoftKeyboard should be true so there is no conflict with the spatial keyboard and the system keyboard
|
||||
m_InputField.shouldHideSoftKeyboard = true;
|
||||
}
|
||||
|
||||
if (m_AlwaysObserveKeyboard && m_ActiveKeyboard != null)
|
||||
StartObservingKeyboard(m_ActiveKeyboard);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
void OnEnable()
|
||||
{
|
||||
if (m_InputField != null)
|
||||
m_InputField.onSelect.AddListener(OnInputFieldGainedFocus);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
void OnDisable()
|
||||
{
|
||||
if (m_InputField != null)
|
||||
m_InputField.onSelect.RemoveListener(OnInputFieldGainedFocus);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
void OnDestroy()
|
||||
{
|
||||
StopObservingKeyboard(m_ActiveKeyboard);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
void Start()
|
||||
{
|
||||
// Set active keyboard to global keyboard if needed
|
||||
if (m_ActiveKeyboard == null || !m_UseSceneKeyboard)
|
||||
m_ActiveKeyboard = GlobalNonNativeKeyboard.instance.keyboard;
|
||||
|
||||
// Observe keyboard if always observe is true
|
||||
var observeOnStart = m_AlwaysObserveKeyboard && m_ActiveKeyboard != null &! m_IsActivelyObservingKeyboard;
|
||||
if (observeOnStart)
|
||||
StartObservingKeyboard(m_ActiveKeyboard);
|
||||
}
|
||||
|
||||
void SetKeyboard(XRKeyboard updateKeyboard, bool observeKeyboard = true)
|
||||
{
|
||||
if (ReferenceEquals(updateKeyboard, m_Keyboard))
|
||||
return;
|
||||
|
||||
StopObservingKeyboard(m_ActiveKeyboard);
|
||||
|
||||
// Update serialized referenced
|
||||
m_Keyboard = updateKeyboard;
|
||||
|
||||
// Update private keyboard
|
||||
m_ActiveKeyboard = m_Keyboard;
|
||||
|
||||
if (m_ActiveKeyboard != null && (observeKeyboard || m_AlwaysObserveKeyboard))
|
||||
StartObservingKeyboard(m_ActiveKeyboard);
|
||||
}
|
||||
|
||||
void StartObservingKeyboard(XRKeyboard activeKeyboard)
|
||||
{
|
||||
if (activeKeyboard == null || m_IsActivelyObservingKeyboard)
|
||||
return;
|
||||
|
||||
activeKeyboard.onTextUpdated.AddListener(OnTextUpdate);
|
||||
activeKeyboard.onTextSubmitted.AddListener(OnTextSubmit);
|
||||
activeKeyboard.onClosed.AddListener(KeyboardClosing);
|
||||
activeKeyboard.onOpened.AddListener(KeyboardOpening);
|
||||
activeKeyboard.onFocusChanged.AddListener(KeyboardFocusChanged);
|
||||
|
||||
m_IsActivelyObservingKeyboard = true;
|
||||
}
|
||||
|
||||
void StopObservingKeyboard(XRKeyboard activeKeyboard)
|
||||
{
|
||||
if (activeKeyboard == null)
|
||||
return;
|
||||
|
||||
activeKeyboard.onTextUpdated.RemoveListener(OnTextUpdate);
|
||||
activeKeyboard.onTextSubmitted.RemoveListener(OnTextSubmit);
|
||||
activeKeyboard.onClosed.RemoveListener(KeyboardClosing);
|
||||
activeKeyboard.onOpened.RemoveListener(KeyboardOpening);
|
||||
activeKeyboard.onFocusChanged.RemoveListener(KeyboardFocusChanged);
|
||||
|
||||
m_IsActivelyObservingKeyboard = false;
|
||||
}
|
||||
|
||||
void OnInputFieldGainedFocus(string text)
|
||||
{
|
||||
// If this display is already observing keyboard, sync, attempt to reposition, and early out
|
||||
// Displays that are always observing keyboards call open to ensure they sync with the keyboard
|
||||
if (m_IsActivelyObservingKeyboard && !alwaysObserveKeyboard)
|
||||
{
|
||||
if (!m_UseSceneKeyboard || m_Keyboard == null)
|
||||
GlobalNonNativeKeyboard.instance.RepositionKeyboardIfOutOfView();
|
||||
|
||||
// Sync input field caret position with keyboard caret position
|
||||
m_InputField.caretPosition = m_ActiveKeyboard.caretPosition;
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_ClearTextOnOpen)
|
||||
m_InputField.text = string.Empty;
|
||||
|
||||
// If not using a scene keyboard, use global keyboard.
|
||||
if (!m_UseSceneKeyboard || m_Keyboard == null)
|
||||
{
|
||||
GlobalNonNativeKeyboard.instance.ShowKeyboard(m_InputField, m_MonitorInputFieldCharacterLimit);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ActiveKeyboard.Open(m_InputField, m_MonitorInputFieldCharacterLimit);
|
||||
}
|
||||
|
||||
// Sync input field caret position with keyboard caret position
|
||||
m_InputField.caretPosition = m_ActiveKeyboard.caretPosition;
|
||||
|
||||
// This display is opening the keyboard
|
||||
m_OnKeyboardOpened.Invoke();
|
||||
|
||||
StartObservingKeyboard(m_ActiveKeyboard);
|
||||
}
|
||||
|
||||
void OnTextSubmit(KeyboardTextEventArgs args)
|
||||
{
|
||||
UpdateText(args.keyboardText);
|
||||
m_OnTextSubmitted?.Invoke(args.keyboardText);
|
||||
if (m_ClearTextOnSubmit)
|
||||
{
|
||||
inputField.text = string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
void OnTextUpdate(KeyboardTextEventArgs args)
|
||||
{
|
||||
if (!m_UpdateOnKeyPress)
|
||||
return;
|
||||
|
||||
UpdateText(args.keyboardText);
|
||||
}
|
||||
|
||||
void UpdateText(string text)
|
||||
{
|
||||
var updatedText = text;
|
||||
|
||||
// Clip updated text to substring
|
||||
if (m_MonitorInputFieldCharacterLimit && updatedText.Length >= m_InputField.characterLimit)
|
||||
updatedText = updatedText.Substring(0, m_InputField.characterLimit);
|
||||
|
||||
m_InputField.text = updatedText;
|
||||
|
||||
// Update input field caret position with keyboard caret position
|
||||
m_InputField.caretPosition = m_ActiveKeyboard.caretPosition;
|
||||
}
|
||||
|
||||
void KeyboardOpening(KeyboardTextEventArgs args)
|
||||
{
|
||||
Debug.Assert(args.keyboard == m_ActiveKeyboard);
|
||||
|
||||
if (args.keyboard != m_ActiveKeyboard)
|
||||
return;
|
||||
|
||||
if (!m_InputField.isFocused && !m_AlwaysObserveKeyboard)
|
||||
StopObservingKeyboard(m_ActiveKeyboard);
|
||||
}
|
||||
|
||||
void KeyboardClosing(KeyboardTextEventArgs args)
|
||||
{
|
||||
Debug.Assert(args.keyboard == m_ActiveKeyboard);
|
||||
|
||||
if (args.keyboard != m_ActiveKeyboard)
|
||||
return;
|
||||
|
||||
if (!m_AlwaysObserveKeyboard)
|
||||
StopObservingKeyboard(m_ActiveKeyboard);
|
||||
|
||||
m_OnKeyboardClosed.Invoke();
|
||||
}
|
||||
|
||||
void KeyboardFocusChanged(KeyboardTextEventArgs args)
|
||||
{
|
||||
Debug.Assert(args.keyboard == m_ActiveKeyboard);
|
||||
|
||||
if (args.keyboard != m_ActiveKeyboard)
|
||||
return;
|
||||
|
||||
if (!m_InputField.isFocused && !m_AlwaysObserveKeyboard)
|
||||
StopObservingKeyboard(m_ActiveKeyboard);
|
||||
|
||||
// The keyboard changed focus and this input field is no longer in focus
|
||||
if (!m_InputField.isFocused)
|
||||
m_OnKeyboardFocusChanged.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a2317ceab4d3d38419fe16eebc1c0cd3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,133 @@
|
|||
using System;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
#region EventArgs
|
||||
|
||||
/// <summary>
|
||||
/// Event data associated with a keyboard event.
|
||||
/// </summary>
|
||||
public class KeyboardBaseEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The XR Keyboard associated with this keyboard event.
|
||||
/// </summary>
|
||||
public XRKeyboard keyboard { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event data associated with a keyboard event that includes text.
|
||||
/// </summary>
|
||||
public class KeyboardTextEventArgs : KeyboardBaseEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The current keyboard text when this event is fired.
|
||||
/// </summary>
|
||||
public string keyboardText { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event data associated with a keyboard event that includes a keyboard key.
|
||||
/// </summary>
|
||||
public class KeyboardKeyEventArgs : KeyboardBaseEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The key associated with this event.
|
||||
/// </summary>
|
||||
public XRKeyboardKey key { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event data associated with a keyboard event that includes a bool value.
|
||||
/// </summary>
|
||||
public class KeyboardBoolEventArgs : KeyboardBaseEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The bool value associated with this event.
|
||||
/// </summary>
|
||||
public bool value { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event data associated with a keyboard event that includes a layout string.
|
||||
/// </summary>
|
||||
public class KeyboardLayoutEventArgs : KeyboardBaseEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The layout string associated with this event.
|
||||
/// </summary>
|
||||
public string layout { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event data associated with modifiers of the keyboard.
|
||||
/// </summary>
|
||||
public class KeyboardModifiersEventArgs : KeyboardBaseEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The shift value associated with this event.
|
||||
/// </summary>
|
||||
public bool shiftValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The caps lock value associated with this event.
|
||||
/// </summary>
|
||||
public bool capsLockValue { get; set; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Events
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="UnityEvent"/> that Unity invokes on a keyboard.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public sealed class KeyboardEvent : UnityEvent<KeyboardBaseEventArgs>
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="UnityEvent"/> that includes text that Unity invokes on a keyboard.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public sealed class KeyboardTextEvent : UnityEvent<KeyboardTextEventArgs>
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="UnityEvent"/> that includes a key that Unity invokes on a keyboard.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public sealed class KeyboardKeyEvent : UnityEvent<KeyboardKeyEventArgs>
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="UnityEvent"/> that includes a bool value that Unity invokes on a keyboard.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public sealed class KeyboardBoolEvent : UnityEvent<KeyboardBoolEventArgs>
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="UnityEvent"/> that includes a layout string that Unity invokes on a keyboard.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public sealed class KeyboardLayoutEvent : UnityEvent<KeyboardLayoutEventArgs>
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="UnityEvent"/> that includes supported keyboard modifiers.
|
||||
/// </summary>
|
||||
/// <remarks>Currently supported keyboard modifiers include shift and caps lock.</remarks>
|
||||
[Serializable]
|
||||
public sealed class KeyboardModifiersEvent : UnityEvent<KeyboardModifiersEventArgs>
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f1f37871f6d8da54babd815aa4184559
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,451 @@
|
|||
using TMPro;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Keyboard key used to interface with <see cref="XRKeyboard"/>.
|
||||
/// </summary>
|
||||
public class XRKeyboardKey : Button
|
||||
{
|
||||
[SerializeField, Tooltip("KeyFunction used for this key which is called when key is pressed. Used to communicate with the Keyboard.")]
|
||||
KeyFunction m_KeyFunction;
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="KeyFunction"/> used for this key which is called when key is pressed. Used to communicate with
|
||||
/// the Keyboard.
|
||||
/// </summary>
|
||||
public KeyFunction keyFunction
|
||||
{
|
||||
get => m_KeyFunction;
|
||||
set => m_KeyFunction = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("(Optional) KeyCode used for this key. Used in conjunction with Key Function or as a fallback for standard commands.")]
|
||||
KeyCode m_KeyCode;
|
||||
|
||||
/// <summary>
|
||||
/// (Optional) <see cref="KeyCode"/> used for this key. Used in conjunction with Key Function or as a fallback for standard commands.
|
||||
/// </summary>
|
||||
public KeyCode keyCode
|
||||
{
|
||||
get => m_KeyCode;
|
||||
set => m_KeyCode = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Character for this key in non-shifted state. This string will be passed to the keyboard and appended to the keyboard text string or processed as a keyboard command.")]
|
||||
string m_Character;
|
||||
|
||||
/// <summary>
|
||||
/// Character for this key in non-shifted state. This string will be passed to the keyboard and appended
|
||||
/// to the keyboard text string or processed as a keyboard command (i.e. '\s' for shift)
|
||||
/// </summary>
|
||||
public string character
|
||||
{
|
||||
get => m_Character;
|
||||
set => m_Character = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("(Optional) Display character for this key in a non-shifted state. This string will be displayed on the key text field. If empty, character will be used as a fall back.")]
|
||||
string m_DisplayCharacter;
|
||||
|
||||
/// <summary>
|
||||
/// (Optional) Display character for this key in a non-shifted state. This string will be displayed on the
|
||||
/// key text field. If left empty, <see cref="character"/> will be used instead.
|
||||
/// </summary>
|
||||
public string displayCharacter
|
||||
{
|
||||
get => m_DisplayCharacter;
|
||||
set
|
||||
{
|
||||
m_DisplayCharacter = value;
|
||||
RefreshDisplayCharacter();
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("(Optional) Display icon for this key in a non-shifted state. This icon will be displayed on the key icon image. If empty, the display character or character will be used as a fall back.")]
|
||||
Sprite m_DisplayIcon;
|
||||
|
||||
/// <summary>
|
||||
/// (Optional) Display icon for this key in a non-shifted state. This icon will be displayed on the key icon image.
|
||||
/// If empty, the display character or character will be used instead.
|
||||
/// </summary>
|
||||
public Sprite displayIcon
|
||||
{
|
||||
get => m_DisplayIcon;
|
||||
set
|
||||
{
|
||||
m_DisplayIcon = value;
|
||||
if (m_IconComponent != null)
|
||||
{
|
||||
m_IconComponent.sprite = m_DisplayIcon;
|
||||
m_IconComponent.enabled = m_DisplayIcon != null;
|
||||
}
|
||||
|
||||
RefreshDisplayCharacter();
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Character for this key in a shifted state. This string will be passed to the keyboard and appended to the keyboard text string or processed as a keyboard command.")]
|
||||
string m_ShiftCharacter;
|
||||
|
||||
/// <summary>
|
||||
/// Character for this key in a shifted state. This string will be passed to the keyboard and appended
|
||||
/// to the keyboard text string or processed as a keyboard command (i.e. '\s' for shift).
|
||||
/// </summary>
|
||||
public string shiftCharacter
|
||||
{
|
||||
get => m_ShiftCharacter;
|
||||
set => m_ShiftCharacter = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("(Optional) Display character for this key in a shifted state. This string will be displayed on the key text field. If empty, shift character will be used as a fall back.")]
|
||||
string m_ShiftDisplayCharacter;
|
||||
|
||||
/// <summary>
|
||||
/// (Optional) Display character for this key in a shifted state. This string will be displayed on the key text field.
|
||||
/// If empty, <see cref="shiftCharacter"/> will be used instead, and finally <see cref="character"/> will
|
||||
/// be capitalized and used if <see cref="shiftCharacter"/> is empty.
|
||||
/// </summary>
|
||||
public string shiftDisplayCharacter
|
||||
{
|
||||
get => m_ShiftDisplayCharacter;
|
||||
set
|
||||
{
|
||||
m_ShiftDisplayCharacter = value;
|
||||
RefreshDisplayCharacter();
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("(Optional) Display icon for this key in a shifted state. This icon will be displayed on the key icon image. If empty, the shift display character or shift character will be used as a fall back.")]
|
||||
Sprite m_ShiftDisplayIcon;
|
||||
|
||||
/// <summary>
|
||||
/// (Optional) Display icon for this key in a shifted state. This icon will be displayed on the key icon image.
|
||||
/// If empty, the shift display character or shift character will be used instead.
|
||||
/// </summary>
|
||||
public Sprite shiftDisplayIcon
|
||||
{
|
||||
get => m_ShiftDisplayIcon;
|
||||
set
|
||||
{
|
||||
m_ShiftDisplayIcon = value;
|
||||
if (m_IconComponent != null)
|
||||
{
|
||||
m_IconComponent.sprite = shiftDisplayIcon;
|
||||
m_IconComponent.enabled = shiftDisplayIcon != null;
|
||||
}
|
||||
|
||||
RefreshDisplayCharacter();
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("If true, the key pressed event will fire on button down. If false, the key pressed event will fire on On Click.")]
|
||||
bool m_UpdateOnKeyDown;
|
||||
|
||||
/// <summary>
|
||||
/// If true, key pressed will fire on button down instead of on button up.
|
||||
/// </summary>
|
||||
public bool updateOnKeyDown
|
||||
{
|
||||
get => m_UpdateOnKeyDown;
|
||||
set => m_UpdateOnKeyDown = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Text field used to display key character.")]
|
||||
TMP_Text m_TextComponent;
|
||||
|
||||
/// <summary>
|
||||
/// Text field used to display key character.
|
||||
/// </summary>
|
||||
public TMP_Text textComponent
|
||||
{
|
||||
get => m_TextComponent;
|
||||
set => m_TextComponent = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Image component used to display icons for key.")]
|
||||
Image m_IconComponent;
|
||||
|
||||
/// <summary>
|
||||
/// Image component used to display icons for key.
|
||||
/// </summary>
|
||||
public Image iconComponent
|
||||
{
|
||||
get => m_IconComponent;
|
||||
set => m_IconComponent = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("Image component used to highlight key indicating an active state.")]
|
||||
Image m_HighlightComponent;
|
||||
|
||||
/// <summary>
|
||||
/// Image component used to highlight key indicating an active state.
|
||||
/// </summary>
|
||||
public Image highlightComponent
|
||||
{
|
||||
get => m_HighlightComponent;
|
||||
set => m_HighlightComponent = value;
|
||||
}
|
||||
|
||||
[SerializeField, Tooltip("(Optional) Audio source played when key is pressed.")]
|
||||
AudioSource m_AudioSource;
|
||||
|
||||
/// <summary>
|
||||
/// (Optional) Audio source played when key is pressed.
|
||||
/// </summary>
|
||||
public AudioSource audioSource
|
||||
{
|
||||
get => m_AudioSource;
|
||||
set => m_AudioSource = value;
|
||||
}
|
||||
|
||||
XRKeyboard m_Keyboard;
|
||||
|
||||
float m_LastClickTime;
|
||||
bool m_Shifted;
|
||||
|
||||
/// <summary>
|
||||
/// True if this key is in a shifted state, otherwise returns false.
|
||||
/// </summary>
|
||||
public bool shifted
|
||||
{
|
||||
get => m_Shifted;
|
||||
set
|
||||
{
|
||||
m_Shifted = value;
|
||||
RefreshDisplayCharacter();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Time the key was last pressed.
|
||||
/// </summary>
|
||||
public float lastClickTime => m_LastClickTime;
|
||||
|
||||
/// <summary>
|
||||
/// Time since the key was last pressed.
|
||||
/// </summary>
|
||||
public float timeSinceLastClick => Time.time - m_LastClickTime;
|
||||
|
||||
/// <summary>
|
||||
/// The keyboard associated with this key.
|
||||
/// </summary>
|
||||
public XRKeyboard keyboard
|
||||
{
|
||||
get => m_Keyboard;
|
||||
set
|
||||
{
|
||||
if (m_Keyboard != null)
|
||||
{
|
||||
m_Keyboard.onShifted.RemoveListener(OnKeyboardShift);
|
||||
m_Keyboard.onLayoutChanged.RemoveListener(OnKeyboardLayoutChange);
|
||||
}
|
||||
|
||||
m_Keyboard = value;
|
||||
|
||||
if (m_Keyboard != null)
|
||||
{
|
||||
m_Keyboard.onShifted.AddListener(OnKeyboardShift);
|
||||
m_Keyboard.onLayoutChanged.AddListener(OnKeyboardLayoutChange);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Start()
|
||||
{
|
||||
base.Start();
|
||||
RefreshDisplayCharacter();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnDestroy()
|
||||
{
|
||||
base.OnDestroy();
|
||||
if (m_Keyboard != null)
|
||||
{
|
||||
m_Keyboard.onShifted.RemoveListener(OnKeyboardShift);
|
||||
m_Keyboard.onLayoutChanged.RemoveListener(OnKeyboardLayoutChange);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
base.OnPointerDown(eventData);
|
||||
if (m_UpdateOnKeyDown && interactable)
|
||||
KeyClick();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnPointerClick(PointerEventData eventData)
|
||||
{
|
||||
base.OnPointerClick(eventData);
|
||||
if (!m_UpdateOnKeyDown)
|
||||
KeyClick();
|
||||
}
|
||||
|
||||
protected virtual void KeyClick()
|
||||
{
|
||||
// Local function of things to do to the key when pressed (Audio, etc.)
|
||||
KeyPressed();
|
||||
|
||||
if (m_KeyFunction != null)
|
||||
{
|
||||
m_KeyFunction.PreprocessKey(m_Keyboard, this);
|
||||
m_KeyFunction.ProcessKey(m_Keyboard, this);
|
||||
m_KeyFunction.PostprocessKey(m_Keyboard, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback if key function is null
|
||||
m_Keyboard.PreprocessKeyPress(this);
|
||||
m_Keyboard.TryProcessKeyPress(this);
|
||||
m_Keyboard.PostprocessKeyPress(this);
|
||||
}
|
||||
|
||||
m_LastClickTime = Time.time;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Local handling of this key being pressed.
|
||||
/// </summary>
|
||||
protected virtual void KeyPressed()
|
||||
{
|
||||
if (m_AudioSource != null)
|
||||
{
|
||||
if (m_AudioSource.isPlaying)
|
||||
m_AudioSource.Stop();
|
||||
|
||||
float pitchVariance = Random.Range(0.95f, 1.05f);
|
||||
m_AudioSource.pitch = pitchVariance;
|
||||
m_AudioSource.Play();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OnKeyboardShift(KeyboardModifiersEventArgs args)
|
||||
{
|
||||
shifted = args.shiftValue;
|
||||
}
|
||||
|
||||
protected virtual void OnKeyboardLayoutChange(KeyboardLayoutEventArgs args)
|
||||
{
|
||||
var enableHighlight = args.layout == m_Character && !m_HighlightComponent.enabled;
|
||||
EnableHighlight(enableHighlight);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the key highlight image.
|
||||
/// </summary>
|
||||
/// <param name="enable">If true, the highlight image is enabled. If false, the highlight image is disabled.</param>
|
||||
public void EnableHighlight(bool enable)
|
||||
{
|
||||
if (m_HighlightComponent != null)
|
||||
{
|
||||
m_HighlightComponent.enabled = enable;
|
||||
}
|
||||
}
|
||||
|
||||
// Helper functions
|
||||
protected void RefreshDisplayCharacter()
|
||||
{
|
||||
if (m_KeyFunction != null && m_Keyboard != null)
|
||||
m_KeyFunction.ProcessRefreshDisplay(m_Keyboard, this);
|
||||
|
||||
if (m_IconComponent != null)
|
||||
{
|
||||
m_IconComponent.sprite = GetEffectiveDisplayIcon();
|
||||
if (m_IconComponent.sprite != null)
|
||||
{
|
||||
m_TextComponent.enabled = false;
|
||||
m_IconComponent.enabled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_TextComponent != null)
|
||||
{
|
||||
m_TextComponent.text = GetEffectiveDisplayCharacter();
|
||||
m_TextComponent.enabled = true;
|
||||
m_IconComponent.enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual string GetEffectiveDisplayCharacter()
|
||||
{
|
||||
// If we've got a display character, prioritize that.
|
||||
string value;
|
||||
if (!string.IsNullOrEmpty(m_DisplayCharacter))
|
||||
value = m_DisplayCharacter;
|
||||
else if (!string.IsNullOrEmpty(m_Character))
|
||||
value = m_Character;
|
||||
else
|
||||
value = string.Empty;
|
||||
|
||||
// If we're in shift mode, check our shift overrides.
|
||||
if (m_Shifted)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(m_ShiftDisplayCharacter))
|
||||
value = m_ShiftDisplayCharacter;
|
||||
else if (!string.IsNullOrEmpty(m_ShiftCharacter))
|
||||
value = m_ShiftCharacter;
|
||||
else
|
||||
value = value.ToUpper();
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
protected virtual Sprite GetEffectiveDisplayIcon()
|
||||
{
|
||||
if (m_KeyFunction != null && m_Keyboard != null && m_KeyFunction.OverrideDisplayIcon(m_Keyboard, this))
|
||||
return m_KeyFunction.GetDisplayIcon(m_Keyboard, this);
|
||||
|
||||
return m_Shifted ? m_ShiftDisplayIcon : m_DisplayIcon;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Helper function that returns the current effective character for this key based on shifted state.
|
||||
/// </summary>
|
||||
/// <returns>Returns the <see cref="shiftCharacter"/> when this key is in the shifted state or <see cref="character"/>
|
||||
/// when this key is not shifted.</returns>
|
||||
public virtual string GetEffectiveCharacter()
|
||||
{
|
||||
if (m_Shifted)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(m_ShiftCharacter))
|
||||
return m_ShiftCharacter;
|
||||
|
||||
return m_Character.ToUpper();
|
||||
}
|
||||
|
||||
return m_Character;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the key button being interactable. The icon and text alpha will be adjusted to reflect
|
||||
/// the state of the button.
|
||||
/// </summary>
|
||||
/// <param name="enable">The desired interactable state of the key.</param>
|
||||
public virtual void SetButtonInteractable(bool enable)
|
||||
{
|
||||
const float enabledAlpha = 1f;
|
||||
const float disabledAlpha = 0.25f;
|
||||
|
||||
interactable = enable;
|
||||
if (m_TextComponent != null)
|
||||
{
|
||||
m_TextComponent.alpha = enable ? enabledAlpha : disabledAlpha;
|
||||
}
|
||||
|
||||
if (m_IconComponent != null)
|
||||
{
|
||||
var c = m_IconComponent.color;
|
||||
c.a = enable ? enabledAlpha : disabledAlpha;
|
||||
m_IconComponent.color = c;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue