diff --git a/EasyInteractive.meta b/EasyInteractive.meta
new file mode 100644
index 0000000..b15953f
--- /dev/null
+++ b/EasyInteractive.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bf363b9517dae5d4a994e7ee161a4b01
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/DragSubjectFocusTargetInteractCase.cs b/EasyInteractive/DragSubjectFocusTargetInteractCase.cs
index 6556dde..ea7995b 100644
--- a/EasyInteractive/DragSubjectFocusTargetInteractCase.cs
+++ b/EasyInteractive/DragSubjectFocusTargetInteractCase.cs
@@ -1,4 +1,5 @@
using System;
+using UnityEngine;
namespace HalfDog.EasyInteractive
{
@@ -24,10 +25,9 @@ namespace HalfDog.EasyInteractive
if (_isEnter)
{
_isEnter = false;
- OnExit(dragable, focusable);
+ OnExit();
_isExit = true;
}
-
return false;
}
@@ -52,8 +52,9 @@ namespace HalfDog.EasyInteractive
///
/// 退出交互情景
///
- protected virtual void OnExit(IDragable subject, IFocusable target)
+ protected virtual void OnExit()
{
}
+ protected virtual bool EndDrag=>Input.GetMouseButtonUp(0);
}
}
diff --git a/EasyInteractive/DragSubjectFocusTargetInteractCase.cs.meta b/EasyInteractive/DragSubjectFocusTargetInteractCase.cs.meta
new file mode 100644
index 0000000..7e970a3
--- /dev/null
+++ b/EasyInteractive/DragSubjectFocusTargetInteractCase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9d56e608b3c413c458b9b77deb091409
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/EasyInteractive.cs b/EasyInteractive/EasyInteractive.cs
index 09c54c9..3a9ced5 100644
--- a/EasyInteractive/EasyInteractive.cs
+++ b/EasyInteractive/EasyInteractive.cs
@@ -80,6 +80,25 @@ namespace HalfDog.EasyInteractive
public void Update()
{
+ //满足条件的InteractCase会被执行
+ //这里的满足条件指的是 交互操作与交互对象类型都要一致
+ IInteractCase activeCase = null;
+ for (int i = 0; i < _executingInteractCases.Count; i++)
+ {
+ if (_executingInteractCases[i].enable && _executingInteractCases[i].Execute(currentFocused, currentSelected, currentDraged))
+ {
+ activeCase = _executingInteractCases[i];
+ }
+ }
+ //如果当前激活的情景更改了,则把激活的情景放到列表最前方第一个进行处理
+ //这是为了在情景更改时首先执行激活情景的退出事件(如果有的话)
+ if (activeCase != null && activeCase != _currentActiveInteractCase)
+ {
+ _currentActiveInteractCase = activeCase;
+ _executingInteractCases.Remove(_currentActiveInteractCase);
+ _executingInteractCases.Insert(0, _currentActiveInteractCase);
+ }
+
//当指针处于UI上时停止对场景中交互对象的操作
if (EventSystem.current?.IsPointerOverGameObject() ?? false)
{
@@ -131,24 +150,7 @@ namespace HalfDog.EasyInteractive
}
- //满足条件的InteractCase会被执行
- //这里的满足条件指的是 交互操作与交互对象类型都要一致
- IInteractCase activeCase = null;
- for (int i = 0; i < _executingInteractCases.Count; i++)
- {
- if (_executingInteractCases[i].enable && _executingInteractCases[i].Execute(currentFocused, currentSelected, currentDraged) )
- {
- activeCase = _executingInteractCases[i];
- }
- }
- //如果当前激活的情景更改了,则把激活的情景放到列表最前方第一个进行处理
- //这是为了在情景更改时首先执行激活情景的退出事件(如果有的话)
- if (activeCase!=null && activeCase != _currentActiveInteractCase)
- {
- _currentActiveInteractCase = activeCase;
- _executingInteractCases.Remove(_currentActiveInteractCase);
- _executingInteractCases.Insert(0, _currentActiveInteractCase);
- }
+
//Debug.Log($"【Focus:{currentFocused?.interactTag.Name}】【Select:{currentSelected?.interactTag.Name}]】【Drag:{currentDraged?.interactTag.Name}】");
if (Input.GetMouseButtonDown(0) && currentFocused!=null)
@@ -189,6 +191,7 @@ namespace HalfDog.EasyInteractive
currentDraged?.ProcessDrag();
}
//Debug.Log(currentFocused?.interactTag.Name ?? "Null");
+
}
public void Reset()
{
diff --git a/EasyInteractive/EasyInteractive.cs.meta b/EasyInteractive/EasyInteractive.cs.meta
new file mode 100644
index 0000000..309c761
--- /dev/null
+++ b/EasyInteractive/EasyInteractive.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a653129659e2b5d46bb3353c8dee5684
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example.meta b/EasyInteractive/Example.meta
new file mode 100644
index 0000000..13acc86
--- /dev/null
+++ b/EasyInteractive/Example.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 703e92e40a29cb0459623b68af154c01
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Example.unity b/EasyInteractive/Example/Example.unity
new file mode 100644
index 0000000..232a476
--- /dev/null
+++ b/EasyInteractive/Example/Example.unity
@@ -0,0 +1,1370 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 12
+ m_GIWorkflowMode: 1
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &114661272
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 114661276}
+ - component: {fileID: 114661275}
+ - component: {fileID: 114661274}
+ - component: {fileID: 114661273}
+ m_Layer: 5
+ m_Name: Canvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &114661273
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 114661272}
+ 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!114 &114661274
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 114661272}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1920, y: 1080}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+ m_PresetInfoIsWorld: 0
+--- !u!223 &114661275
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 114661272}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ 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: 0
+ m_UpdateRectTransformForStandalone: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!224 &114661276
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 114661272}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1059271217}
+ - {fileID: 1625231574}
+ - {fileID: 498190671}
+ 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: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!1 &191903456
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 191903457}
+ - component: {fileID: 191903462}
+ - component: {fileID: 191903461}
+ - component: {fileID: 191903460}
+ - component: {fileID: 191903458}
+ m_Layer: 2
+ m_Name: TempSceneItem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!4 &191903457
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 191903456}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 1.5, z: 0}
+ m_LocalScale: {x: 0.5, y: 1, z: 0.5}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1396306415}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &191903458
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 191903456}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ outlineMode: 0
+ outlineColor: {r: 0.13573885, g: 1, b: 0, a: 1}
+ outlineWidth: 5
+ precomputeOutline: 0
+ bakeKeys: []
+ bakeValues: []
+--- !u!136 &191903460
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 191903456}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Radius: 0.5000001
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
+--- !u!23 &191903461
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 191903456}
+ 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: ad698dcb1f015e74585d9d1397c722bc, 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}
+--- !u!33 &191903462
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 191903456}
+ m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &399887398
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 399887400}
+ - component: {fileID: 399887399}
+ - component: {fileID: 399887401}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &399887399
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 399887398}
+ m_Enabled: 1
+ serializedVersion: 10
+ m_Type: 1
+ m_Shape: 0
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &399887400
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 399887398}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!114 &399887401
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 399887398}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Version: 3
+ m_UsePipelineSettings: 1
+ m_AdditionalLightsShadowResolutionTier: 2
+ m_LightLayerMask: 1
+ m_RenderingLayers: 1
+ m_CustomShadowLayers: 0
+ m_ShadowLayerMask: 1
+ m_ShadowRenderingLayers: 1
+ m_LightCookieSize: {x: 1, y: 1}
+ m_LightCookieOffset: {x: 0, y: 0}
+ m_SoftShadowQuality: 0
+--- !u!1 &498190670
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 498190671}
+ - component: {fileID: 498190673}
+ - component: {fileID: 498190672}
+ - component: {fileID: 498190674}
+ m_Layer: 5
+ m_Name: GhostIcon
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &498190671
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 498190670}
+ 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: 114661276}
+ 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: 128, y: 128}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &498190672
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 498190670}
+ 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: 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!222 &498190673
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 498190670}
+ m_CullTransparentMesh: 1
+--- !u!114 &498190674
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 498190670}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 637063d8e14f01b40a70497c738425bd, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!1 &670213194
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 670213198}
+ - component: {fileID: 670213197}
+ - component: {fileID: 670213196}
+ - component: {fileID: 670213195}
+ - component: {fileID: 670213199}
+ - component: {fileID: 670213200}
+ m_Layer: 0
+ m_Name: SceneItem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!136 &670213195
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 670213194}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Radius: 0.5000001
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
+--- !u!23 &670213196
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 670213194}
+ 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: fc54c2611d7066942a5b854425e8879b, 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}
+--- !u!33 &670213197
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 670213194}
+ m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &670213198
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 670213194}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 2, z: -1}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &670213199
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 670213194}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc46a818fd9886f4a89e1148cb61fb5a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ iconSprite: {fileID: 21300000, guid: d5c97c10483bdf345b6ddc0512bfada7, type: 3}
+--- !u!114 &670213200
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 670213194}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ outlineMode: 0
+ outlineColor: {r: 0.13573885, g: 1, b: 0, a: 1}
+ outlineWidth: 5
+ precomputeOutline: 0
+ bakeKeys: []
+ bakeValues: []
+--- !u!1 &1059271216
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1059271217}
+ - component: {fileID: 1059271219}
+ - component: {fileID: 1059271218}
+ - component: {fileID: 1059271220}
+ - component: {fileID: 1059271221}
+ m_Layer: 5
+ m_Name: UIItem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1059271217
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1059271216}
+ 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: 2027494078}
+ m_Father: {fileID: 114661276}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0}
+ m_AnchorMax: {x: 0.5, y: 0}
+ m_AnchoredPosition: {x: 0, y: 64}
+ m_SizeDelta: {x: 200, y: 200}
+ m_Pivot: {x: 0.5, y: 0}
+--- !u!114 &1059271218
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1059271216}
+ 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: 0.764151, g: 0.59304047, b: 0.43614277, 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: 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!222 &1059271219
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1059271216}
+ m_CullTransparentMesh: 1
+--- !u!114 &1059271220
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1059271216}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 1263b19a7ad3f9e42ae0df0e3f70afc6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ enableInteract: 1
+ icon: {fileID: 2027494079}
+--- !u!114 &1059271221
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1059271216}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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.6886792, g: 0.6886792, b: 0.6886792, 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: 1059271218}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!1 &1346634428
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1346634432}
+ - component: {fileID: 1346634431}
+ - component: {fileID: 1346634430}
+ - component: {fileID: 1346634429}
+ m_Layer: 0
+ m_Name: Ground
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &1346634429
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1346634428}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1346634430
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1346634428}
+ 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: 42aff5f63de320b49827cd66145a2119, 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}
+--- !u!33 &1346634431
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1346634428}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1346634432
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1346634428}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 10, y: 0.1, z: 10}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1396306411
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1396306415}
+ - component: {fileID: 1396306414}
+ - component: {fileID: 1396306413}
+ - component: {fileID: 1396306412}
+ - component: {fileID: 1396306416}
+ - component: {fileID: 1396306417}
+ m_Layer: 0
+ m_Name: Table
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &1396306412
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1396306411}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1396306413
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1396306411}
+ 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: b11820ee1c2f3e344ba5395f8e0fad9b, 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}
+--- !u!33 &1396306414
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1396306411}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1396306415
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1396306411}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0.5, z: -1}
+ m_LocalScale: {x: 2, y: 1, z: 2}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 191903457}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1396306416
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1396306411}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ outlineMode: 1
+ outlineColor: {r: 1, g: 0, b: 0, a: 1}
+ outlineWidth: 8
+ precomputeOutline: 0
+ bakeKeys: []
+ bakeValues: []
+--- !u!114 &1396306417
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1396306411}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2c72fe5ebd1ffbd4d9dda7c9ff7b864b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ tempItem: {fileID: 191903456}
+--- !u!1 &1625231571
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1625231574}
+ - component: {fileID: 1625231573}
+ - component: {fileID: 1625231572}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1625231572
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1625231571}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_HorizontalAxis: Horizontal
+ m_VerticalAxis: Vertical
+ m_SubmitButton: Submit
+ m_CancelButton: Cancel
+ m_InputActionsPerSecond: 10
+ m_RepeatDelay: 0.5
+ m_ForceModuleActive: 0
+--- !u!114 &1625231573
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1625231571}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &1625231574
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1625231571}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -960, y: -540, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 114661276}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2027494077
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2027494078}
+ - component: {fileID: 2027494080}
+ - component: {fileID: 2027494079}
+ m_Layer: 5
+ m_Name: Icon
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!224 &2027494078
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2027494077}
+ 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: 1059271217}
+ 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: -32, y: -32}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2027494079
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2027494077}
+ 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: 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!222 &2027494080
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2027494077}
+ m_CullTransparentMesh: 1
+--- !u!1 &2117160339
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2117160342}
+ - component: {fileID: 2117160341}
+ - component: {fileID: 2117160340}
+ - component: {fileID: 2117160343}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &2117160340
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2117160339}
+ m_Enabled: 1
+--- !u!20 &2117160341
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2117160339}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &2117160342
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2117160339}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.2588191, y: 0, z: 0, w: 0.9659258}
+ m_LocalPosition: {x: 0, y: 5, z: -8.1}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 30, y: 0, z: 0}
+--- !u!114 &2117160343
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2117160339}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_RenderShadows: 1
+ m_RequiresDepthTextureOption: 2
+ m_RequiresOpaqueTextureOption: 2
+ m_CameraType: 0
+ m_Cameras: []
+ m_RendererIndex: -1
+ m_VolumeLayerMask:
+ serializedVersion: 2
+ m_Bits: 1
+ m_VolumeTrigger: {fileID: 0}
+ m_VolumeFrameworkUpdateModeOption: 2
+ m_RenderPostProcessing: 0
+ m_Antialiasing: 0
+ m_AntialiasingQuality: 2
+ m_StopNaN: 0
+ m_Dithering: 0
+ m_ClearDepth: 1
+ m_AllowXRRendering: 1
+ m_AllowHDROutput: 1
+ m_UseScreenCoordOverride: 0
+ m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
+ m_RequiresDepthTexture: 0
+ m_RequiresColorTexture: 0
+ m_Version: 2
+ m_TaaSettings:
+ m_Quality: 3
+ m_FrameInfluence: 0.1
+ m_JitterScale: 1
+ m_MipBias: 0
+ m_VarianceClampScale: 0.9
+ m_ContrastAdaptiveSharpening: 0
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 2117160342}
+ - {fileID: 399887400}
+ - {fileID: 114661276}
+ - {fileID: 1346634432}
+ - {fileID: 1396306415}
+ - {fileID: 670213198}
diff --git a/EasyInteractive/Example/Example.unity.meta b/EasyInteractive/Example/Example.unity.meta
new file mode 100644
index 0000000..1b1587e
--- /dev/null
+++ b/EasyInteractive/Example/Example.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5aec9540f094b1b40b7fa4a6ecf30807
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Icon.png b/EasyInteractive/Example/Icon.png
new file mode 100644
index 0000000..e2ce599
Binary files /dev/null and b/EasyInteractive/Example/Icon.png differ
diff --git a/EasyInteractive/Example/Icon.png.meta b/EasyInteractive/Example/Icon.png.meta
new file mode 100644
index 0000000..54215c0
--- /dev/null
+++ b/EasyInteractive/Example/Icon.png.meta
@@ -0,0 +1,114 @@
+fileFormatVersion: 2
+guid: d5c97c10483bdf345b6ddc0512bfada7
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Materials.meta b/EasyInteractive/Example/Materials.meta
new file mode 100644
index 0000000..2bff24a
--- /dev/null
+++ b/EasyInteractive/Example/Materials.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9d24099f9ba36f04988058879dc6781d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Materials/Ground.mat b/EasyInteractive/Example/Materials/Ground.mat
new file mode 100644
index 0000000..de1b450
--- /dev/null
+++ b/EasyInteractive/Example/Materials/Ground.mat
@@ -0,0 +1,133 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 8
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Ground
+ m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, 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: []
+ m_LockedProperties:
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BaseMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _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
+ - _Blend: 0
+ - _BlendModePreserveSpecular: 1
+ - _BumpScale: 1
+ - _ClearCoatMask: 0
+ - _ClearCoatSmoothness: 0
+ - _Cull: 2
+ - _Cutoff: 0.5
+ - _DetailAlbedoMapScale: 1
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _DstBlendAlpha: 0
+ - _EnvironmentReflections: 1
+ - _GlossMapScale: 0
+ - _Glossiness: 0
+ - _GlossyReflections: 0
+ - _Metallic: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.005
+ - _QueueOffset: 0
+ - _ReceiveShadows: 1
+ - _Smoothness: 0.5
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _SrcBlendAlpha: 1
+ - _Surface: 0
+ - _WorkflowMode: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _BaseColor: {r: 0.7783019, g: 1, b: 0.95422506, a: 1}
+ - _Color: {r: 0.7783019, g: 1, b: 0.954225, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
+ m_BuildTextureStacks: []
+--- !u!114 &6246152726478536194
+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:
+ version: 7
diff --git a/EasyInteractive/Example/Materials/Ground.mat.meta b/EasyInteractive/Example/Materials/Ground.mat.meta
new file mode 100644
index 0000000..9ce7927
--- /dev/null
+++ b/EasyInteractive/Example/Materials/Ground.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 42aff5f63de320b49827cd66145a2119
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Materials/Item.mat b/EasyInteractive/Example/Materials/Item.mat
new file mode 100644
index 0000000..966267c
--- /dev/null
+++ b/EasyInteractive/Example/Materials/Item.mat
@@ -0,0 +1,133 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 8
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Item
+ m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, 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: []
+ m_LockedProperties:
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BaseMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _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
+ - _Blend: 0
+ - _BlendModePreserveSpecular: 1
+ - _BumpScale: 1
+ - _ClearCoatMask: 0
+ - _ClearCoatSmoothness: 0
+ - _Cull: 2
+ - _Cutoff: 0.5
+ - _DetailAlbedoMapScale: 1
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _DstBlendAlpha: 0
+ - _EnvironmentReflections: 1
+ - _GlossMapScale: 0
+ - _Glossiness: 0
+ - _GlossyReflections: 0
+ - _Metallic: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.005
+ - _QueueOffset: 0
+ - _ReceiveShadows: 1
+ - _Smoothness: 0.5
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _SrcBlendAlpha: 1
+ - _Surface: 0
+ - _WorkflowMode: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _BaseColor: {r: 1, g: 0.495283, b: 0.5359876, a: 1}
+ - _Color: {r: 1, g: 0.495283, b: 0.5359876, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
+ m_BuildTextureStacks: []
+--- !u!114 &2952506703872078247
+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:
+ version: 7
diff --git a/EasyInteractive/Example/Materials/Item.mat.meta b/EasyInteractive/Example/Materials/Item.mat.meta
new file mode 100644
index 0000000..560d836
--- /dev/null
+++ b/EasyInteractive/Example/Materials/Item.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fc54c2611d7066942a5b854425e8879b
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Materials/Table.mat b/EasyInteractive/Example/Materials/Table.mat
new file mode 100644
index 0000000..a82b01b
--- /dev/null
+++ b/EasyInteractive/Example/Materials/Table.mat
@@ -0,0 +1,133 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &-722990847617551464
+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:
+ version: 7
+--- !u!21 &2100000
+Material:
+ serializedVersion: 8
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Table
+ m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, 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: []
+ m_LockedProperties:
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BaseMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _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
+ - _Blend: 0
+ - _BlendModePreserveSpecular: 1
+ - _BumpScale: 1
+ - _ClearCoatMask: 0
+ - _ClearCoatSmoothness: 0
+ - _Cull: 2
+ - _Cutoff: 0.5
+ - _DetailAlbedoMapScale: 1
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _DstBlendAlpha: 0
+ - _EnvironmentReflections: 1
+ - _GlossMapScale: 0
+ - _Glossiness: 0
+ - _GlossyReflections: 0
+ - _Metallic: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.005
+ - _QueueOffset: 0
+ - _ReceiveShadows: 1
+ - _Smoothness: 0.5
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _SrcBlendAlpha: 1
+ - _Surface: 0
+ - _WorkflowMode: 1
+ - _ZWrite: 1
+ m_Colors:
+ - _BaseColor: {r: 0.3679245, g: 0.24217868, b: 0.15445887, a: 1}
+ - _Color: {r: 0.36792448, g: 0.24217865, b: 0.15445882, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
+ m_BuildTextureStacks: []
diff --git a/EasyInteractive/Example/Materials/Table.mat.meta b/EasyInteractive/Example/Materials/Table.mat.meta
new file mode 100644
index 0000000..2592e63
--- /dev/null
+++ b/EasyInteractive/Example/Materials/Table.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b11820ee1c2f3e344ba5395f8e0fad9b
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Materials/TempSceneItem.mat b/EasyInteractive/Example/Materials/TempSceneItem.mat
new file mode 100644
index 0000000..2c354e0
--- /dev/null
+++ b/EasyInteractive/Example/Materials/TempSceneItem.mat
@@ -0,0 +1,137 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 8
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: TempSceneItem
+ m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
+ m_Parent: {fileID: 0}
+ m_ModifiedSerializedProperties: 0
+ m_ValidKeywords:
+ - _ALPHAPREMULTIPLY_ON
+ - _SURFACE_TYPE_TRANSPARENT
+ m_InvalidKeywords: []
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 3000
+ stringTagMap:
+ RenderType: Transparent
+ disabledShaderPasses:
+ - DepthOnly
+ - SHADOWCASTER
+ m_LockedProperties:
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BaseMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _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
+ - _Blend: 0
+ - _BlendModePreserveSpecular: 1
+ - _BumpScale: 1
+ - _ClearCoatMask: 0
+ - _ClearCoatSmoothness: 0
+ - _Cull: 2
+ - _Cutoff: 0.5
+ - _DetailAlbedoMapScale: 1
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 10
+ - _DstBlendAlpha: 10
+ - _EnvironmentReflections: 1
+ - _GlossMapScale: 0
+ - _Glossiness: 0
+ - _GlossyReflections: 0
+ - _Metallic: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.005
+ - _QueueOffset: 0
+ - _ReceiveShadows: 1
+ - _Smoothness: 0
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _SrcBlendAlpha: 1
+ - _Surface: 1
+ - _WorkflowMode: 1
+ - _ZWrite: 0
+ m_Colors:
+ - _BaseColor: {r: 0, g: 1, b: 0.029119251, a: 0.20392157}
+ - _Color: {r: 0, g: 1, b: 0.029119251, a: 0.20392157}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
+ m_BuildTextureStacks: []
+--- !u!114 &4145539594127847447
+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:
+ version: 7
diff --git a/EasyInteractive/Example/Materials/TempSceneItem.mat.meta b/EasyInteractive/Example/Materials/TempSceneItem.mat.meta
new file mode 100644
index 0000000..d2d5da8
--- /dev/null
+++ b/EasyInteractive/Example/Materials/TempSceneItem.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ad698dcb1f015e74585d9d1397c722bc
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline.meta b/EasyInteractive/Example/QuickOutline.meta
new file mode 100644
index 0000000..d40473b
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 24efc298397e85845b767fb4a0c5299c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Readme.txt b/EasyInteractive/Example/QuickOutline/Readme.txt
new file mode 100644
index 0000000..183ae24
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Readme.txt
@@ -0,0 +1,37 @@
+Quick Outline
+=============
+
+Developed by Chris Nolet (c) 2018
+
+
+Instructions
+------------
+
+To add an outline to an object, drag-and-drop the Outline.cs
+script onto the object. The outline materials will be loaded
+at runtime.
+
+You can also add outlines programmatically with:
+
+ var outline = gameObject.AddComponent();
+
+ outline.OutlineMode = Outline.Mode.OutlineAll;
+ outline.OutlineColor = Color.yellow;
+ outline.OutlineWidth = 5f;
+
+The outline script does a small amount of work in Awake().
+For best results, use outline.enabled to toggle the outline.
+Avoid removing and re-adding the component if possible.
+
+For large meshes, you may also like to enable 'Precompute
+Outline' in the editor. This will reduce the amount of work
+performed in Awake().
+
+
+Troubleshooting
+---------------
+
+If the outline appears off-center, please try the following:
+
+1. Set 'Read/Write Enabled' on each model's import settings.
+2. Disable 'Optimize Mesh Data' in the player settings.
diff --git a/EasyInteractive/Example/QuickOutline/Readme.txt.meta b/EasyInteractive/Example/QuickOutline/Readme.txt.meta
new file mode 100644
index 0000000..56560a7
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Readme.txt.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 5933bfd39d7a5b843a0ed821f85bca19
+timeCreated: 1522619008
+licenseType: Store
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Resources.meta b/EasyInteractive/Example/QuickOutline/Resources.meta
new file mode 100644
index 0000000..6135a95
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 70fd40674751a8042a8b9b2e8d9f915f
+folderAsset: yes
+timeCreated: 1522559128
+licenseType: Store
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Materials.meta b/EasyInteractive/Example/QuickOutline/Resources/Materials.meta
new file mode 100644
index 0000000..2508b0f
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Materials.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 80ac8e52d3c31a94babd161e86bc6b97
+folderAsset: yes
+timeCreated: 1522559139
+licenseType: Store
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineFill.mat b/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineFill.mat
new file mode 100644
index 0000000..cb02164
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineFill.mat
@@ -0,0 +1,25 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: OutlineFill
+ m_Shader: {fileID: 4800000, guid: 4e76d4023d7e0411297c670f878973e2, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs: []
+ m_Floats:
+ - _OutlineWidth: 2
+ - _ZTest: 8
+ m_Colors:
+ - _OutlineColor: {r: 1, g: 1, b: 1, a: 1}
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineFill.mat.meta b/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineFill.mat.meta
new file mode 100644
index 0000000..5ea7f69
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineFill.mat.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 311313efa011949e98b6761d652ad13c
+timeCreated: 1520576285
+licenseType: Store
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineMask.mat b/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineMask.mat
new file mode 100644
index 0000000..80d49fa
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineMask.mat
@@ -0,0 +1,23 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: OutlineMask
+ m_Shader: {fileID: 4800000, guid: 341b058cd7dee4f5cba5cc59a513619e, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs: []
+ m_Floats:
+ - _ZTest: 8
+ m_Colors: []
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineMask.mat.meta b/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineMask.mat.meta
new file mode 100644
index 0000000..0f5ed27
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Materials/OutlineMask.mat.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 106f3ff43a17d4967a2b64c7a92e49ec
+timeCreated: 1520576276
+licenseType: Store
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Shaders.meta b/EasyInteractive/Example/QuickOutline/Resources/Shaders.meta
new file mode 100644
index 0000000..91118d5
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Shaders.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6a63caa2b0e993043a42c11f35ff2d1a
+folderAsset: yes
+timeCreated: 1522559134
+licenseType: Store
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineFill.shader b/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineFill.shader
new file mode 100644
index 0000000..f546473
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineFill.shader
@@ -0,0 +1,81 @@
+//
+// OutlineFill.shader
+// QuickOutline
+//
+// Created by Chris Nolet on 2/21/18.
+// Copyright © 2018 Chris Nolet. All rights reserved.
+//
+
+Shader "Custom/Outline Fill" {
+ Properties {
+ [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
+
+ _OutlineColor("Outline Color", Color) = (1, 1, 1, 1)
+ _OutlineWidth("Outline Width", Range(0, 10)) = 2
+ }
+
+ SubShader {
+ Tags {
+ "Queue" = "Transparent+110"
+ "RenderType" = "Transparent"
+ "DisableBatching" = "True"
+ }
+
+ Pass {
+ Name "Fill"
+ Cull Off
+ ZTest [_ZTest]
+ ZWrite Off
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask RGB
+
+ Stencil {
+ Ref 1
+ Comp NotEqual
+ }
+
+ CGPROGRAM
+ #include "UnityCG.cginc"
+
+ #pragma vertex vert
+ #pragma fragment frag
+
+ struct appdata {
+ float4 vertex : POSITION;
+ float3 normal : NORMAL;
+ float3 smoothNormal : TEXCOORD3;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ struct v2f {
+ float4 position : SV_POSITION;
+ fixed4 color : COLOR;
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ uniform fixed4 _OutlineColor;
+ uniform float _OutlineWidth;
+
+ v2f vert(appdata input) {
+ v2f output;
+
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
+
+ float3 normal = any(input.smoothNormal) ? input.smoothNormal : input.normal;
+ float3 viewPosition = UnityObjectToViewPos(input.vertex);
+ float3 viewNormal = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, normal));
+
+ output.position = UnityViewToClipPos(viewPosition + viewNormal * -viewPosition.z * _OutlineWidth / 1000.0);
+ output.color = _OutlineColor;
+
+ return output;
+ }
+
+ fixed4 frag(v2f input) : SV_Target {
+ return input.color;
+ }
+ ENDCG
+ }
+ }
+}
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineFill.shader.meta b/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineFill.shader.meta
new file mode 100644
index 0000000..408fa9a
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineFill.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 4e76d4023d7e0411297c670f878973e2
+timeCreated: 1520575782
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineMask.shader b/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineMask.shader
new file mode 100644
index 0000000..530d8c0
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineMask.shader
@@ -0,0 +1,33 @@
+//
+// OutlineMask.shader
+// QuickOutline
+//
+// Created by Chris Nolet on 2/21/18.
+// Copyright © 2018 Chris Nolet. All rights reserved.
+//
+
+Shader "Custom/Outline Mask" {
+ Properties {
+ [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
+ }
+
+ SubShader {
+ Tags {
+ "Queue" = "Transparent+100"
+ "RenderType" = "Transparent"
+ }
+
+ Pass {
+ Name "Mask"
+ Cull Off
+ ZTest [_ZTest]
+ ZWrite Off
+ ColorMask 0
+
+ Stencil {
+ Ref 1
+ Pass Replace
+ }
+ }
+ }
+}
diff --git a/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineMask.shader.meta b/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineMask.shader.meta
new file mode 100644
index 0000000..38db7c5
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Resources/Shaders/OutlineMask.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 341b058cd7dee4f5cba5cc59a513619e
+timeCreated: 1520575773
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Scripts.meta b/EasyInteractive/Example/QuickOutline/Scripts.meta
new file mode 100644
index 0000000..2f7793d
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Scripts.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3ddbd65d69a9f0b48bab4fe96a1fe099
+folderAsset: yes
+timeCreated: 1522559122
+licenseType: Store
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/QuickOutline/Scripts/Outline.cs b/EasyInteractive/Example/QuickOutline/Scripts/Outline.cs
new file mode 100644
index 0000000..26d8788
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Scripts/Outline.cs
@@ -0,0 +1,309 @@
+//
+// Outline.cs
+// QuickOutline
+//
+// Created by Chris Nolet on 3/30/18.
+// Copyright © 2018 Chris Nolet. All rights reserved.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+[DisallowMultipleComponent]
+
+public class Outline : MonoBehaviour {
+ private static HashSet registeredMeshes = new HashSet();
+
+ public enum Mode {
+ OutlineAll,
+ OutlineVisible,
+ OutlineHidden,
+ OutlineAndSilhouette,
+ SilhouetteOnly
+ }
+
+ public Mode OutlineMode {
+ get { return outlineMode; }
+ set {
+ outlineMode = value;
+ needsUpdate = true;
+ }
+ }
+
+ public Color OutlineColor {
+ get { return outlineColor; }
+ set {
+ outlineColor = value;
+ needsUpdate = true;
+ }
+ }
+
+ public float OutlineWidth {
+ get { return outlineWidth; }
+ set {
+ outlineWidth = value;
+ needsUpdate = true;
+ }
+ }
+
+ [Serializable]
+ private class ListVector3 {
+ public List data;
+ }
+
+ [SerializeField]
+ private Mode outlineMode;
+
+ [SerializeField]
+ private Color outlineColor = Color.white;
+
+ [SerializeField, Range(0f, 10f)]
+ private float outlineWidth = 2f;
+
+ [Header("Optional")]
+
+ [SerializeField, Tooltip("Precompute enabled: Per-vertex calculations are performed in the editor and serialized with the object. "
+ + "Precompute disabled: Per-vertex calculations are performed at runtime in Awake(). This may cause a pause for large meshes.")]
+ private bool precomputeOutline;
+
+ [SerializeField, HideInInspector]
+ private List bakeKeys = new List();
+
+ [SerializeField, HideInInspector]
+ private List bakeValues = new List();
+
+ private Renderer[] renderers;
+ private Material outlineMaskMaterial;
+ private Material outlineFillMaterial;
+
+ private bool needsUpdate;
+
+ void Awake() {
+
+ // Cache renderers
+ renderers = GetComponentsInChildren();
+
+ // Instantiate outline materials
+ outlineMaskMaterial = Instantiate(Resources.Load(@"Materials/OutlineMask"));
+ outlineFillMaterial = Instantiate(Resources.Load(@"Materials/OutlineFill"));
+
+ outlineMaskMaterial.name = "OutlineMask (Instance)";
+ outlineFillMaterial.name = "OutlineFill (Instance)";
+
+ // Retrieve or generate smooth normals
+ LoadSmoothNormals();
+
+ // Apply material properties immediately
+ needsUpdate = true;
+ }
+
+ void OnEnable() {
+ foreach (var renderer in renderers) {
+
+ // Append outline shaders
+ var materials = renderer.sharedMaterials.ToList();
+
+ materials.Add(outlineMaskMaterial);
+ materials.Add(outlineFillMaterial);
+
+ renderer.materials = materials.ToArray();
+ }
+ }
+
+ void OnValidate() {
+
+ // Update material properties
+ needsUpdate = true;
+
+ // Clear cache when baking is disabled or corrupted
+ if (!precomputeOutline && bakeKeys.Count != 0 || bakeKeys.Count != bakeValues.Count) {
+ bakeKeys.Clear();
+ bakeValues.Clear();
+ }
+
+ // Generate smooth normals when baking is enabled
+ if (precomputeOutline && bakeKeys.Count == 0) {
+ Bake();
+ }
+ }
+
+ void Update() {
+ if (needsUpdate) {
+ needsUpdate = false;
+
+ UpdateMaterialProperties();
+ }
+ }
+
+ void OnDisable() {
+ foreach (var renderer in renderers) {
+
+ // Remove outline shaders
+ var materials = renderer.sharedMaterials.ToList();
+
+ materials.Remove(outlineMaskMaterial);
+ materials.Remove(outlineFillMaterial);
+
+ renderer.materials = materials.ToArray();
+ }
+ }
+
+ void OnDestroy() {
+
+ // Destroy material instances
+ Destroy(outlineMaskMaterial);
+ Destroy(outlineFillMaterial);
+ }
+
+ void Bake() {
+
+ // Generate smooth normals for each mesh
+ var bakedMeshes = new HashSet();
+
+ foreach (var meshFilter in GetComponentsInChildren()) {
+
+ // Skip duplicates
+ if (!bakedMeshes.Add(meshFilter.sharedMesh)) {
+ continue;
+ }
+
+ // Serialize smooth normals
+ var smoothNormals = SmoothNormals(meshFilter.sharedMesh);
+
+ bakeKeys.Add(meshFilter.sharedMesh);
+ bakeValues.Add(new ListVector3() { data = smoothNormals });
+ }
+ }
+
+ void LoadSmoothNormals() {
+
+ // Retrieve or generate smooth normals
+ foreach (var meshFilter in GetComponentsInChildren()) {
+
+ // Skip if smooth normals have already been adopted
+ if (!registeredMeshes.Add(meshFilter.sharedMesh)) {
+ continue;
+ }
+
+ // Retrieve or generate smooth normals
+ var index = bakeKeys.IndexOf(meshFilter.sharedMesh);
+ var smoothNormals = (index >= 0) ? bakeValues[index].data : SmoothNormals(meshFilter.sharedMesh);
+
+ // Store smooth normals in UV3
+ meshFilter.sharedMesh.SetUVs(3, smoothNormals);
+
+ // Combine submeshes
+ var renderer = meshFilter.GetComponent();
+
+ if (renderer != null) {
+ CombineSubmeshes(meshFilter.sharedMesh, renderer.sharedMaterials);
+ }
+ }
+
+ // Clear UV3 on skinned mesh renderers
+ foreach (var skinnedMeshRenderer in GetComponentsInChildren()) {
+
+ // Skip if UV3 has already been reset
+ if (!registeredMeshes.Add(skinnedMeshRenderer.sharedMesh)) {
+ continue;
+ }
+
+ // Clear UV3
+ skinnedMeshRenderer.sharedMesh.uv4 = new Vector2[skinnedMeshRenderer.sharedMesh.vertexCount];
+
+ // Combine submeshes
+ CombineSubmeshes(skinnedMeshRenderer.sharedMesh, skinnedMeshRenderer.sharedMaterials);
+ }
+ }
+
+ List SmoothNormals(Mesh mesh) {
+
+ // Group vertices by location
+ var groups = mesh.vertices.Select((vertex, index) => new KeyValuePair(vertex, index)).GroupBy(pair => pair.Key);
+
+ // Copy normals to a new list
+ var smoothNormals = new List(mesh.normals);
+
+ // Average normals for grouped vertices
+ foreach (var group in groups) {
+
+ // Skip single vertices
+ if (group.Count() == 1) {
+ continue;
+ }
+
+ // Calculate the average normal
+ var smoothNormal = Vector3.zero;
+
+ foreach (var pair in group) {
+ smoothNormal += smoothNormals[pair.Value];
+ }
+
+ smoothNormal.Normalize();
+
+ // Assign smooth normal to each vertex
+ foreach (var pair in group) {
+ smoothNormals[pair.Value] = smoothNormal;
+ }
+ }
+
+ return smoothNormals;
+ }
+
+ void CombineSubmeshes(Mesh mesh, Material[] materials) {
+
+ // Skip meshes with a single submesh
+ if (mesh.subMeshCount == 1) {
+ return;
+ }
+
+ // Skip if submesh count exceeds material count
+ if (mesh.subMeshCount > materials.Length) {
+ return;
+ }
+
+ // Append combined submesh
+ mesh.subMeshCount++;
+ mesh.SetTriangles(mesh.triangles, mesh.subMeshCount - 1);
+ }
+
+ void UpdateMaterialProperties() {
+
+ // Apply properties according to mode
+ outlineFillMaterial.SetColor("_OutlineColor", outlineColor);
+
+ switch (outlineMode) {
+ case Mode.OutlineAll:
+ outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+ outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+ outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
+ break;
+
+ case Mode.OutlineVisible:
+ outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+ outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
+ outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
+ break;
+
+ case Mode.OutlineHidden:
+ outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+ outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
+ outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
+ break;
+
+ case Mode.OutlineAndSilhouette:
+ outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
+ outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+ outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
+ break;
+
+ case Mode.SilhouetteOnly:
+ outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
+ outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
+ outlineFillMaterial.SetFloat("_OutlineWidth", 0f);
+ break;
+ }
+ }
+}
diff --git a/EasyInteractive/Example/QuickOutline/Scripts/Outline.cs.meta b/EasyInteractive/Example/QuickOutline/Scripts/Outline.cs.meta
new file mode 100644
index 0000000..ffa272d
--- /dev/null
+++ b/EasyInteractive/Example/QuickOutline/Scripts/Outline.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 5fea29bb7c508c244a1f805a5fd3fc4d
+timeCreated: 1522369084
+licenseType: Store
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Scripts.meta b/EasyInteractive/Example/Scripts.meta
new file mode 100644
index 0000000..ae75d30
--- /dev/null
+++ b/EasyInteractive/Example/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b1ead22abd8bf1e4e9a2d25e774b8ab0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Scripts/DragToScene.cs b/EasyInteractive/Example/Scripts/DragToScene.cs
new file mode 100644
index 0000000..72a18aa
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/DragToScene.cs
@@ -0,0 +1,37 @@
+using HalfDog.EasyInteractive;
+using System;
+using UnityEngine;
+
+[InteractCase(typeof(UIItem), typeof(Table))]
+public class DragToScene : DragSubjectFocusTargetInteractCase
+{
+ private UIItem uiItem;
+ private Table table;
+ public DragToScene(Type subject, Type target) : base(subject, target)
+ {
+ }
+
+ protected override void OnEnter(IDragable subject, IFocusable target)
+ {
+ Debug.Log("Enter Case");
+ uiItem = (subject as UIItem);
+ table = (target as Table);
+ table.tempItem.gameObject.SetActive(true);
+ }
+
+ protected override void OnExecute(IDragable subject, IFocusable target)
+ {
+ if (Input.GetMouseButtonUp(0))
+ {
+ GameObject.FindObjectOfType(true).gameObject.SetActive(true);
+ Debug.Log("Execute");
+ }
+ }
+
+ protected override void OnExit()
+ {
+ Debug.Log("Exit Case");
+ table.tempItem.gameObject.SetActive(false);
+ uiItem.icon.gameObject.SetActive(false);
+ }
+}
diff --git a/EasyInteractive/Example/Scripts/DragToScene.cs.meta b/EasyInteractive/Example/Scripts/DragToScene.cs.meta
new file mode 100644
index 0000000..4543445
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/DragToScene.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 87ee89c2a3f8df54096b48ac81c7fdae
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Scripts/DragToUI.cs b/EasyInteractive/Example/Scripts/DragToUI.cs
new file mode 100644
index 0000000..f2b82cd
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/DragToUI.cs
@@ -0,0 +1,34 @@
+using HalfDog.EasyInteractive;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Unity.VisualScripting;
+using UnityEngine;
+
+[InteractCase(typeof(SceneItem), typeof(UIItem))]
+public class DragToUI : DragSubjectFocusTargetInteractCase
+{
+ private SceneItem sceneItem;
+ public DragToUI(Type subject, Type target) : base(subject, target)
+ {
+ }
+ protected override void OnEnter(IDragable subject, IFocusable target)
+ {
+ Debug.Log("Enter Case");
+ sceneItem = (subject as SceneItem);
+ }
+ protected override void OnExecute(IDragable subject, IFocusable target)
+ {
+ if (EndDrag)
+ {
+ Debug.Log("Execute");
+ (target as UIItem).icon.gameObject.SetActive(true);
+ (target as UIItem).icon.sprite = sceneItem.iconSprite;
+ }
+ }
+ protected override void OnExit()
+ {
+ Debug.Log("Exit Case");
+ sceneItem.gameObject.SetActive(false);
+ }
+}
diff --git a/EasyInteractive/Example/Scripts/DragToUI.cs.meta b/EasyInteractive/Example/Scripts/DragToUI.cs.meta
new file mode 100644
index 0000000..9366d02
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/DragToUI.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: de97bca2efbdafb4884428172f199c75
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Scripts/GhostIcon.cs b/EasyInteractive/Example/Scripts/GhostIcon.cs
new file mode 100644
index 0000000..8c451fc
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/GhostIcon.cs
@@ -0,0 +1,40 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+public class GhostIcon : MonoBehaviour
+{
+ public static GhostIcon Instance;
+ private Image _icon;
+ private bool _isShow = false;
+
+ private void Awake()
+ {
+ Instance = this;
+ }
+ private void Start()
+ {
+ _icon = GetComponent();
+ gameObject.SetActive(false);
+ }
+ private void Update()
+ {
+ if (_isShow)
+ {
+ transform.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z);
+ }
+ }
+ public void ShowGhostIcon(Sprite sprite)
+ {
+ if (sprite == null) return;
+ transform.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z);
+ _icon.sprite = sprite;
+ gameObject.SetActive(true);
+ _isShow = true;
+ }
+
+ public void HideGhostIcon()
+ {
+ _isShow = false;
+ gameObject.SetActive(false);
+ }
+}
diff --git a/EasyInteractive/Example/Scripts/GhostIcon.cs.meta b/EasyInteractive/Example/Scripts/GhostIcon.cs.meta
new file mode 100644
index 0000000..2731955
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/GhostIcon.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 637063d8e14f01b40a70497c738425bd
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Scripts/SceneItem.cs b/EasyInteractive/Example/Scripts/SceneItem.cs
new file mode 100644
index 0000000..db0e767
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/SceneItem.cs
@@ -0,0 +1,43 @@
+using HalfDog.EasyInteractive;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class SceneItem : MonoBehaviour, IDragable
+{
+ public Sprite iconSprite;
+ public Type interactTag => typeof(SceneItem);
+ public bool enableDrag => true;
+ public bool enableFocus => true;
+ private Outline _outline;
+
+ private void Awake()
+ {
+ _outline = GetComponent();
+ }
+
+ public void OnFocus()
+ {
+ _outline.enabled = true;
+ }
+ public void EndFocus()
+ {
+ _outline.enabled = false;
+ }
+ public void OnDrag()
+ {
+ Debug.Log("Begin Drag");
+ GhostIcon.Instance.ShowGhostIcon(iconSprite);
+ gameObject.SetActive(false);
+ }
+ public void ProcessDrag()
+ {
+ }
+ public void EndDrag()
+ {
+ Debug.Log("End Drag");
+ GhostIcon.Instance.HideGhostIcon();
+ gameObject.SetActive(true);
+ }
+}
diff --git a/EasyInteractive/Example/Scripts/SceneItem.cs.meta b/EasyInteractive/Example/Scripts/SceneItem.cs.meta
new file mode 100644
index 0000000..10327d8
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/SceneItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dc46a818fd9886f4a89e1148cb61fb5a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Scripts/Table.cs b/EasyInteractive/Example/Scripts/Table.cs
new file mode 100644
index 0000000..2ba19fa
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/Table.cs
@@ -0,0 +1,23 @@
+using System;
+using UnityEngine;
+using HalfDog.EasyInteractive;
+
+public class Table : MonoBehaviour, IFocusable
+{
+ public GameObject tempItem;
+ public Type interactTag => typeof(Table);
+ public bool enableFocus => true;
+ private Outline _outline;
+ private void Awake()
+ {
+ _outline = GetComponent();
+ }
+ public void OnFocus()
+ {
+ _outline.enabled = true;
+ }
+ public void EndFocus()
+ {
+ _outline.enabled = false;
+ }
+}
diff --git a/EasyInteractive/Example/Scripts/Table.cs.meta b/EasyInteractive/Example/Scripts/Table.cs.meta
new file mode 100644
index 0000000..ea11f47
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/Table.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2c72fe5ebd1ffbd4d9dda7c9ff7b864b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/Example/Scripts/UIItem.cs b/EasyInteractive/Example/Scripts/UIItem.cs
new file mode 100644
index 0000000..2698572
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/UIItem.cs
@@ -0,0 +1,35 @@
+using HalfDog.EasyInteractive;
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class UIItem : InteractableUIElement,IDragable
+{
+ public Image icon;
+ public Type interactTag => typeof(UIItem);
+ public bool enableFocus => true;
+ public bool enableDrag => true;
+
+ public void OnFocus()
+ {
+ }
+ public void EndFocus()
+ {
+ }
+ public void OnDrag()
+ {
+ Debug.Log("Begin Drag");
+ if (!icon.gameObject.activeSelf) return;
+ GhostIcon.Instance.ShowGhostIcon(icon.sprite);
+ icon.gameObject.SetActive(false);
+ }
+ public void ProcessDrag()
+ {
+ }
+ public void EndDrag()
+ {
+ Debug.Log("End Drag");
+ GhostIcon.Instance.HideGhostIcon();
+ icon.gameObject.SetActive(true);
+ }
+}
diff --git a/EasyInteractive/Example/Scripts/UIItem.cs.meta b/EasyInteractive/Example/Scripts/UIItem.cs.meta
new file mode 100644
index 0000000..32a11ef
--- /dev/null
+++ b/EasyInteractive/Example/Scripts/UIItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1263b19a7ad3f9e42ae0df0e3f70afc6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/GameMonoUpdater.cs.meta b/EasyInteractive/GameMonoUpdater.cs.meta
new file mode 100644
index 0000000..1ed793e
--- /dev/null
+++ b/EasyInteractive/GameMonoUpdater.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 47c5ea27fffe88a49991f6e452361d84
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/ICanUseGameMonoUpdater.cs.meta b/EasyInteractive/ICanUseGameMonoUpdater.cs.meta
new file mode 100644
index 0000000..c458b25
--- /dev/null
+++ b/EasyInteractive/ICanUseGameMonoUpdater.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bf5aabd43ba1b444e98409d42623a191
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/IInteractCase.cs.meta b/EasyInteractive/IInteractCase.cs.meta
new file mode 100644
index 0000000..0b80ea4
--- /dev/null
+++ b/EasyInteractive/IInteractCase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 60c245106e3bde84d92a670377c41e97
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/IInteractable.cs.meta b/EasyInteractive/IInteractable.cs.meta
new file mode 100644
index 0000000..6abfaaa
--- /dev/null
+++ b/EasyInteractive/IInteractable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d962775d4e4d55841b7e09058d74e960
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/InteractCaseAttribute.cs.meta b/EasyInteractive/InteractCaseAttribute.cs.meta
new file mode 100644
index 0000000..8506d4c
--- /dev/null
+++ b/EasyInteractive/InteractCaseAttribute.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 125af9525bead8d42b9ec48a79432e75
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EasyInteractive/InteractableUIElement.cs.meta b/EasyInteractive/InteractableUIElement.cs.meta
new file mode 100644
index 0000000..d015763
--- /dev/null
+++ b/EasyInteractive/InteractableUIElement.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: af6affaf0bf500d4899e52282d8608eb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/README.md.meta b/README.md.meta
new file mode 100644
index 0000000..abfdb2c
--- /dev/null
+++ b/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 1732134d2c83cf64ebaada6f5a377299
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: