Add XR sample assets and update settings
This commit is contained in:
@@ -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: 10
|
||||
animationStateEndValue: 10
|
||||
- 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:
|
||||
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,169 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bf84391e5296de6468c2c36a85c6ee65
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,184 @@
|
||||
using UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityEditor.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Custom editor for a <see cref="KeyboardOptimizer"/>.
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(KeyboardOptimizer), true), CanEditMultipleObjects]
|
||||
public class KeyboardOptimizerEditor : BaseInteractionEditor
|
||||
{
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="KeyboardOptimizer.optimizeOnStart"/>.</summary>
|
||||
protected SerializedProperty m_OptimizeOnStart;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="KeyboardOptimizer.batchGroupParentTransform"/>.</summary>
|
||||
protected SerializedProperty m_BatchGroupParentTransform;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="KeyboardOptimizer.buttonParentTransform"/>.</summary>
|
||||
protected SerializedProperty m_ButtonParentTransform;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="KeyboardOptimizer.imageParentTransform"/>.</summary>
|
||||
protected SerializedProperty m_ImageParentTransform;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="KeyboardOptimizer.textParentTransform"/>.</summary>
|
||||
protected SerializedProperty m_TextParentTransform;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="KeyboardOptimizer.iconParentTransform"/>.</summary>
|
||||
protected SerializedProperty m_IconParentTransform;
|
||||
/// <summary><see cref="SerializedProperty"/> of the <see cref="SerializeField"/> backing <see cref="KeyboardOptimizer.highlightParentTransform"/>.</summary>
|
||||
protected SerializedProperty m_HighlightParentTransform;
|
||||
|
||||
KeyboardOptimizer m_KeyboardTarget;
|
||||
|
||||
/// <summary>
|
||||
/// Contents of GUI elements used by this editor.
|
||||
/// </summary>
|
||||
protected static class Contents
|
||||
{
|
||||
/// <summary><see cref="GUIContent"/> for <see cref="KeyboardOptimizer.optimizeOnStart"/>.</summary>
|
||||
public static readonly GUIContent optimizeOnStart = EditorGUIUtility.TrTextContent("Optimize On Start", "If enabled, the optimization will be called on Start.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the <see cref="KeyboardOptimizer.batchGroupParentTransform"/> property.</summary>
|
||||
public static readonly GUIContent batchGroupParentTransform = EditorGUIUtility.TrTextContent("Batch Group Parent Transform", "The parent transform for batch groups.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the <see cref="KeyboardOptimizer.buttonParentTransform"/> property.</summary>
|
||||
public static readonly GUIContent buttonParentTransform = EditorGUIUtility.TrTextContent("Button Parent Transform", "The parent transform for buttons.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the <see cref="KeyboardOptimizer.imageParentTransform"/> property.</summary>
|
||||
public static readonly GUIContent imageParentTransform = EditorGUIUtility.TrTextContent("Image Parent Transform", "The parent transform for images.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the <see cref="KeyboardOptimizer.textParentTransform"/> property.</summary>
|
||||
public static readonly GUIContent textParentTransform = EditorGUIUtility.TrTextContent("Text Parent Transform", "The parent transform for text elements.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the <see cref="KeyboardOptimizer.iconParentTransform"/> property.</summary>
|
||||
public static readonly GUIContent iconParentTransform = EditorGUIUtility.TrTextContent("Icon Parent Transform", "The parent transform for icons.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the <see cref="KeyboardOptimizer.highlightParentTransform"/> property.</summary>
|
||||
public static readonly GUIContent highlightParentTransform = EditorGUIUtility.TrTextContent("Highlight Parent Transform", "The parent transform for highlights.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for Batch Transform References header label.</summary>
|
||||
public static readonly GUIContent batchTransformReferencesHeader = EditorGUIUtility.TrTextContent("Batch Transform References");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for Optimize button.</summary>
|
||||
public static readonly GUIContent optimizeButton = EditorGUIUtility.TrTextContent("Optimize", "This is the same as call Optimize() in the script.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for Unoptimize button.</summary>
|
||||
public static readonly GUIContent unoptimizeButton = EditorGUIUtility.TrTextContent("Unoptimize", "This is the same as call Unoptimize() in the script.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the Optimization header label.</summary>
|
||||
public static readonly GUIContent optimizationHeader = EditorGUIUtility.TrTextContent("Optimization");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the message label when multi-object editing.</summary>
|
||||
public static readonly GUIContent optimizationOnlySingleObject = EditorGUIUtility.TrTextContent("Optimization is only available when a single GameObject is selected.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the message label when not in a scene.</summary>
|
||||
public static readonly GUIContent optimizationOnlyInScene = EditorGUIUtility.TrTextContent("Optimization is only available with scene objects during runtime.");
|
||||
|
||||
/// <summary><see cref="GUIContent"/> for the message label when not in Play mode.</summary>
|
||||
public static readonly GUIContent optimizationOnlyDuringRuntime = EditorGUIUtility.TrTextContent("Optimization is only available during runtime.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="Editor"/>.
|
||||
/// </summary>
|
||||
protected void OnEnable()
|
||||
{
|
||||
m_OptimizeOnStart = serializedObject.FindProperty("m_OptimizeOnStart");
|
||||
m_BatchGroupParentTransform = serializedObject.FindProperty("m_BatchGroupParentTransform");
|
||||
m_ButtonParentTransform = serializedObject.FindProperty("m_ButtonParentTransform");
|
||||
m_ImageParentTransform = serializedObject.FindProperty("m_ImageParentTransform");
|
||||
m_TextParentTransform = serializedObject.FindProperty("m_TextParentTransform");
|
||||
m_IconParentTransform = serializedObject.FindProperty("m_IconParentTransform");
|
||||
m_HighlightParentTransform = serializedObject.FindProperty("m_HighlightParentTransform");
|
||||
|
||||
m_KeyboardTarget = (KeyboardOptimizer)target;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
/// <seealso cref="DrawBeforeProperties"/>
|
||||
/// <seealso cref="DrawProperties"/>
|
||||
/// <seealso cref="BaseInteractionEditor.DrawDerivedProperties"/>
|
||||
protected override void DrawInspector()
|
||||
{
|
||||
DrawBeforeProperties();
|
||||
DrawProperties();
|
||||
DrawDerivedProperties();
|
||||
DrawOptimizationControls();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method is automatically called by <see cref="DrawInspector"/> to
|
||||
/// draw the section of the custom inspector before <see cref="DrawProperties"/>.
|
||||
/// By default, this draws the read-only Script property.
|
||||
/// </summary>
|
||||
protected virtual void DrawBeforeProperties()
|
||||
{
|
||||
DrawScript();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method is automatically called by <see cref="DrawInspector"/> to
|
||||
/// draw the property fields. Override this method to customize the
|
||||
/// properties shown in the Inspector. This is typically the method overridden
|
||||
/// when a derived behavior adds additional serialized properties
|
||||
/// that should be displayed in the Inspector.
|
||||
/// </summary>
|
||||
protected virtual void DrawProperties()
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_OptimizeOnStart, Contents.optimizeOnStart);
|
||||
|
||||
m_BatchGroupParentTransform.isExpanded = EditorGUILayout.BeginFoldoutHeaderGroup(m_BatchGroupParentTransform.isExpanded, Contents.batchTransformReferencesHeader);
|
||||
if (m_BatchGroupParentTransform.isExpanded)
|
||||
{
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_BatchGroupParentTransform, Contents.batchGroupParentTransform);
|
||||
EditorGUILayout.PropertyField(m_ButtonParentTransform, Contents.buttonParentTransform);
|
||||
EditorGUILayout.PropertyField(m_ImageParentTransform, Contents.imageParentTransform);
|
||||
EditorGUILayout.PropertyField(m_TextParentTransform, Contents.textParentTransform);
|
||||
EditorGUILayout.PropertyField(m_IconParentTransform, Contents.iconParentTransform);
|
||||
EditorGUILayout.PropertyField(m_HighlightParentTransform, Contents.highlightParentTransform);
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndFoldoutHeaderGroup();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method is automatically called by <see cref="DrawInspector"/> to
|
||||
/// draw the Optimization section.
|
||||
/// </summary>
|
||||
protected virtual void DrawOptimizationControls()
|
||||
{
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.LabelField(Contents.optimizationHeader, EditorStyles.boldLabel);
|
||||
|
||||
var isOptimizationAvailable = true;
|
||||
if (targets.Length > 1)
|
||||
{
|
||||
EditorGUILayout.HelpBox(Contents.optimizationOnlySingleObject.text, MessageType.None);
|
||||
isOptimizationAvailable = false;
|
||||
}
|
||||
else if (!m_KeyboardTarget.gameObject.scene.IsValid())
|
||||
{
|
||||
EditorGUILayout.HelpBox(Contents.optimizationOnlyInScene.text, MessageType.None);
|
||||
isOptimizationAvailable = false;
|
||||
}
|
||||
else if (!Application.isPlaying)
|
||||
{
|
||||
EditorGUILayout.HelpBox(Contents.optimizationOnlyDuringRuntime.text, MessageType.None);
|
||||
isOptimizationAvailable = false;
|
||||
}
|
||||
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
using (new EditorGUI.DisabledScope(!isOptimizationAvailable || m_KeyboardTarget.isCurrentlyOptimized))
|
||||
{
|
||||
if (GUILayout.Button(Contents.optimizeButton))
|
||||
((KeyboardOptimizer)target).Optimize();
|
||||
}
|
||||
|
||||
using (new EditorGUI.DisabledScope(!isOptimizationAvailable || !m_KeyboardTarget.isCurrentlyOptimized))
|
||||
{
|
||||
if (GUILayout.Button(Contents.unoptimizeButton))
|
||||
((KeyboardOptimizer)target).Unoptimize();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 83af6bccea6d14346953e77a76b181b2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,190 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Unity.XR.CoreUtils.Editor;
|
||||
using UnityEditor.PackageManager;
|
||||
using UnityEditor.PackageManager.Requests;
|
||||
using UnityEditor.PackageManager.UI;
|
||||
using UnityEditor.XR.Interaction.Toolkit.ProjectValidation;
|
||||
using UnityEngine;
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
using TMPro;
|
||||
#endif
|
||||
|
||||
namespace UnityEditor.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// Unity Editor class which registers Project Validation rules for the Spatial Keyboard sample,
|
||||
/// checking that required samples and packages 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";
|
||||
#if UNITY_6000_0_OR_NEWER
|
||||
const string k_UIPackageName = "com.unity.ugui";
|
||||
const string k_UIPackageDisplayName = "Unity UI";
|
||||
#else
|
||||
const string k_UIPackageName = "com.unity.textmeshpro";
|
||||
const string k_UIPackageDisplayName = "TextMeshPro";
|
||||
#endif
|
||||
|
||||
static readonly BuildTargetGroup[] s_BuildTargetGroups =
|
||||
((BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup))).Distinct().ToArray();
|
||||
|
||||
static AddRequest s_UIPackageAddRequest;
|
||||
|
||||
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. {GetImportSampleVersionMessage(k_Category, k_StarterAssetsSampleName, ProjectValidationUtility.minimumXRIStarterAssetsSampleVersion)}",
|
||||
Category = k_Category,
|
||||
CheckPredicate = () => ProjectValidationUtility.SampleImportMeetsMinimumVersion(k_Category, k_StarterAssetsSampleName, ProjectValidationUtility.minimumXRIStarterAssetsSampleVersion),
|
||||
FixIt = () =>
|
||||
{
|
||||
if (TryFindSample(k_XRIPackageName, string.Empty, k_StarterAssetsSampleName, out var sample))
|
||||
{
|
||||
sample.Import(Sample.ImportOptions.OverridePreviousImports);
|
||||
}
|
||||
},
|
||||
FixItAutomatic = true,
|
||||
Error = !ProjectValidationUtility.HasSampleImported(k_Category, k_StarterAssetsSampleName),
|
||||
},
|
||||
|
||||
new BuildValidationRule
|
||||
{
|
||||
IsRuleEnabled = () => s_UIPackageAddRequest == null || s_UIPackageAddRequest.IsCompleted,
|
||||
Message = $"[{k_SampleDisplayName}] {k_UIPackageDisplayName} ({k_UIPackageName}) package must be installed for this sample.",
|
||||
Category = k_Category,
|
||||
CheckPredicate = () => PackageVersionUtility.IsPackageInstalled(k_UIPackageName),
|
||||
FixIt = () =>
|
||||
{
|
||||
s_UIPackageAddRequest = Client.Add(k_UIPackageName);
|
||||
if (s_UIPackageAddRequest.Error != null)
|
||||
{
|
||||
Debug.LogError($"Package installation error: {s_UIPackageAddRequest.Error}: {s_UIPackageAddRequest.Error.message}");
|
||||
}
|
||||
},
|
||||
FixItAutomatic = true,
|
||||
Error = true,
|
||||
},
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
new BuildValidationRule
|
||||
{
|
||||
IsRuleEnabled = () => PackageVersionUtility.IsPackageInstalled(k_UIPackageName),
|
||||
Message = $"[{k_SampleDisplayName}] TextMesh Pro - TMP Essentials must be installed for this sample.",
|
||||
HelpText = "Can be installed using Window > TextMeshPro > Import TMP Essential Resources or by clicking this Edit button and then Import TMP Essentials in the window that appears.",
|
||||
Category = k_Category,
|
||||
CheckPredicate = () => PackageVersionUtility.IsPackageInstalled(k_UIPackageName) && TextMeshProEssentialsInstalled(),
|
||||
FixIt = () =>
|
||||
{
|
||||
TMP_PackageResourceImporterWindow.ShowPackageImporterWindow();
|
||||
},
|
||||
FixItAutomatic = false,
|
||||
Error = true,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
[InitializeOnLoadMethod]
|
||||
static void RegisterProjectValidationRules()
|
||||
{
|
||||
// Delay evaluating conditions for issues to give time for Package Manager and UPM cache to fully initialize.
|
||||
EditorApplication.delayCall += AddRulesAndRunCheck;
|
||||
}
|
||||
|
||||
static void AddRulesAndRunCheck()
|
||||
{
|
||||
foreach (var buildTargetGroup in s_BuildTargetGroups)
|
||||
{
|
||||
BuildValidator.AddRules(buildTargetGroup, s_BuildValidationRules);
|
||||
}
|
||||
|
||||
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 bool TextMeshProEssentialsInstalled()
|
||||
{
|
||||
// Matches logic in Project Settings window, see TMP_PackageResourceImporter.cs.
|
||||
// For simplicity, we don't also copy the check if the asset needs to be updated.
|
||||
return File.Exists("Assets/TextMesh Pro/Resources/TMP Settings.asset");
|
||||
}
|
||||
|
||||
static string ToString(string packageName, string packageVersion)
|
||||
{
|
||||
return string.IsNullOrEmpty(packageVersion) ? packageName : $"{packageName}@{packageVersion}";
|
||||
}
|
||||
|
||||
static string GetImportSampleVersionMessage(string packageFolderName, string sampleDisplayName, PackageVersion version)
|
||||
{
|
||||
if (ProjectValidationUtility.SampleImportMeetsMinimumVersion(packageFolderName, sampleDisplayName, version) || !ProjectValidationUtility.HasSampleImported(packageFolderName, sampleDisplayName))
|
||||
return string.Empty;
|
||||
|
||||
return $"An older version of {sampleDisplayName} has been found. This may cause errors.";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 50fef6c461e4ab04ebeadac7b7e61185
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,36 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 336152d70bca65d49a424cea3b6cd4b8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,121 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 933dba84a98d0a94facc4dd555755984
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,114 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a09373fc8a4b6ae4e9868ff02f9e336a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,152 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2af9f13e3aa49624c9ed2bafb94c7146
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor",
|
||||
"rootNamespace": "UnityEditor.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor",
|
||||
"references": [
|
||||
"Unity.TextMeshPro",
|
||||
"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": [
|
||||
{
|
||||
"name": "com.unity.textmeshpro",
|
||||
"expression": "3.0.6",
|
||||
"define": "TEXT_MESH_PRO_PRESENT"
|
||||
},
|
||||
{
|
||||
"name": "com.unity.ugui",
|
||||
"expression": "2.0.0",
|
||||
"define": "UGUI_2_0_PRESENT"
|
||||
}
|
||||
],
|
||||
"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: -92300165, guid: e6a95303640ef3c4188ac4583185f5ba, 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: 373736265, guid: e6a95303640ef3c4188ac4583185f5ba, type: 3}
|
||||
m_ShiftCharacter: \s
|
||||
m_ShiftDisplayCharacter: shift
|
||||
m_ShiftDisplayIcon: {fileID: 373736265, guid: e6a95303640ef3c4188ac4583185f5ba, 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: 1163011659, guid: e6a95303640ef3c4188ac4583185f5ba, type: 3}
|
||||
m_ShiftCharacter: \h
|
||||
m_ShiftDisplayCharacter: Hide
|
||||
m_ShiftDisplayIcon: {fileID: 1163011659, guid: e6a95303640ef3c4188ac4583185f5ba, 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: 1365469357, guid: e6a95303640ef3c4188ac4583185f5ba, type: 3}
|
||||
m_ShiftCharacter: \e
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 1365469357, guid: e6a95303640ef3c4188ac4583185f5ba, 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: 373736265, guid: e6a95303640ef3c4188ac4583185f5ba, type: 3}
|
||||
m_ShiftCharacter: \s
|
||||
m_ShiftDisplayCharacter: shift
|
||||
m_ShiftDisplayIcon: {fileID: 373736265, guid: e6a95303640ef3c4188ac4583185f5ba, 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: 1163011659, guid: e6a95303640ef3c4188ac4583185f5ba, type: 3}
|
||||
m_ShiftCharacter: \h
|
||||
m_ShiftDisplayCharacter: Hide
|
||||
m_ShiftDisplayIcon: {fileID: 1163011659, guid: e6a95303640ef3c4188ac4583185f5ba, 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: 1365469357, guid: e6a95303640ef3c4188ac4583185f5ba, type: 3}
|
||||
m_ShiftCharacter: \e
|
||||
m_ShiftDisplayCharacter:
|
||||
m_ShiftDisplayIcon: {fileID: 1365469357, guid: e6a95303640ef3c4188ac4583185f5ba, 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,166 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-8395901325077691465
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
|
||||
version: 10
|
||||
--- !u!114 &-4171317102357418031
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
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: 639247ca83abc874e893eb93af2b5e44, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.ShaderGraph.Editor::UnityEditor.Rendering.BuiltIn.AssetVersion
|
||||
version: 0
|
||||
--- !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: -6465566751694194690, guid: 0927d29e476ce5843b1f7d2a96943c51, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
m_LockedProperties:
|
||||
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}
|
||||
- _MainTexture:
|
||||
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}
|
||||
- _NormalMap:
|
||||
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}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _BUILTIN_AlphaClip: 0
|
||||
- _BUILTIN_Blend: 0
|
||||
- _BUILTIN_CullMode: 2
|
||||
- _BUILTIN_DstBlend: 0
|
||||
- _BUILTIN_QueueControl: -1
|
||||
- _BUILTIN_QueueOffset: 0
|
||||
- _BUILTIN_SrcBlend: 1
|
||||
- _BUILTIN_Surface: 0
|
||||
- _BUILTIN_ZTest: 4
|
||||
- _BUILTIN_ZWrite: 1
|
||||
- _BUILTIN_ZWriteControl: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 0
|
||||
- _BumpScale: 1
|
||||
- _CastShadows: 1
|
||||
- _Cull: 2
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _NormalStrength: 0.2
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _QueueControl: 0
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _RimPower: 1
|
||||
- _Smoothness: 0
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _UVSec: 0
|
||||
- _WorkflowMode: 1
|
||||
- _XRMotionVectorsPass: 1
|
||||
- _ZTest: 4
|
||||
- _ZWrite: 1
|
||||
- _ZWriteControl: 0
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _NormalOffset: {r: 0, g: 0, b: 0, a: 0}
|
||||
- _NormalTiling: {r: 1, g: 1, b: 0, a: 0}
|
||||
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e6214d327b0cf3f4fbb4085685e38d0a
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,30 @@
|
||||
%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:
|
||||
- material: {fileID: 2100000, guid: e6214d327b0cf3f4fbb4085685e38d0a, type: 2}
|
||||
useSRPShaderName: 0
|
||||
scriptableRenderPipelineShaderName: Universal Render Pipeline/Simple Lit
|
||||
scriptableRenderPipelineShader: {fileID: -6465566751694194690, guid: 0927d29e476ce5843b1f7d2a96943c51, type: 3}
|
||||
useBuiltinShaderName: 0
|
||||
builtInPipelineShaderName: Standard
|
||||
builtInPipelineShader: {fileID: 4800000, guid: b24c216c4acb0094c892a61dfbbb76b4, type: 3}
|
||||
- material: {fileID: 2100000, guid: 14907cbcede41d94f99fc623c76cce72, type: 2}
|
||||
useSRPShaderName: 0
|
||||
scriptableRenderPipelineShaderName: Universal Render Pipeline/Simple Lit
|
||||
scriptableRenderPipelineShader: {fileID: -6465566751694194690, guid: 0927d29e476ce5843b1f7d2a96943c51, type: 3}
|
||||
useBuiltinShaderName: 0
|
||||
builtInPipelineShaderName: Standard
|
||||
builtInPipelineShader: {fileID: 4800000, guid: b24c216c4acb0094c892a61dfbbb76b4, type: 3}
|
||||
m_AutoRefreshShaders: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eb7e5e68631561a4a8ccf587221af3a3
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,187 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-2339064524270089798
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
|
||||
version: 10
|
||||
--- !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: -6465566751694194690, guid: 0927d29e476ce5843b1f7d2a96943c51, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords:
|
||||
- _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
||||
m_InvalidKeywords:
|
||||
- _ALPHABLEND_ON
|
||||
- _GLOSSYREFLECTIONS_OFF
|
||||
- _SPECULARHIGHLIGHTS_OFF
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
m_LockedProperties:
|
||||
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}
|
||||
- _MainTexture:
|
||||
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}
|
||||
- _NormalMap:
|
||||
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}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _BUILTIN_AlphaClip: 0
|
||||
- _BUILTIN_Blend: 0
|
||||
- _BUILTIN_CullMode: 2
|
||||
- _BUILTIN_DstBlend: 0
|
||||
- _BUILTIN_QueueControl: -1
|
||||
- _BUILTIN_QueueOffset: 0
|
||||
- _BUILTIN_SrcBlend: 1
|
||||
- _BUILTIN_Surface: 0
|
||||
- _BUILTIN_ZTest: 4
|
||||
- _BUILTIN_ZWrite: 1
|
||||
- _BUILTIN_ZWriteControl: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 0
|
||||
- _BumpScale: 1
|
||||
- _CastShadows: 1
|
||||
- _ColorMask: 15
|
||||
- _Cull: 2
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _GlossMapScale: 0
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 0
|
||||
- _Metallic: 0
|
||||
- _Mode: 2
|
||||
- _NormalStrength: 0.2
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _QueueControl: 0
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _RimPower: 1
|
||||
- _Smoothness: 0
|
||||
- _SmoothnessTextureChannel: 1
|
||||
- _SpecularHighlights: 0
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _Strength: 0.2
|
||||
- _Surface: 0
|
||||
- _UVSec: 0
|
||||
- _UseUIAlphaClip: 0
|
||||
- _WorkflowMode: 1
|
||||
- _XRMotionVectorsPass: 1
|
||||
- _ZTest: 4
|
||||
- _ZWrite: 1
|
||||
- _ZWriteControl: 0
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 0.050980393}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _NormalOffset: {r: 0, g: 0, b: 0, a: 0}
|
||||
- _NormalTiling: {r: 1, g: 1, b: 0, a: 0}
|
||||
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!114 &4855002951535939499
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
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: 639247ca83abc874e893eb93af2b5e44, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.ShaderGraph.Editor::UnityEditor.Rendering.BuiltIn.AssetVersion
|
||||
version: 0
|
||||
@@ -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:
|
||||
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:
|
||||
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:
|
||||
Binary file not shown.
@@ -0,0 +1,106 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c6984c48aed9a154294088f4265d8478
|
||||
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,538 @@
|
||||
%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: 3017688714510272995}
|
||||
- component: {fileID: 6704057089285294757}
|
||||
- component: {fileID: 5334480979369061940}
|
||||
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_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: 0}
|
||||
--- !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!114 &6704057089285294757
|
||||
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
|
||||
m_PokeFilter: {fileID: 0}
|
||||
--- !u!114 &5334480979369061940
|
||||
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: 1a82a58ed0ea7024b86e87eac0be67c3, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_FollowTransform: {fileID: 5792483888663696090}
|
||||
m_FollowerTransforms:
|
||||
- {fileID: 4749110839071018368}
|
||||
- {fileID: 5017493697046792933}
|
||||
- {fileID: 7744964415469400118}
|
||||
--- !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_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_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: 50, 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_TextWrappingMode: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 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_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}
|
||||
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_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
|
||||
@@ -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,243 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 015b50343a7cf174ebb7703245f6ba72
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,72 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -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,18 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 58528143acafcd44e93258c8e6a59dc5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 92861f72e977a244cb0be6d8410a8d99
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0f25471b9f361d64ba3aebe064d73092
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,73 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cad704687d7908f42b71e1e4516c590a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4857d519405a3874cb91aea6424e314d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,71 @@
|
||||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// This component moves a set of transforms to the same local z-axis position as a poke follow transform.
|
||||
/// This is useful for batchable objects that need to move together.
|
||||
/// </summary>
|
||||
public class KeyboardBatchFollow : MonoBehaviour
|
||||
{
|
||||
[Tooltip("The transform to follow.")]
|
||||
[SerializeField]
|
||||
Transform m_FollowTransform;
|
||||
|
||||
/// <summary>
|
||||
/// The transform to follow.
|
||||
/// </summary>
|
||||
public Transform followTransform
|
||||
{
|
||||
get => m_FollowTransform;
|
||||
set => m_FollowTransform = value;
|
||||
}
|
||||
|
||||
[Tooltip("The transforms to move to the same local z-axis position as the poke follow transform.")]
|
||||
[SerializeField]
|
||||
Transform[] m_FollowerTransforms;
|
||||
|
||||
/// <summary>
|
||||
/// The transforms to move to the same local z-axis position as the poke follow transform.
|
||||
/// </summary>
|
||||
public Transform[] followerTransforms
|
||||
{
|
||||
get => m_FollowerTransforms;
|
||||
set => m_FollowerTransforms = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
protected void OnDisable()
|
||||
{
|
||||
if (m_FollowerTransforms == null || m_FollowerTransforms.Length == 0)
|
||||
return;
|
||||
|
||||
for (var index = 0; index < m_FollowerTransforms.Length; ++index)
|
||||
{
|
||||
var follower = m_FollowerTransforms[index];
|
||||
var localPosition = follower.localPosition;
|
||||
localPosition.z = 0f;
|
||||
follower.localPosition = localPosition;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
protected void LateUpdate()
|
||||
{
|
||||
if (m_FollowTransform == null || m_FollowerTransforms == null || m_FollowerTransforms.Length == 0)
|
||||
return;
|
||||
|
||||
var followLocalZ = m_FollowTransform.localPosition.z;
|
||||
|
||||
for (var index = 0; index < m_FollowerTransforms.Length; ++index)
|
||||
{
|
||||
var follower = m_FollowerTransforms[index];
|
||||
var localPosition = follower.localPosition;
|
||||
localPosition.z = followLocalZ;
|
||||
follower.localPosition = localPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1a82a58ed0ea7024b86e87eac0be67c3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,299 @@
|
||||
using System.Collections.Generic;
|
||||
using Unity.XR.CoreUtils;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard
|
||||
{
|
||||
/// <summary>
|
||||
/// This script is used to optimize the keyboard rendering performance by updating the canvas hierarchy
|
||||
/// into separate parent transforms based on UI Grouping. This will greatly reduce the number of draw calls.
|
||||
/// Optimization is only done at runtime to prevent breaking the prefab.
|
||||
/// </summary>
|
||||
public class KeyboardOptimizer : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
bool m_OptimizeOnStart = true;
|
||||
|
||||
/// <summary>
|
||||
/// If enabled, the optimization will be called on <see cref="Start"/>.
|
||||
/// </summary>
|
||||
public bool optimizeOnStart
|
||||
{
|
||||
get => m_OptimizeOnStart;
|
||||
set => m_OptimizeOnStart = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
Transform m_BatchGroupParentTransform;
|
||||
|
||||
/// <summary>
|
||||
/// The parent transform for batch groups.
|
||||
/// </summary>
|
||||
public Transform batchGroupParentTransform
|
||||
{
|
||||
get => m_BatchGroupParentTransform;
|
||||
set => m_BatchGroupParentTransform = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
Transform m_ButtonParentTransform;
|
||||
|
||||
/// <summary>
|
||||
/// The parent transform for buttons.
|
||||
/// </summary>
|
||||
public Transform buttonParentTransform
|
||||
{
|
||||
get => m_ButtonParentTransform;
|
||||
set => m_ButtonParentTransform = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
Transform m_ImageParentTransform;
|
||||
|
||||
/// <summary>
|
||||
/// The parent transform for images.
|
||||
/// </summary>
|
||||
public Transform imageParentTransform
|
||||
{
|
||||
get => m_ImageParentTransform;
|
||||
set => m_ImageParentTransform = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
Transform m_TextParentTransform;
|
||||
|
||||
/// <summary>
|
||||
/// The parent transform for text elements.
|
||||
/// </summary>
|
||||
public Transform textParentTransform
|
||||
{
|
||||
get => m_TextParentTransform;
|
||||
set => m_TextParentTransform = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
Transform m_IconParentTransform;
|
||||
|
||||
/// <summary>
|
||||
/// The parent transform for icons.
|
||||
/// </summary>
|
||||
public Transform iconParentTransform
|
||||
{
|
||||
get => m_IconParentTransform;
|
||||
set => m_IconParentTransform = value;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
Transform m_HighlightParentTransform;
|
||||
|
||||
/// <summary>
|
||||
/// The parent transform for highlights.
|
||||
/// </summary>
|
||||
public Transform highlightParentTransform
|
||||
{
|
||||
get => m_HighlightParentTransform;
|
||||
set => m_HighlightParentTransform = value;
|
||||
}
|
||||
|
||||
bool m_IsCurrentlyOptimized;
|
||||
|
||||
/// <summary>
|
||||
/// Is the keyboard currently optimized?
|
||||
/// </summary>
|
||||
public bool isCurrentlyOptimized => m_IsCurrentlyOptimized;
|
||||
|
||||
/// <summary>
|
||||
/// Horizontal layout groups need to be disabled when optimizing the keyboard
|
||||
/// otherwise the input field will not position correctly.
|
||||
/// </summary>
|
||||
HorizontalLayoutGroup[] m_LayoutGroups;
|
||||
|
||||
/// <summary>
|
||||
/// List of key data. This is used to store information that allows us
|
||||
/// to revert the keyboard back to its original state (aka unoptimize).
|
||||
/// </summary>
|
||||
readonly List<KeyData> m_KeyData = new List<KeyData>();
|
||||
|
||||
/// <summary>
|
||||
/// See <see cref="MonoBehaviour"/>.
|
||||
/// </summary>
|
||||
protected void Start()
|
||||
{
|
||||
CheckReferences();
|
||||
Canvas.ForceUpdateCanvases();
|
||||
|
||||
if (m_OptimizeOnStart)
|
||||
Optimize();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check all the references needed for optimization.
|
||||
/// </summary>
|
||||
void CheckReferences()
|
||||
{
|
||||
if (!TryGetOrCreateTransformReferences())
|
||||
{
|
||||
Debug.LogError("Failed to get or create transform references. Optimization will not be possible.", this);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_KeyData.Count == 0)
|
||||
GetKeys();
|
||||
|
||||
if (m_LayoutGroups == null || m_LayoutGroups.Length == 0)
|
||||
GetLayoutGroups();
|
||||
}
|
||||
|
||||
bool TryGetOrCreateTransformReferences()
|
||||
{
|
||||
if (m_BatchGroupParentTransform == null)
|
||||
{
|
||||
var canvasComponent = GetComponentInChildren<Canvas>(true);
|
||||
if (canvasComponent == null)
|
||||
{
|
||||
Debug.LogError("No Canvas component found in hierarchy. Optimization will not be possible.", this);
|
||||
return false;
|
||||
}
|
||||
|
||||
m_BatchGroupParentTransform = CreateTransformAndSetParent("BatchingGroup", canvasComponent.transform);
|
||||
}
|
||||
|
||||
if (m_ButtonParentTransform == null)
|
||||
m_ButtonParentTransform = CreateTransformAndSetParent("Buttons", m_BatchGroupParentTransform);
|
||||
|
||||
if (m_ImageParentTransform == null)
|
||||
m_ImageParentTransform = CreateTransformAndSetParent("Images", m_BatchGroupParentTransform);
|
||||
|
||||
if (m_TextParentTransform == null)
|
||||
m_TextParentTransform = CreateTransformAndSetParent("Text", m_BatchGroupParentTransform);
|
||||
|
||||
if (m_IconParentTransform == null)
|
||||
m_IconParentTransform = CreateTransformAndSetParent("Icons", m_BatchGroupParentTransform);
|
||||
|
||||
if (m_HighlightParentTransform == null)
|
||||
m_HighlightParentTransform = CreateTransformAndSetParent("Highlights", m_BatchGroupParentTransform);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void GetKeys()
|
||||
{
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
XRKeyboardKey[] keys = GetComponentsInChildren<XRKeyboardKey>();
|
||||
foreach (var keyboardKey in keys)
|
||||
{
|
||||
m_KeyData.Add(new KeyData
|
||||
{
|
||||
key = keyboardKey,
|
||||
batchFollow = keyboardKey.GetComponent<KeyboardBatchFollow>(),
|
||||
parent = keyboardKey.transform.parent,
|
||||
childPosition = keyboardKey.transform.GetSiblingIndex(),
|
||||
});
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void GetLayoutGroups()
|
||||
{
|
||||
m_LayoutGroups = GetComponentsInChildren<HorizontalLayoutGroup>();
|
||||
}
|
||||
|
||||
static Transform CreateTransformAndSetParent(string name, Transform parent)
|
||||
{
|
||||
var t = new GameObject(name).transform;
|
||||
t.SetParent(parent);
|
||||
t.SetLocalPose(Pose.identity);
|
||||
t.localScale = Vector3.one;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Optimize the keyboard. This will set all the different components of each keyboard key into separate parent transforms for batching.
|
||||
/// </summary>
|
||||
public void Optimize()
|
||||
{
|
||||
m_IsCurrentlyOptimized = true;
|
||||
foreach (var layoutGroup in m_LayoutGroups)
|
||||
{
|
||||
layoutGroup.enabled = false;
|
||||
}
|
||||
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
foreach (var keyData in m_KeyData)
|
||||
{
|
||||
var key = keyData.key;
|
||||
if (key == null)
|
||||
continue;
|
||||
|
||||
key.transform.SetParent(m_ButtonParentTransform);
|
||||
|
||||
if (key.targetGraphic != null)
|
||||
key.targetGraphic.transform.SetParent(m_ImageParentTransform);
|
||||
|
||||
if (key.textComponent != null)
|
||||
key.textComponent.transform.SetParent(m_TextParentTransform);
|
||||
|
||||
if (key.iconComponent != null)
|
||||
key.iconComponent.transform.SetParent(m_IconParentTransform);
|
||||
|
||||
if (key.highlightComponent != null)
|
||||
key.highlightComponent.transform.SetParent(m_HighlightParentTransform);
|
||||
|
||||
if (keyData.batchFollow != null)
|
||||
keyData.batchFollow.enabled = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Unoptimize the keyboard. This will set the keyboard back to its original state.
|
||||
/// </summary>
|
||||
public void Unoptimize()
|
||||
{
|
||||
m_IsCurrentlyOptimized = false;
|
||||
foreach (var layoutGroup in GetComponentsInChildren<HorizontalLayoutGroup>())
|
||||
{
|
||||
layoutGroup.enabled = true;
|
||||
}
|
||||
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
foreach (var keyData in m_KeyData)
|
||||
{
|
||||
var key = keyData.key;
|
||||
if (key == null)
|
||||
continue;
|
||||
|
||||
// NOTE: Order of objects setting their parent is important for sorting order.
|
||||
key.transform.SetParent(keyData.parent);
|
||||
key.transform.SetSiblingIndex(keyData.childPosition);
|
||||
|
||||
if (key.targetGraphic != null)
|
||||
key.targetGraphic.transform.SetParent(key.transform);
|
||||
|
||||
if (key.textComponent != null)
|
||||
key.textComponent.transform.SetParent(key.targetGraphic.transform);
|
||||
|
||||
if (key.iconComponent != null)
|
||||
key.iconComponent.transform.SetParent(key.targetGraphic.transform);
|
||||
|
||||
if (key.highlightComponent != null)
|
||||
key.highlightComponent.transform.SetParent(key.targetGraphic.transform);
|
||||
|
||||
if (keyData.batchFollow != null)
|
||||
keyData.batchFollow.enabled = false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
struct KeyData
|
||||
{
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
public XRKeyboardKey key;
|
||||
#endif
|
||||
public KeyboardBatchFollow batchFollow;
|
||||
public Transform parent;
|
||||
public int childPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dfb2fb55e0f7aff4db346e2c43f69469
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,798 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f17a1b36fcb274449d030ef08f66941
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,177 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 944d8cf1c59c0e8468bcd7e2fd86fe4d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,414 @@
|
||||
#if TEXT_MESH_PRO_PRESENT || (UGUI_2_0_PRESENT && UNITY_6000_0_OR_NEWER)
|
||||
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("If true, this display will close the keyboard it is observing when this GameObject is disabled.")]
|
||||
public bool m_HideKeyboardOnDisable = true;
|
||||
|
||||
/// <summary>
|
||||
/// If true, this display will close the keyboard it is observing when this GameObject is disabled.
|
||||
/// </summary>
|
||||
/// <remarks>If this display is not observing a keyboard when disabled, this will have not effect on open keyboards.</remarks>
|
||||
public bool hideKeyboardOnDisable
|
||||
{
|
||||
get => m_HideKeyboardOnDisable;
|
||||
set => m_HideKeyboardOnDisable = 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);
|
||||
|
||||
// Close the keyboard this display is observing
|
||||
var isObservingKeyboard = m_ActiveKeyboard != null && m_ActiveKeyboard.gameObject.activeInHierarchy && m_IsActivelyObservingKeyboard;
|
||||
if (m_HideKeyboardOnDisable && isObservingKeyboard && m_ActiveKeyboard.isOpen)
|
||||
m_ActiveKeyboard.Close();
|
||||
}
|
||||
|
||||
/// <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
|
||||
if (m_InputField.stringPosition != m_ActiveKeyboard.caretPosition)
|
||||
m_InputField.stringPosition = 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
|
||||
if (m_InputField.stringPosition != m_ActiveKeyboard.caretPosition)
|
||||
m_InputField.stringPosition = 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
|
||||
if (m_InputField.stringPosition != m_ActiveKeyboard.caretPosition)
|
||||
m_InputField.stringPosition = 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user