diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/AvatarControl/FaceController.prefab b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/AvatarControl/FaceController.prefab index a9f2748e..f86196bd 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/AvatarControl/FaceController.prefab +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/AvatarControl/FaceController.prefab @@ -12,7 +12,6 @@ GameObject: - component: {fileID: 5395904245375780253} - component: {fileID: 3748028266611161169} - component: {fileID: 8701057551241780110} - - component: {fileID: 7797473119978373343} - component: {fileID: 5187863769921554747} - component: {fileID: 6241239198292537160} - component: {fileID: 6186883453983643772} @@ -53,7 +52,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 528308ecc8af46647b68473c1f06c11b, type: 3} m_Name: m_EditorClassIdentifier: - blendShapeInitializer: {fileID: 7797473119978373343} lipSyncContext: {fileID: 8501418776315766171} lipSyncIntegrator: {fileID: 6125060425342205146} autoBlink: {fileID: 2335327280039312852} @@ -87,18 +85,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d80971aa6a886324db1bfcf2a2c34bd5, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &7797473119978373343 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3748028266611161173} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a125f000c2a422b4c88a36e60296385a, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!114 &5187863769921554747 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Core/CoreLogics.prefab b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Core/CoreLogics.prefab index 3915cf8c..e756d983 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Core/CoreLogics.prefab +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Core/CoreLogics.prefab @@ -30,7 +30,6 @@ Transform: m_Children: - {fileID: 4403582645890784493} - {fileID: 4403582645735969391} - - {fileID: 5952249983603830923} - {fileID: 7502228934553232097} m_Father: {fileID: 0} m_RootOrder: 0 @@ -87,46 +86,6 @@ Transform: type: 3} m_PrefabInstance: {fileID: 5203461303792189549} m_PrefabAsset: {fileID: 0} ---- !u!1001 &6280833885169497037 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 914461298883566549} - m_Modifications: - - target: {fileID: 410006747659649862, guid: 48e4e24e48cf43543ab508e6a42a1591, - type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 410006747659649862, guid: 48e4e24e48cf43543ab508e6a42a1591, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 410006747659649862, guid: 48e4e24e48cf43543ab508e6a42a1591, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 410006747659649862, guid: 48e4e24e48cf43543ab508e6a42a1591, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 853238483135863806, guid: 48e4e24e48cf43543ab508e6a42a1591, - type: 3} - propertyPath: m_Name - value: ReplacedVRMSpringBoneScheduler - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 48e4e24e48cf43543ab508e6a42a1591, type: 3} ---- !u!4 &5952249983603830923 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 410006747659649862, guid: 48e4e24e48cf43543ab508e6a42a1591, - type: 3} - m_PrefabInstance: {fileID: 6280833885169497037} - m_PrefabAsset: {fileID: 0} --- !u!1001 &6638005332231117493 PrefabInstance: m_ObjectHideFlags: 0 @@ -147,7 +106,7 @@ PrefabInstance: - target: {fileID: 3748028266611161172, guid: bc880b587a9f08e498a8c6de1fcf4650, type: 3} propertyPath: m_RootOrder - value: 3 + value: 2 objectReference: {fileID: 0} - target: {fileID: 3748028266611161172, guid: bc880b587a9f08e498a8c6de1fcf4650, type: 3} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Core/LoadController.prefab b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Core/LoadController.prefab index 173a511c..3cd5123c 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Core/LoadController.prefab +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Core/LoadController.prefab @@ -9,8 +9,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 6312515010370811259} - - component: {fileID: 6312515010370811263} - component: {fileID: 5640999407990057317} + - component: {fileID: 1131529251366033892} m_Layer: 0 m_Name: LoadController m_TagString: Untagged @@ -32,7 +32,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &6312515010370811263 +--- !u!114 &5640999407990057317 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -41,13 +41,15 @@ MonoBehaviour: m_GameObject: {fileID: 6312515010370811258} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 91cd6285b69da1e46a0a90d72eab7fc2, type: 3} + m_Script: {fileID: 11500000, guid: 8a8c86c789fa99a4d8bda2ca79ddde59, type: 3} m_Name: m_EditorClassIdentifier: - animatorController: {fileID: 9100000, guid: 8274142a1807f5848a5dd1166db7d615, type: 2} - windowStyleController: {fileID: 0} - settingAdjuster: {fileID: 0} ---- !u!114 &5640999407990057317 + instanceUpdater: {fileID: 1131529251366033892} + vrmPreviewCanvasPrefab: {fileID: 4226044117769235611, guid: 4821f596a86990e47ae70722be7ac5ae, + type: 3} + vrm10MetaViewPrefab: {fileID: 3214800444371663839, guid: 21497207a08420447a1d5a5bd3d44747, + type: 3} +--- !u!114 &1131529251366033892 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -56,11 +58,6 @@ MonoBehaviour: m_GameObject: {fileID: 6312515010370811258} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8a8c86c789fa99a4d8bda2ca79ddde59, type: 3} + m_Script: {fileID: 11500000, guid: d2e37b3175f700840974083a3e50fd9b, type: 3} m_Name: m_EditorClassIdentifier: - loadController: {fileID: 6312515010370811263} - settingAutoAdjuster: {fileID: 0} - vrmPreviewLanguage: {fileID: 0} - vrmPreviewCanvasPrefab: {fileID: 4226044117769235611, guid: 4821f596a86990e47ae70722be7ac5ae, - type: 3} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger.meta similarity index 77% rename from VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger.meta index 791366e3..462f8749 100644 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 387014968fae6654b9a4b2a60e35c5a3 +guid: cd2368789e8cc864387e744f067b6e8e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizer.prefab b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizer.prefab new file mode 100644 index 00000000..39fec042 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizer.prefab @@ -0,0 +1,47 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4353405852794295506 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4353405852794295532} + - component: {fileID: 4353405852794295533} + m_Layer: 0 + m_Name: ControlRigVisualizer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4353405852794295532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4353405852794295506} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4353405852794295533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4353405852794295506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a78ab5a4bb325864687b571bd9146473, type: 3} + m_Name: + m_EditorClassIdentifier: + bonePrefab: {fileID: 890151008131320554, guid: 743b3f53f6da21145b5107d306df47e5, + type: 3} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/LICENSE.txt.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizer.prefab.meta similarity index 62% rename from VMagicMirror/Assets/VRMSpringBoneOptimize/LICENSE.txt.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizer.prefab.meta index 01479537..c3bc7775 100644 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/LICENSE.txt.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizer.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 8c70155a07f1046a5bbaa9edda820e16 -TextScriptImporter: +guid: efa3ebf8364e02a4581729315fcb3477 +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizerBone.prefab b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizerBone.prefab new file mode 100644 index 00000000..a95ad9ff --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizerBone.prefab @@ -0,0 +1,956 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &173187563317850265 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4123548568998425855} + - component: {fileID: 5597558044993369078} + - component: {fileID: 8536440165623155303} + m_Layer: 0 + m_Name: ZEnd + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4123548568998425855 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 173187563317850265} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.05} + m_LocalScale: {x: 0.005, y: 0.005, z: 0.010000001} + m_Children: [] + m_Father: {fileID: 3965677329174459469} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5597558044993369078 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 173187563317850265} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8536440165623155303 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 173187563317850265} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 4332395262324514d8bb5a2c87ac0d17, 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!1 &890151007507499502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 890151007507499503} + - component: {fileID: 890151007507499501} + - component: {fileID: 890151007507499500} + m_Layer: 0 + m_Name: Z + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &890151007507499503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151007507499502} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.025} + m_LocalScale: {x: 0.005, y: 0.005, z: 0.05} + m_Children: [] + m_Father: {fileID: 284959444748774234} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &890151007507499501 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151007507499502} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &890151007507499500 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151007507499502} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 1d7d64dada963fb49b66806dd4f566f8, 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!1 &890151008123281154 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 890151008123281155} + - component: {fileID: 890151008123281153} + - component: {fileID: 890151008123281152} + m_Layer: 0 + m_Name: X + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &890151008123281155 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151008123281154} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.025, y: 0, z: 0} + m_LocalScale: {x: 0.05, y: 0.005, z: 0.005} + m_Children: [] + m_Father: {fileID: 284959444748774234} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &890151008123281153 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151008123281154} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &890151008123281152 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151008123281154} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 4d198849e3cd6b348b2966551c71a49b, 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!1 &890151008131320557 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 890151008131320555} + - component: {fileID: 890151008131320554} + - component: {fileID: 890151008131320552} + m_Layer: 0 + m_Name: ControlRigVisualizerBone + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &890151008131320555 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151008131320557} + 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_Children: + - {fileID: 284959444748774234} + - {fileID: 3965677329174459469} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &890151008131320554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151008131320557} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3547811dc3b182849989f9251b40ebf4, type: 3} + m_Name: + m_EditorClassIdentifier: + lineRenderer: {fileID: 890151008131320552} + controlBoneVisualizeTransform: {fileID: 284959444748774234} + controlTargetVisualizeTransform: {fileID: 3965677329174459469} +--- !u!120 &890151008131320552 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151008131320557} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b0c9ae4ab29fd05428fa19e3acdc3d46, 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_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 0.02 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.2 + inSlope: 0 + outSlope: 0.8 + tangentMode: 65 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.8 + outSlope: 0 + tangentMode: 5 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0.5 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!1 &890151008853772659 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 890151008853772656} + - component: {fileID: 890151008853772670} + - component: {fileID: 890151008853772657} + m_Layer: 0 + m_Name: Y + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &890151008853772656 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151008853772659} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.025, z: 0} + m_LocalScale: {x: 0.005, y: 0.05, z: 0.005} + m_Children: [] + m_Father: {fileID: 284959444748774234} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &890151008853772670 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151008853772659} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &890151008853772657 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890151008853772659} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 5dfdd0abe6adbfd4b9267f57644937ec, 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!1 &2478825914717683096 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 284959444748774234} + m_Layer: 0 + m_Name: ControlBone + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &284959444748774234 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2478825914717683096} + 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_Children: + - {fileID: 890151008123281155} + - {fileID: 890151008853772656} + - {fileID: 890151007507499503} + m_Father: {fileID: 890151008131320555} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3175692758885660328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3965677329174459469} + m_Layer: 0 + m_Name: ControlTarget + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3965677329174459469 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3175692758885660328} + 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_Children: + - {fileID: 4782755542262136518} + - {fileID: 3038603673007815961} + - {fileID: 4123548568998425855} + - {fileID: 260642128511897984} + - {fileID: 3918414693392091837} + - {fileID: 2442441543476697934} + m_Father: {fileID: 890151008131320555} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3274752601231555731 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 260642128511897984} + - component: {fileID: 3758317213166444133} + - component: {fileID: 2310649711322918456} + m_Layer: 0 + m_Name: X + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &260642128511897984 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3274752601231555731} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.02, y: 0, z: 0} + m_LocalScale: {x: 0.04, y: 0.005, z: 0.005} + m_Children: [] + m_Father: {fileID: 3965677329174459469} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3758317213166444133 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3274752601231555731} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2310649711322918456 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3274752601231555731} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 4d198849e3cd6b348b2966551c71a49b, 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!1 &4127829193079863397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3038603673007815961} + - component: {fileID: 41546983661456037} + - component: {fileID: 195336800073410482} + m_Layer: 0 + m_Name: YEnd + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3038603673007815961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4127829193079863397} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.05, z: 0} + m_LocalScale: {x: 0.005, y: 0.010000001, z: 0.005} + m_Children: [] + m_Father: {fileID: 3965677329174459469} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &41546983661456037 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4127829193079863397} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &195336800073410482 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4127829193079863397} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 4332395262324514d8bb5a2c87ac0d17, 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!1 &4453986110026920213 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2442441543476697934} + - component: {fileID: 7492999001191897623} + - component: {fileID: 6040878323751677003} + m_Layer: 0 + m_Name: Z + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2442441543476697934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4453986110026920213} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.02} + m_LocalScale: {x: 0.005, y: 0.005, z: 0.04} + m_Children: [] + m_Father: {fileID: 3965677329174459469} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7492999001191897623 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4453986110026920213} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6040878323751677003 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4453986110026920213} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 1d7d64dada963fb49b66806dd4f566f8, 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!1 &6550651956415973235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4782755542262136518} + - component: {fileID: 5070925174178513907} + - component: {fileID: 399157172303392684} + m_Layer: 0 + m_Name: XEnd + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4782755542262136518 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6550651956415973235} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.05, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.005, z: 0.005} + m_Children: [] + m_Father: {fileID: 3965677329174459469} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5070925174178513907 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6550651956415973235} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &399157172303392684 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6550651956415973235} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 4332395262324514d8bb5a2c87ac0d17, 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!1 &9138817765686498655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3918414693392091837} + - component: {fileID: 5237022847745064943} + - component: {fileID: 5090936472088068788} + m_Layer: 0 + m_Name: Y + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3918414693392091837 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9138817765686498655} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.02, z: 0} + m_LocalScale: {x: 0.005, y: 0.04, z: 0.005} + m_Children: [] + m_Father: {fileID: 3965677329174459469} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5237022847745064943 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9138817765686498655} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5090936472088068788 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9138817765686498655} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 5dfdd0abe6adbfd4b9267f57644937ec, 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} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/VRMSpringBoneOptimize.Jobs.asmdef.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizerBone.prefab.meta similarity index 59% rename from VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/VRMSpringBoneOptimize.Jobs.asmdef.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizerBone.prefab.meta index b14b1b32..1d43dec6 100644 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/VRMSpringBoneOptimize.Jobs.asmdef.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/Debugger/ControlRigVisualizerBone.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 54cba040cecbe4f5a88995c291ee8b49 -AssemblyDefinitionImporter: +guid: 743b3f53f6da21145b5107d306df47e5 +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadConfirmModalCanvas_VRM10.prefab b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadConfirmModalCanvas_VRM10.prefab new file mode 100644 index 00000000..e44edca1 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadConfirmModalCanvas_VRM10.prefab @@ -0,0 +1,5341 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &900325594006174880 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2756629064692339432} + - component: {fileID: 3038719687798145583} + m_Layer: 5 + m_Name: Spacer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2756629064692339432 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 900325594006174880} + 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_Children: [] + m_Father: {fileID: 9177536577282865883} + m_RootOrder: 2 + 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.5} +--- !u!114 &3038719687798145583 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 900325594006174880} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 16 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &1729857340422098076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1423183445846707177} + m_Layer: 5 + m_Name: BasicInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1423183445846707177 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729857340422098076} + 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_Children: + - {fileID: 8929815128190399933} + - {fileID: 4356135262520536152} + m_Father: {fileID: 6913581551666716866} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 260} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &3232995692886360694 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9177536577282865883} + - component: {fileID: 3550141232798878024} + - component: {fileID: 6736772386467329052} + m_Layer: 5 + m_Name: OtherNotations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &9177536577282865883 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3232995692886360694} + 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_Children: + - {fileID: 461821880747837192} + - {fileID: 156045017179403217} + - {fileID: 2756629064692339432} + - {fileID: 2801171045351508287} + - {fileID: 4128657674732509719} + - {fileID: 5901515261059611091} + m_Father: {fileID: 6913581551666716866} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.6, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: -260} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &3550141232798878024 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3232995692886360694} + m_CullTransparentMesh: 1 +--- !u!114 &6736772386467329052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3232995692886360694} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 8 + m_Right: 8 + m_Top: 24 + m_Bottom: 8 + m_ChildAlignment: 0 + m_Spacing: 12 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &3699538696620210774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8086246887976847849} + - component: {fileID: 2530569571022939361} + - component: {fileID: 5021153005717202374} + m_Layer: 5 + m_Name: NoImageIndication + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8086246887976847849 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3699538696620210774} + 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_Children: + - {fileID: 3017413923658353607} + m_Father: {fileID: 8929815128190399933} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2530569571022939361 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3699538696620210774} + m_CullTransparentMesh: 1 +--- !u!114 &5021153005717202374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3699538696620210774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, 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_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!1 &4298566286791053560 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4087492955779281334} + - component: {fileID: 4085702139560911682} + - component: {fileID: 7926414947932277827} + m_Layer: 5 + m_Name: UsageHeader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4087492955779281334 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4298566286791053560} + 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_Children: [] + m_Father: {fileID: 19850422006811246} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &4085702139560911682 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4298566286791053560} + m_CullTransparentMesh: 0 +--- !u!114 &7926414947932277827 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4298566286791053560} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u4F7F\u7528\u7BC4\u56F2" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282137660 + m_fontColor: {r: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &4353512468307280620 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8929815128190399933} + - component: {fileID: 7743486514460572565} + - component: {fileID: 931070125890091840} + m_Layer: 5 + m_Name: ThumbnailArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8929815128190399933 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4353512468307280620} + 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_Children: + - {fileID: 8086246887976847849} + - {fileID: 6785089636727471684} + m_Father: {fileID: 1423183445846707177} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 128, y: 0} + m_SizeDelta: {x: 240, y: 240} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7743486514460572565 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4353512468307280620} + m_CullTransparentMesh: 1 +--- !u!114 &931070125890091840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4353512468307280620} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 240 + m_MinHeight: 240 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &4794348047332813728 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4356135262520536152} + - component: {fileID: 74924180346799503} + - component: {fileID: 6880050871511378373} + m_Layer: 5 + m_Name: RightColumn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4356135262520536152 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4794348047332813728} + 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_Children: + - {fileID: 6755337641849219947} + - {fileID: 7776136976340817061} + - {fileID: 4294370926279929237} + - {fileID: 47338793583993199} + - {fileID: 1142482551034198286} + - {fileID: 7129795635937690667} + m_Father: {fileID: 1423183445846707177} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 130, y: 0} + m_SizeDelta: {x: -260, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &74924180346799503 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4794348047332813728} + m_CullTransparentMesh: 1 +--- !u!114 &6880050871511378373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4794348047332813728} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 36 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_ChildAlignment: 3 + m_Spacing: 8 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &5139076174673030487 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 19850422006811246} + - component: {fileID: 4761532042343199914} + - component: {fileID: 494709268138786106} + m_Layer: 5 + m_Name: PermissionsEtc + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &19850422006811246 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5139076174673030487} + 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_Children: + - {fileID: 4087492955779281334} + - {fileID: 266707634946712120} + - {fileID: 3851556356836950737} + - {fileID: 3728320036271954687} + - {fileID: 795263568802885746} + - {fileID: 1395773833239001821} + - {fileID: 4471798111609162441} + - {fileID: 8191579783358994038} + - {fileID: 8100694101144526024} + - {fileID: 2326264159980038758} + m_Father: {fileID: 6913581551666716866} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.6, y: 1} + m_AnchoredPosition: {x: 0, y: -130} + m_SizeDelta: {x: 0, y: -260} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4761532042343199914 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5139076174673030487} + m_CullTransparentMesh: 1 +--- !u!114 &494709268138786106 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5139076174673030487} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 8 + m_Right: 8 + m_Top: 24 + m_Bottom: 8 + m_ChildAlignment: 0 + m_Spacing: 12 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &6714947343610174788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6786917508254646296} + - component: {fileID: 6783226608855492320} + m_Layer: 5 + m_Name: LoadConfirmPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6786917508254646296 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6714947343610174788} + 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_Children: + - {fileID: 6913581551666716866} + m_Father: {fileID: 6785345625229701670} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6783226608855492320 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6714947343610174788} + m_CullTransparentMesh: 0 +--- !u!1 &6715154261937796278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6785345625229701670} + - component: {fileID: 6783149874804189960} + - component: {fileID: 6674769309200230538} + m_Layer: 5 + m_Name: LoadConfirmModal_VRM10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6785345625229701670 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6715154261937796278} + 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_Children: + - {fileID: 6786917508254646296} + m_Father: {fileID: 6884518601229966802} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6783149874804189960 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6715154261937796278} + m_CullTransparentMesh: 0 +--- !u!114 &6674769309200230538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6715154261937796278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.7529412} + 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: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6715510231581106870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6785089636727471684} + - component: {fileID: 6782716477256851838} + - component: {fileID: 6675397180772256750} + m_Layer: 5 + m_Name: Thumbnail + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &6785089636727471684 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6715510231581106870} + 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_Children: [] + m_Father: {fileID: 8929815128190399933} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6782716477256851838 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6715510231581106870} + m_CullTransparentMesh: 0 +--- !u!114 &6675397180772256750 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6715510231581106870} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, 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_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!1 &6716383599025580780 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6884518601229966802} + - component: {fileID: 6753346521075175216} + - component: {fileID: 6559271898313600694} + - component: {fileID: 7253208202219415044} + - component: {fileID: 3214800444371663839} + m_Layer: 5 + m_Name: LoadConfirmModalCanvas_VRM10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6884518601229966802 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6716383599025580780} + 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_Children: + - {fileID: 6785345625229701670} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &6753346521075175216 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6716383599025580780} + 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_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &6559271898313600694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6716383599025580780} + 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: 1280, y: 720} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &7253208202219415044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6716383599025580780} + 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 &3214800444371663839 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6716383599025580780} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5573aaddfdc4c53448a7467392a99b2d, type: 3} + m_Name: + m_EditorClassIdentifier: + headers: + title: {fileID: 1973062650235914768} + version: {fileID: 3257262157888976350} + authors: {fileID: 9027138173476949230} + copyright: {fileID: 5077337629539893268} + contactInformation: {fileID: 5261493121960761461} + references: {fileID: 2606566683341104464} + thirdPartyLicenses: {fileID: 6918021561262876740} + licenseUrl: {fileID: 4968631268639691434} + usageHeader: {fileID: 7926414947932277827} + avatarPermission: {fileID: 5002924020584825667} + allowExcessiveViolentUsage: {fileID: 8335327093310251946} + allowExcessiveSexualUsage: {fileID: 8458844890161118084} + allowPoliticalOrReligiousUsage: {fileID: 5608993423506166025} + allowAntisocialOrHateUsage: {fileID: 6161123484084116390} + creditNotation: {fileID: 7392360959182719773} + allowRedistribution: {fileID: 3994740853166454541} + modification: {fileID: 3942074160217996723} + commercialUsage: {fileID: 8705873132719860658} + otherLicenseUrl: {fileID: 1673114823830362280} + inputs: + title: {fileID: 617114008429548719} + version: {fileID: 4523242685497092961} + authors: {fileID: 7977847164641284689} + copyright: {fileID: 6163040031092530859} + contactInformation: {fileID: 6554219544504338122} + references: {fileID: 4025573184027851759} + avatarPermission: {fileID: 6240901729978752508} + allowExcessiveViolentUsage: {fileID: 6943653669464784149} + allowExcessiveSexualUsage: {fileID: 7390984718534387003} + allowPoliticalOrReligiousUsage: {fileID: 6784376108254826422} + allowAntisocialOrHateUsage: {fileID: 5075946863851324697} + creditNotation: {fileID: 8459773087606773154} + allowRedistribution: {fileID: 2630661047991757234} + modification: {fileID: 2685509309582893836} + commercialUsage: {fileID: 7719361695211664653} + licenseUrlItem: {fileID: 5893860795104991951} + thirdPartyLicenseUrlItem: {fileID: 8448351640262434849} + otherLicenseUrlItem: {fileID: 146144798664167629} + thumbnailImage: {fileID: 6675397180772256750} +--- !u!1 &7008134957579613351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6913581551666716866} + - component: {fileID: 5641493292926974880} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6913581551666716866 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7008134957579613351} + 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_Children: + - {fileID: 1423183445846707177} + - {fileID: 19850422006811246} + - {fileID: 9177536577282865883} + m_Father: {fileID: 6786917508254646296} + m_RootOrder: 0 + 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: -48, y: -48} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5641493292926974880 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7008134957579613351} + m_CullTransparentMesh: 1 +--- !u!1 &7689074536781865570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3017413923658353607} + - component: {fileID: 4731636457008541036} + - component: {fileID: 7344209445828446451} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3017413923658353607 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7689074536781865570} + 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_Children: [] + m_Father: {fileID: 8086246887976847849} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4731636457008541036 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7689074536781865570} + m_CullTransparentMesh: 1 +--- !u!114 &7344209445828446451 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7689074536781865570} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: NO IMAGE + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282203453 + m_fontColor: {r: 0.23921569, g: 0.23921569, b: 0.23921569, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &7744969656990330379 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4128657674732509719} + - component: {fileID: 7175471303029172589} + m_Layer: 5 + m_Name: Spacer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4128657674732509719 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7744969656990330379} + 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_Children: [] + m_Father: {fileID: 9177536577282865883} + m_RootOrder: 4 + 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.5} +--- !u!114 &7175471303029172589 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7744969656990330379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 16 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &8128570423579297635 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 461821880747837192} + - component: {fileID: 4353539378032813006} + - component: {fileID: 5529662201789551329} + m_Layer: 5 + m_Name: OtherNotationHeader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &461821880747837192 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8128570423579297635} + 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_Children: [] + m_Father: {fileID: 9177536577282865883} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &4353539378032813006 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8128570423579297635} + m_CullTransparentMesh: 0 +--- !u!114 &5529662201789551329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8128570423579297635} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u30E9\u30A4\u30BB\u30F3\u30B9URL\u7B49" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282137660 + m_fontColor: {r: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1001 &529024433329871185 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 9177536577282865883} + m_Modifications: + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3982901026353901167, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_Name + value: ThirdPertyLicenseUrl + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c62cd6f179f9c02429dfc76b723a8076, type: 3} +--- !u!114 &6918021561262876740 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7446357972976939285, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + m_PrefabInstance: {fileID: 529024433329871185} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &8448351640262434849 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8244379963358148976, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + m_PrefabInstance: {fileID: 529024433329871185} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64c91c4998f39364697c883d162d6a04, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &2801171045351508287 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + m_PrefabInstance: {fileID: 529024433329871185} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &687370116509749736 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 19850422006811246} + m_Modifications: + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543052461214647695, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Name + value: CreditNotation + objectReference: {fileID: 0} + - target: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_text + value: "\u30AF\u30EC\u30B8\u30C3\u30C8\u8868\u8A18" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, type: 3} +--- !u!224 &2326264159980038758 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 687370116509749736} + m_PrefabAsset: {fileID: 0} +--- !u!114 &7392360959182719773 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 687370116509749736} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &8459773087606773154 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9001888302210368586, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 687370116509749736} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &951361066670106517 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4356135262520536152} + m_Modifications: + - target: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: "\u30E2\u30C7\u30EB\u540D" + objectReference: {fileID: 0} + - target: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: Title + objectReference: {fileID: 0} + - target: {fileID: 5062766854784283391, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Name + value: Title + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 251.05 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 161.525 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, type: 3} +--- !u!224 &6755337641849219947 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 951361066670106517} + m_PrefabAsset: {fileID: 0} +--- !u!114 &617114008429548719 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 951361066670106517} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1973062650235914768 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 951361066670106517} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1715184433300468039 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 19850422006811246} + m_Modifications: + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543052461214647695, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Name + value: Commercial + objectReference: {fileID: 0} + - target: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_text + value: "\u5546\u7528\u5229\u7528" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, type: 3} +--- !u!224 &4471798111609162441 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 1715184433300468039} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8705873132719860658 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 1715184433300468039} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &7719361695211664653 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9001888302210368586, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 1715184433300468039} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1909293999171789169 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 19850422006811246} + m_Modifications: + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543052461214647695, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Name + value: Sexual + objectReference: {fileID: 0} + - target: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_text + value: "\u904E\u5270\u306A\u6027\u7684\u8868\u73FE" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, type: 3} +--- !u!224 &3728320036271954687 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 1909293999171789169} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8458844890161118084 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 1909293999171789169} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &7390984718534387003 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9001888302210368586, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 1909293999171789169} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &2067699298999957855 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 19850422006811246} + m_Modifications: + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543052461214647695, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Name + value: Violent + objectReference: {fileID: 0} + - target: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_text + value: "\u904E\u5270\u306A\u66B4\u529B\u8868\u73FE" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, type: 3} +--- !u!114 &6943653669464784149 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9001888302210368586, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 2067699298999957855} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &3851556356836950737 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 2067699298999957855} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8335327093310251946 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 2067699298999957855} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &2507330265535433724 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 19850422006811246} + m_Modifications: + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543052461214647695, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Name + value: PoliticalOrReligious + objectReference: {fileID: 0} + - target: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_text + value: "\u653F\u6CBB\u30FB\u5B97\u6559\u7684\u306A\u4F7F\u7528" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, type: 3} +--- !u!114 &6784376108254826422 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9001888302210368586, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 2507330265535433724} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &795263568802885746 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 2507330265535433724} + m_PrefabAsset: {fileID: 0} +--- !u!114 &5608993423506166025 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 2507330265535433724} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &2567853124926235583 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 9177536577282865883} + m_Modifications: + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3982901026353901167, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_Name + value: LicenseUrl + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7446357972976939285, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_text + value: "\u30E9\u30A4\u30BB\u30F3\u30B9URL" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c62cd6f179f9c02429dfc76b723a8076, type: 3} +--- !u!224 &156045017179403217 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + m_PrefabInstance: {fileID: 2567853124926235583} + m_PrefabAsset: {fileID: 0} +--- !u!114 &5893860795104991951 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8244379963358148976, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + m_PrefabInstance: {fileID: 2567853124926235583} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64c91c4998f39364697c883d162d6a04, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &4968631268639691434 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7446357972976939285, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + m_PrefabInstance: {fileID: 2567853124926235583} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &3058228616719456694 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 19850422006811246} + m_Modifications: + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543052461214647695, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Name + value: AvatarPermission + objectReference: {fileID: 0} + - target: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_text + value: "\u30A2\u30D0\u30BF\u30FC\u3068\u3057\u3066\u306E\u4F7F\u7528" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, type: 3} +--- !u!114 &5002924020584825667 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 3058228616719456694} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &266707634946712120 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 3058228616719456694} + m_PrefabAsset: {fileID: 0} +--- !u!114 &6240901729978752508 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9001888302210368586, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 3058228616719456694} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &3638399741937518805 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4356135262520536152} + m_Modifications: + - target: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: "\u89AA\u4F5C\u54C1" + objectReference: {fileID: 0} + - target: {fileID: 5062766854784283391, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Name + value: References + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 218.76999 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 145.385 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, type: 3} +--- !u!114 &4025573184027851759 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 3638399741937518805} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &7129795635937690667 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 3638399741937518805} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2606566683341104464 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 3638399741937518805} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &4223324703015797075 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 19850422006811246} + m_Modifications: + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543052461214647695, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Name + value: AntisocialOrHate + objectReference: {fileID: 0} + - target: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_text + value: "\u53CD\u793E\u4F1A\u7684\u30FB\u5DEE\u5225\u7684\u8868\u73FE" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, type: 3} +--- !u!114 &5075946863851324697 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9001888302210368586, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 4223324703015797075} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &1395773833239001821 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 4223324703015797075} + m_PrefabAsset: {fileID: 0} +--- !u!114 &6161123484084116390 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 4223324703015797075} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &4280193654723598427 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4356135262520536152} + m_Modifications: + - target: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: 1.2.3 + objectReference: {fileID: 0} + - target: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: Version + objectReference: {fileID: 0} + - target: {fileID: 5062766854784283391, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Name + value: Version + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 210.03 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 141.015 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, type: 3} +--- !u!114 &4523242685497092961 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 4280193654723598427} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &3257262157888976350 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 4280193654723598427} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &7776136976340817061 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 4280193654723598427} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &5774741116244340113 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4356135262520536152} + m_Modifications: + - target: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: Copyright + objectReference: {fileID: 0} + - target: {fileID: 5062766854784283391, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Name + value: Copyright + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 218.76999 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 145.385 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, type: 3} +--- !u!224 &47338793583993199 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 5774741116244340113} + m_PrefabAsset: {fileID: 0} +--- !u!114 &6163040031092530859 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 5774741116244340113} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &5077337629539893268 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 5774741116244340113} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &6371711658145820152 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 19850422006811246} + m_Modifications: + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543052461214647695, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Name + value: Redistribution + objectReference: {fileID: 0} + - target: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_text + value: "\u518D\u914D\u5E03" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, type: 3} +--- !u!224 &8191579783358994038 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 6371711658145820152} + m_PrefabAsset: {fileID: 0} +--- !u!114 &3994740853166454541 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 6371711658145820152} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2630661047991757234 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9001888302210368586, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 6371711658145820152} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &6460969788940166982 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 19850422006811246} + m_Modifications: + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050301434714487231, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050992251151732785, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543052461214647695, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_Name + value: Modification + objectReference: {fileID: 0} + - target: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + propertyPath: m_text + value: "\u30E2\u30C7\u30EB\u6539\u5909" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, type: 3} +--- !u!224 &8100694101144526024 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3009120981871328142, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 6460969788940166982} + m_PrefabAsset: {fileID: 0} +--- !u!114 &3942074160217996723 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8006545106520054517, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 6460969788940166982} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2685509309582893836 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9001888302210368586, guid: 877b7ee1b4dee6340b9f24e8cb7698d8, + type: 3} + m_PrefabInstance: {fileID: 6460969788940166982} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &6869897915360671216 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4356135262520536152} + m_Modifications: + - target: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: abc.sample@example.com + objectReference: {fileID: 0} + - target: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: "\u9023\u7D61\u5148" + objectReference: {fileID: 0} + - target: {fileID: 5062766854784283391, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Name + value: Contact + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 488.97 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 280.485 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, type: 3} +--- !u!114 &6554219544504338122 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 6869897915360671216} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &5261493121960761461 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 6869897915360671216} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &1142482551034198286 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 6869897915360671216} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &7715938881200415083 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 4356135262520536152} + m_Modifications: + - target: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: Author1, Author2, ... + objectReference: {fileID: 0} + - target: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_text + value: "\u4F5C\u8005" + objectReference: {fileID: 0} + - target: {fileID: 5062766854784283391, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Name + value: Authors + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 407.59 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 239.795 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988073143862716225, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5988236624606351055, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, type: 3} +--- !u!114 &7977847164641284689 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 406313742924411706, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 7715938881200415083} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &9027138173476949230 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1608440235558251909, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 7715938881200415083} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &4294370926279929237 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5804064677843258622, guid: 506c2caf1c0f1bc44a98c8e47b0adc7c, + type: 3} + m_PrefabInstance: {fileID: 7715938881200415083} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &8101656935413672381 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 9177536577282865883} + m_Modifications: + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 726678132519420463, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458257365811297233, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2458659437098848863, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3982901026353901167, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_Name + value: OtherLicenseUrl + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5291980053709776261, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5546525579939891658, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7446357972976939285, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + propertyPath: m_text + value: "\u305D\u306E\u4ED6\u306E\u30E9\u30A4\u30BB\u30F3\u30B9URL" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c62cd6f179f9c02429dfc76b723a8076, type: 3} +--- !u!224 &5901515261059611091 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2416386611918426222, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + m_PrefabInstance: {fileID: 8101656935413672381} + m_PrefabAsset: {fileID: 0} +--- !u!114 &146144798664167629 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8244379963358148976, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + m_PrefabInstance: {fileID: 8101656935413672381} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64c91c4998f39364697c883d162d6a04, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1673114823830362280 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7446357972976939285, guid: c62cd6f179f9c02429dfc76b723a8076, + type: 3} + m_PrefabInstance: {fileID: 8101656935413672381} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadConfirmModalCanvas_VRM10.prefab.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadConfirmModalCanvas_VRM10.prefab.meta new file mode 100644 index 00000000..2a66b664 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadConfirmModalCanvas_VRM10.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 21497207a08420447a1d5a5bd3d44747 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10.meta similarity index 77% rename from VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10.meta index 1a367c48..f1dbb91b 100644 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 65fd9188610dc4ebf97d41e3dee94a1a +guid: 57262582e6720ac48a82bfac2e418db8 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/BasicInfoHeaderValueTextSet.prefab b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/BasicInfoHeaderValueTextSet.prefab new file mode 100644 index 00000000..4dd6d31e --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/BasicInfoHeaderValueTextSet.prefab @@ -0,0 +1,393 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5062766854784283391 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5804064677843258622} + - component: {fileID: 6656033735454214148} + - component: {fileID: 7956540916923403097} + - component: {fileID: 5518956663391993453} + m_Layer: 5 + m_Name: BasicInfoHeaderValueTextSet + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5804064677843258622 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5062766854784283391} + 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_Children: + - {fileID: 5988073143862716225} + - {fileID: 5988236624606351055} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &6656033735454214148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5062766854784283391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &7956540916923403097 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5062766854784283391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 30 + m_PreferredWidth: -1 + m_PreferredHeight: 30 + m_FlexibleWidth: -1 + m_FlexibleHeight: 0 + m_LayoutPriority: 1 +--- !u!114 &5518956663391993453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5062766854784283391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &5765172220298565171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5988073143862716225} + - component: {fileID: 5989758759327702523} + - component: {fileID: 8805707135555424914} + - component: {fileID: 1608440235558251909} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5988073143862716225 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5765172220298565171} + 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_Children: [] + m_Father: {fileID: 5804064677843258622} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &5989758759327702523 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5765172220298565171} + m_CullTransparentMesh: 0 +--- !u!114 &8805707135555424914 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5765172220298565171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 150 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1608440235558251909 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5765172220298565171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Header + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282137660 + m_fontColor: {r: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &5765837976070352769 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5988236624606351055} + - component: {fileID: 5985451196252625979} + - component: {fileID: 406313742924411706} + m_Layer: 5 + m_Name: Value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5988236624606351055 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5765837976070352769} + 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_Children: [] + m_Father: {fileID: 5804064677843258622} + m_RootOrder: 1 + 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.5} +--- !u!222 &5985451196252625979 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5765837976070352769} + m_CullTransparentMesh: 0 +--- !u!114 &406313742924411706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5765837976070352769} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Value + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282137660 + m_fontColor: {r: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/BasicInfoHeaderValueTextSet.prefab.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/BasicInfoHeaderValueTextSet.prefab.meta new file mode 100644 index 00000000..f67c926a --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/BasicInfoHeaderValueTextSet.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 506c2caf1c0f1bc44a98c8e47b0adc7c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/LicenseItem.prefab b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/LicenseItem.prefab new file mode 100644 index 00000000..d30d4432 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/LicenseItem.prefab @@ -0,0 +1,870 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2378124730876326673 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2458659437098848863} + - component: {fileID: 2455601880924291243} + - component: {fileID: 8405705863780331434} + m_Layer: 5 + m_Name: URLValue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2458659437098848863 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2378124730876326673} + 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_Children: [] + m_Father: {fileID: 2416386611918426222} + m_RootOrder: 2 + 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.5} +--- !u!222 &2455601880924291243 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2378124730876326673} + m_CullTransparentMesh: 0 +--- !u!114 &8405705863780331434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2378124730876326673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: https://www.license.example.com + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282137660 + m_fontColor: {r: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2379753650660412067 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2458257365811297233} + - component: {fileID: 2457682385380442475} + - component: {fileID: 806341407231069698} + - component: {fileID: 7446357972976939285} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2458257365811297233 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2379753650660412067} + 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_Children: [] + m_Father: {fileID: 2416386611918426222} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &2457682385380442475 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2379753650660412067} + m_CullTransparentMesh: 0 +--- !u!114 &806341407231069698 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2379753650660412067} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 400 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &7446357972976939285 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2379753650660412067} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u30E9\u30A4\u30BB\u30F3\u30B9: " + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282137660 + m_fontColor: {r: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2400714863373725174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 726678132519420463} + - component: {fileID: 1302724117940124439} + - component: {fileID: 3215820178802809723} + - component: {fileID: 4704914462194063723} + - component: {fileID: 8468413441817539672} + m_Layer: 5 + m_Name: OpenUrlButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &726678132519420463 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2400714863373725174} + 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_Children: + - {fileID: 3374667260319945054} + m_Father: {fileID: 5546525579939891658} + m_RootOrder: 1 + 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.5, y: 0.5} +--- !u!222 &1302724117940124439 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2400714863373725174} + m_CullTransparentMesh: 1 +--- !u!114 &3215820178802809723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2400714863373725174} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4704914462194063723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2400714863373725174} + 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.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3215820178802809723} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &8468413441817539672 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2400714863373725174} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 140 + m_PreferredHeight: 40 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &3982901026353901167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2416386611918426222} + - component: {fileID: 2559932432592378804} + - component: {fileID: 8244379963358148976} + m_Layer: 5 + m_Name: LicenseItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2416386611918426222 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3982901026353901167} + 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_Children: + - {fileID: 2458257365811297233} + - {fileID: 5546525579939891658} + - {fileID: 2458659437098848863} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2559932432592378804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3982901026353901167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 4 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &8244379963358148976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3982901026353901167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 64c91c4998f39364697c883d162d6a04, type: 3} + m_Name: + m_EditorClassIdentifier: + noneTextObject: {fileID: 7825776498585349729} + openUrlButton: {fileID: 4704914462194063723} + urlText: {fileID: 8405705863780331434} +--- !u!1 &5613069921430849647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5546525579939891658} + - component: {fileID: 6444736665001779345} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5546525579939891658 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5613069921430849647} + 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_Children: + - {fileID: 5291980053709776261} + - {fileID: 726678132519420463} + m_Father: {fileID: 2416386611918426222} + m_RootOrder: 1 + 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.5, y: 0.5} +--- !u!114 &6444736665001779345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5613069921430849647} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &6045546704175502054 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3374667260319945054} + - component: {fileID: 6636242623016035414} + - component: {fileID: 3632830201033212787} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3374667260319945054 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6045546704175502054} + 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_Children: [] + m_Father: {fileID: 726678132519420463} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6636242623016035414 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6045546704175502054} + m_CullTransparentMesh: 1 +--- !u!114 &3632830201033212787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6045546704175502054} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Open URL + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &7825776498585349729 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5291980053709776261} + - component: {fileID: 5429638209906078483} + - component: {fileID: 2246225895802603952} + - component: {fileID: 8180677341480036970} + m_Layer: 5 + m_Name: NoneText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5291980053709776261 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7825776498585349729} + 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_Children: [] + m_Father: {fileID: 5546525579939891658} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &5429638209906078483 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7825776498585349729} + m_CullTransparentMesh: 0 +--- !u!114 &2246225895802603952 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7825776498585349729} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 84 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &8180677341480036970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7825776498585349729} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: (none) + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282137660 + m_fontColor: {r: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/LicenseItem.prefab.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/LicenseItem.prefab.meta new file mode 100644 index 00000000..6043eb0d --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/LicenseItem.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c62cd6f179f9c02429dfc76b723a8076 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/UsageInfoHeaderValueTextSet.prefab b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/UsageInfoHeaderValueTextSet.prefab new file mode 100644 index 00000000..24a86060 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/UsageInfoHeaderValueTextSet.prefab @@ -0,0 +1,393 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2975466012671039729 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3050301434714487231} + - component: {fileID: 3052945369298316107} + - component: {fileID: 9001888302210368586} + m_Layer: 5 + m_Name: Value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3050301434714487231 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2975466012671039729} + 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_Children: [] + m_Father: {fileID: 3009120981871328142} + m_RootOrder: 1 + 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.5} +--- !u!222 &3052945369298316107 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2975466012671039729} + m_CullTransparentMesh: 0 +--- !u!114 &9001888302210368586 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2975466012671039729} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Prohibited + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282137660 + m_fontColor: {r: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2975933855723725123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3050992251151732785} + - component: {fileID: 3049289197570697867} + - component: {fileID: 250656189640566242} + - component: {fileID: 8006545106520054517} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3050992251151732785 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2975933855723725123} + 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_Children: [] + m_Father: {fileID: 3009120981871328142} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &3049289197570697867 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2975933855723725123} + m_CullTransparentMesh: 0 +--- !u!114 &250656189640566242 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2975933855723725123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 400 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &8006545106520054517 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2975933855723725123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u30A2\u30D0\u30BF\u30FC\u3068\u3057\u3066\u306E\u5229\u7528" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f0d5086059befba45953a2cd21002c35, type: 2} + m_sharedMaterial: {fileID: 21904680645385124, guid: f0d5086059befba45953a2cd21002c35, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282137660 + m_fontColor: {r: 0.23584908, g: 0.23584908, b: 0.23584908, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 0 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &4543052461214647695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3009120981871328142} + - component: {fileID: 2670738959694561140} + - component: {fileID: 1667996845805452329} + - component: {fileID: 3880379248134916381} + m_Layer: 5 + m_Name: UsageInfoHeaderValueTextSet + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3009120981871328142 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4543052461214647695} + 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_Children: + - {fileID: 3050992251151732785} + - {fileID: 3050301434714487231} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 133.525, y: 0} + m_SizeDelta: {x: 251.05, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2670738959694561140 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4543052461214647695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &1667996845805452329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4543052461214647695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 24 + m_PreferredWidth: -1 + m_PreferredHeight: 24 + m_FlexibleWidth: -1 + m_FlexibleHeight: 0 + m_LayoutPriority: 1 +--- !u!114 &3880379248134916381 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4543052461214647695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/UsageInfoHeaderValueTextSet.prefab.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/UsageInfoHeaderValueTextSet.prefab.meta new file mode 100644 index 00000000..9178656a --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Prefabs/UI/LoadDialog_VRM10/UsageInfoHeaderValueTextSet.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 877b7ee1b4dee6340b9f24e8cb7698d8 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scenes/MainViewer.unity b/VMagicMirror/Assets/Baku/VMagicMirror/Scenes/MainViewer.unity index d63a34a1..c2065f79 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scenes/MainViewer.unity +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scenes/MainViewer.unity @@ -358,18 +358,6 @@ Transform: type: 3} m_PrefabInstance: {fileID: 1574337990821293262} m_PrefabAsset: {fileID: 0} ---- !u!114 &1787938567 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 4403582645890784489, guid: 8089eb7a4f09ec147961c4ed8f093c27, - type: 3} - m_PrefabInstance: {fileID: 4403582645463997422} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 91cd6285b69da1e46a0a90d72eab7fc2, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!4 &1842530517 stripped Transform: m_CorrespondingSourceObject: {fileID: 7220499517585180708, guid: a0e0d039c3aebf041adced68e3830d55, @@ -1406,7 +1394,7 @@ PrefabInstance: type: 3} propertyPath: loadController value: - objectReference: {fileID: 1787938567} + objectReference: {fileID: 0} - target: {fileID: 8218640737285604642, guid: 790d84fdbc606c944ad6592cf84f1ea9, type: 3} propertyPath: messageHandler diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Accessory/AccessoryItem.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Accessory/AccessoryItem.cs index 3883fab0..970ab0ea 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Accessory/AccessoryItem.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Accessory/AccessoryItem.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using mattatz.TransformControl; using UnityEngine; +using UniVRM10; namespace Baku.VMagicMirror { @@ -310,13 +311,13 @@ public void SetAnimator(Animator animator) { _animator = animator; - _attachBones[AccessoryAttachTarget.Head] = _animator.GetBoneTransform(HumanBodyBones.Head); + _attachBones[AccessoryAttachTarget.Head] = animator.GetBoneTransform(HumanBodyBones.Head); _attachBones[AccessoryAttachTarget.Neck] = - _animator.GetBoneTransform(HumanBodyBones.Neck) ?? _animator.GetBoneTransform(HumanBodyBones.Head); - _attachBones[AccessoryAttachTarget.Chest] = _animator.GetBoneTransform(HumanBodyBones.Chest); - _attachBones[AccessoryAttachTarget.Waist] = _animator.GetBoneTransform(HumanBodyBones.Hips); - _attachBones[AccessoryAttachTarget.LeftHand] = _animator.GetBoneTransform(HumanBodyBones.LeftHand); - _attachBones[AccessoryAttachTarget.RightHand] = _animator.GetBoneTransform(HumanBodyBones.RightHand); + animator.GetBoneTransform(HumanBodyBones.Neck) ?? animator.GetBoneTransform(HumanBodyBones.Head); + _attachBones[AccessoryAttachTarget.Chest] = animator.GetBoneTransform(HumanBodyBones.Chest); + _attachBones[AccessoryAttachTarget.Waist] = animator.GetBoneTransform(HumanBodyBones.Hips); + _attachBones[AccessoryAttachTarget.LeftHand] = animator.GetBoneTransform(HumanBodyBones.LeftHand); + _attachBones[AccessoryAttachTarget.RightHand] = animator.GetBoneTransform(HumanBodyBones.RightHand); if (_file == null) { diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Accessory/AccessoryItemController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Accessory/AccessoryItemController.cs index ba62b192..d2cea08d 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Accessory/AccessoryItemController.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Accessory/AccessoryItemController.cs @@ -5,6 +5,7 @@ using Baku.VMagicMirror.WordToMotion; using UniRx; using UnityEngine; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -20,8 +21,8 @@ public class AccessoryItemController : MonoBehaviour private IMessageSender _sender; private readonly List _items = new List(); private IDisposable _layoutSender = null; - private bool _hasModel; private Animator _animator; + private bool _hasModel; [Inject] public void Initialize( @@ -39,14 +40,13 @@ WordToMotionAccessoryRequest accessoryRequest vrmLoader.VrmLoaded += info => { - _items.ForEach(i => i.SetAnimator(info.animator)); - _animator = info.animator; + _items.ForEach(i => i.SetAnimator(info.controlRig)); + _animator = info.controlRig; _hasModel = true; }; vrmLoader.VrmDisposing += () => { _hasModel = false; - _animator = null; _items.ForEach(i => i.UnsetModel()); }; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerFaceAttitudeController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerFaceAttitudeController.cs index d14ff070..c72d9596 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerFaceAttitudeController.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerFaceAttitudeController.cs @@ -42,7 +42,7 @@ public void Initialize(IVRMLoadable vrmLoadable, ExternalTrackerDataSource exter vrmLoadable.VrmLoaded += info => { - var animator = info.animator; + var animator = info.controlRig; _neck = animator.GetBoneTransform(HumanBodyBones.Neck); _head = animator.GetBoneTransform(HumanBodyBones.Head); _hasNeck = _neck != null; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerFaceSwitchApplier.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerFaceSwitchApplier.cs index d25e368f..90702583 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerFaceSwitchApplier.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerFaceSwitchApplier.cs @@ -1,15 +1,15 @@ using System.Collections.Generic; using UnityEngine; using Zenject; -using VRM; using Baku.VMagicMirror.ExternalTracker; using UniRx; +using UniVRM10; namespace Baku.VMagicMirror { public readonly struct FaceSwitchKeyApplyContent { - private FaceSwitchKeyApplyContent(bool hasValue, bool keepLipSync, BlendShapeKey key) + private FaceSwitchKeyApplyContent(bool hasValue, bool keepLipSync, ExpressionKey key) { HasValue = hasValue; KeepLipSync = keepLipSync; @@ -18,12 +18,12 @@ private FaceSwitchKeyApplyContent(bool hasValue, bool keepLipSync, BlendShapeKey public static FaceSwitchKeyApplyContent Empty() => new FaceSwitchKeyApplyContent(false, false, default); - public static FaceSwitchKeyApplyContent Create(BlendShapeKey key, bool keepLipSync) => + public static FaceSwitchKeyApplyContent Create(ExpressionKey key, bool keepLipSync) => new FaceSwitchKeyApplyContent(true, keepLipSync, key); public bool HasValue { get; } public bool KeepLipSync { get; } - public BlendShapeKey Key { get; } + public ExpressionKey Key { get; } } public class ExternalTrackerFaceSwitchApplier : MonoBehaviour @@ -83,13 +83,13 @@ public void UpdateCurrentValue() } else { - var key = CreateKey(_externalTracker.FaceSwitchClipName); + var key = ExpressionKeyUtils.CreateKeyByName(_externalTracker.FaceSwitchClipName); _currentValue.Value = FaceSwitchKeyApplyContent.Create(key, _externalTracker.KeepLipSyncForFaceSwitch); _latestClipName = _externalTracker.FaceSwitchClipName; } } - public void Accumulate(VRMBlendShapeProxy proxy) + public void Accumulate(ExpressionAccumulator accumulator) { //NOTE: //3つ目の条件について、表情間の補間処理中はこのクラスではないクラスがAccumulateを代行するので、 @@ -100,37 +100,9 @@ public void Accumulate(VRMBlendShapeProxy proxy) } //ターゲットのキーだけいじり、他のクリップ状態については呼び出し元に責任を持ってもらう - proxy.AccumulateValue(_currentValue.Value.Key, 1f); + accumulator.Accumulate(_currentValue.Value.Key, 1f); //表情を適用した = 目ボーンは正面向きになってほしい _eyeBoneResetter.ReserveReset = true; } - - private static BlendShapeKey CreateKey(string name) => - _presets.ContainsKey(name) - ? BlendShapeKey.CreateFromPreset(_presets[name]) - : BlendShapeKey.CreateUnknown(name); - - private static readonly Dictionary _presets = new Dictionary() - { - ["Blink"] = BlendShapePreset.Blink, - ["Blink_L"] = BlendShapePreset.Blink_L, - ["Blink_R"] = BlendShapePreset.Blink_R, - - ["LookLeft"] = BlendShapePreset.LookLeft, - ["LookRight"] = BlendShapePreset.LookRight, - ["LookUp"] = BlendShapePreset.LookUp, - ["LookDown"] = BlendShapePreset.LookDown, - - ["A"] = BlendShapePreset.A, - ["I"] = BlendShapePreset.I, - ["U"] = BlendShapePreset.U, - ["E"] = BlendShapePreset.E, - ["O"] = BlendShapePreset.O, - - ["Joy"] = BlendShapePreset.Joy, - ["Angry"] = BlendShapePreset.Angry, - ["Sorrow"] = BlendShapePreset.Sorrow, - ["Fun"] = BlendShapePreset.Fun, - }; } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerPerfectSync.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerPerfectSync.cs index 4421d999..baf20ce4 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerPerfectSync.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/ExternalTracker/ExternalTrackerPerfectSync.cs @@ -1,9 +1,8 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using UnityEngine; +using UniVRM10; using Zenject; -using VRM; namespace Baku.VMagicMirror.ExternalTracker { @@ -23,7 +22,7 @@ public class ExternalTrackerPerfectSync : MonoBehaviour private IMessageSender _sender = null; //モデル本来のクリップ一覧 - private List _modelBaseClips = null; + private VRM10ExpressionMap _modelBasedMap = null; private bool _hasModel = false; @@ -31,7 +30,7 @@ public class ExternalTrackerPerfectSync : MonoBehaviour public bool PreferWriteMouthBlendShape { get; private set; }= true; /// - public BlendShapeKey[] NonPerfectSyncKeys { get; private set; } = null; + public ExpressionKey[] NonPerfectSyncKeys { get; private set; } = null; public bool IsActive { get; private set; } @@ -51,7 +50,7 @@ FaceControlConfiguration faceControlConfig vrmLoadable.VrmLoaded += info => { //参照じゃなくて値コピーしとくことに注意(なにかと安全なので) - _modelBaseClips = info.blendShape.BlendShapeAvatar.Clips.ToList(); + _modelBasedMap = info.instance.Vrm.Expression.LoadExpressionMap(); NonPerfectSyncKeys = LoadNonPerfectSyncKeys(); _hasModel = true; ParseClipCompletenessToSendMessage(); @@ -60,7 +59,7 @@ FaceControlConfiguration faceControlConfig vrmLoadable.VrmDisposing += () => { _hasModel = false; - _modelBaseClips = null; + _modelBasedMap = null; }; receiver.AssignCommandHandler( @@ -82,7 +81,7 @@ FaceControlConfiguration faceControlConfig /// /// パーフェクトシンクで取得したブレンドシェイプ値があればそれを適用します。 /// - /// + /// /// 口以外を適用するかどうか /// /// 口を適用するかどうか。原則 @@ -93,8 +92,11 @@ FaceControlConfiguration faceControlConfig /// trueを指定すると非適用のクリップに0を書き込みます。 /// これにより、常にパーフェクトシンク分のクリップ情報が過不足なく更新されるのを保証します。 /// - public void Accumulate(VRMBlendShapeProxy proxy, bool nonMouthPart, bool mouthPart, - bool writeExcludedKeys, float mouthWeight = 1f, float nonMouthWeight = 1f) + public void Accumulate( + ExpressionAccumulator accumulator, + bool nonMouthPart, bool mouthPart, bool writeExcludedKeys, + float mouthWeight = 1f, float nonMouthWeight = 1f + ) { if (!IsReadyToAccumulate) { @@ -107,16 +109,16 @@ FaceControlConfiguration faceControlConfig //それよりは関数ごと分けた方がパフォーマンスがいいのでは?という意図で書いてます。何となくです if (_externalTracker.DisableHorizontalFlip) { - AccumulateWithFlip(proxy, source, nonMouthPart, mouthPart, writeExcludedKeys, mouthWeight, nonMouthWeight); + AccumulateWithFlip(accumulator, source, nonMouthPart, mouthPart, writeExcludedKeys, mouthWeight, nonMouthWeight); } else { - AccumulateWithoutFlip(proxy, source, nonMouthPart, mouthPart, writeExcludedKeys, mouthWeight, nonMouthWeight); + AccumulateWithoutFlip(accumulator, source, nonMouthPart, mouthPart, writeExcludedKeys, mouthWeight, nonMouthWeight); } } private void AccumulateWithoutFlip( - VRMBlendShapeProxy proxy, IFaceTrackSource source, + ExpressionAccumulator accumulator, IFaceTrackSource source, bool nonMouthPart, bool mouthPart, bool writeExcludedKeys, float mouthWeight, float nonMouthWeight ) @@ -125,21 +127,21 @@ FaceControlConfiguration faceControlConfig { //目 var eye = source.Eye; - proxy.AccumulateValue(Keys.EyeBlinkLeft, eye.LeftBlink * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookUpLeft, eye.LeftLookUp * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookDownLeft, eye.LeftLookDown * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookInLeft, eye.LeftLookIn * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookOutLeft, eye.LeftLookOut * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeWideLeft, eye.LeftWide * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeSquintLeft, eye.LeftSquint * nonMouthWeight); - - proxy.AccumulateValue(Keys.EyeBlinkRight, eye.RightBlink * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookUpRight, eye.RightLookUp * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookDownRight, eye.RightLookDown * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookInRight, eye.RightLookIn * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookOutRight, eye.RightLookOut * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeWideRight, eye.RightWide * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeSquintRight, eye.RightSquint * nonMouthWeight); + accumulator.Accumulate(Keys.EyeBlinkLeft, eye.LeftBlink * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookUpLeft, eye.LeftLookUp * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookDownLeft, eye.LeftLookDown * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookInLeft, eye.LeftLookIn * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookOutLeft, eye.LeftLookOut * nonMouthWeight); + accumulator.Accumulate(Keys.EyeWideLeft, eye.LeftWide * nonMouthWeight); + accumulator.Accumulate(Keys.EyeSquintLeft, eye.LeftSquint * nonMouthWeight); + + accumulator.Accumulate(Keys.EyeBlinkRight, eye.RightBlink * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookUpRight, eye.RightLookUp * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookDownRight, eye.RightLookDown * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookInRight, eye.RightLookIn * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookOutRight, eye.RightLookOut * nonMouthWeight); + accumulator.Accumulate(Keys.EyeWideRight, eye.RightWide * nonMouthWeight); + accumulator.Accumulate(Keys.EyeSquintRight, eye.RightSquint * nonMouthWeight); //NOTE: 瞬き時の目下げ処理に使うためにセット _faceControlConfig.AlternativeBlinkL = eye.LeftBlink; @@ -147,142 +149,142 @@ FaceControlConfiguration faceControlConfig //鼻 - proxy.AccumulateValue(Keys.NoseSneerLeft, source.Nose.LeftSneer * nonMouthWeight); - proxy.AccumulateValue(Keys.NoseSneerRight, source.Nose.RightSneer * nonMouthWeight); + accumulator.Accumulate(Keys.NoseSneerLeft, source.Nose.LeftSneer * nonMouthWeight); + accumulator.Accumulate(Keys.NoseSneerRight, source.Nose.RightSneer * nonMouthWeight); //まゆげ - proxy.AccumulateValue(Keys.BrowDownLeft, source.Brow.LeftDown * nonMouthWeight); - proxy.AccumulateValue(Keys.BrowOuterUpLeft, source.Brow.LeftOuterUp * nonMouthWeight); - proxy.AccumulateValue(Keys.BrowDownRight, source.Brow.RightDown * nonMouthWeight); - proxy.AccumulateValue(Keys.BrowOuterUpRight, source.Brow.RightOuterUp * nonMouthWeight); - proxy.AccumulateValue(Keys.BrowInnerUp, source.Brow.InnerUp * nonMouthWeight); + accumulator.Accumulate(Keys.BrowDownLeft, source.Brow.LeftDown * nonMouthWeight); + accumulator.Accumulate(Keys.BrowOuterUpLeft, source.Brow.LeftOuterUp * nonMouthWeight); + accumulator.Accumulate(Keys.BrowDownRight, source.Brow.RightDown * nonMouthWeight); + accumulator.Accumulate(Keys.BrowOuterUpRight, source.Brow.RightOuterUp * nonMouthWeight); + accumulator.Accumulate(Keys.BrowInnerUp, source.Brow.InnerUp * nonMouthWeight); } else if (writeExcludedKeys) { //目 - proxy.AccumulateValue(Keys.EyeBlinkLeft, 0); - proxy.AccumulateValue(Keys.EyeLookUpLeft, 0); - proxy.AccumulateValue(Keys.EyeLookDownLeft, 0); - proxy.AccumulateValue(Keys.EyeLookInLeft, 0); - proxy.AccumulateValue(Keys.EyeLookOutLeft, 0); - proxy.AccumulateValue(Keys.EyeWideLeft, 0); - proxy.AccumulateValue(Keys.EyeSquintLeft, 0); - - proxy.AccumulateValue(Keys.EyeBlinkRight, 0); - proxy.AccumulateValue(Keys.EyeLookUpRight, 0); - proxy.AccumulateValue(Keys.EyeLookDownRight, 0); - proxy.AccumulateValue(Keys.EyeLookInRight, 0); - proxy.AccumulateValue(Keys.EyeLookOutRight, 0); - proxy.AccumulateValue(Keys.EyeWideRight, 0); - proxy.AccumulateValue(Keys.EyeSquintRight, 0); + accumulator.Accumulate(Keys.EyeBlinkLeft, 0); + accumulator.Accumulate(Keys.EyeLookUpLeft, 0); + accumulator.Accumulate(Keys.EyeLookDownLeft, 0); + accumulator.Accumulate(Keys.EyeLookInLeft, 0); + accumulator.Accumulate(Keys.EyeLookOutLeft, 0); + accumulator.Accumulate(Keys.EyeWideLeft, 0); + accumulator.Accumulate(Keys.EyeSquintLeft, 0); + + accumulator.Accumulate(Keys.EyeBlinkRight, 0); + accumulator.Accumulate(Keys.EyeLookUpRight, 0); + accumulator.Accumulate(Keys.EyeLookDownRight, 0); + accumulator.Accumulate(Keys.EyeLookInRight, 0); + accumulator.Accumulate(Keys.EyeLookOutRight, 0); + accumulator.Accumulate(Keys.EyeWideRight, 0); + accumulator.Accumulate(Keys.EyeSquintRight, 0); //NOTE: 瞬き時の目下げ処理に使うためにセット...は非適用時は要らない。 //_faceControlConfig.AlternativeBlinkL = eye.LeftBlink; //_faceControlConfig.AlternativeBlinkR = eye.RightBlink; //鼻 - proxy.AccumulateValue(Keys.NoseSneerLeft, 0); - proxy.AccumulateValue(Keys.NoseSneerRight, 0); + accumulator.Accumulate(Keys.NoseSneerLeft, 0); + accumulator.Accumulate(Keys.NoseSneerRight, 0); //まゆげ - proxy.AccumulateValue(Keys.BrowDownLeft, 0); - proxy.AccumulateValue(Keys.BrowOuterUpLeft, 0); - proxy.AccumulateValue(Keys.BrowDownRight, 0); - proxy.AccumulateValue(Keys.BrowOuterUpRight, 0); - proxy.AccumulateValue(Keys.BrowInnerUp, 0); + accumulator.Accumulate(Keys.BrowDownLeft, 0); + accumulator.Accumulate(Keys.BrowOuterUpLeft, 0); + accumulator.Accumulate(Keys.BrowDownRight, 0); + accumulator.Accumulate(Keys.BrowOuterUpRight, 0); + accumulator.Accumulate(Keys.BrowInnerUp, 0); } if (mouthPart) { //口(多い) var mouth = source.Mouth; - proxy.AccumulateValue(Keys.MouthLeft, mouth.Left * mouthWeight); - proxy.AccumulateValue(Keys.MouthSmileLeft, mouth.LeftSmile * mouthWeight); - proxy.AccumulateValue(Keys.MouthFrownLeft, mouth.LeftFrown * mouthWeight); - proxy.AccumulateValue(Keys.MouthPressLeft, mouth.LeftPress * mouthWeight); - proxy.AccumulateValue(Keys.MouthUpperUpLeft, mouth.LeftUpperUp * mouthWeight); - proxy.AccumulateValue(Keys.MouthLowerDownLeft, mouth.LeftLowerDown * mouthWeight); - proxy.AccumulateValue(Keys.MouthStretchLeft, mouth.LeftStretch * mouthWeight); - proxy.AccumulateValue(Keys.MouthDimpleLeft, mouth.LeftDimple * mouthWeight); - - proxy.AccumulateValue(Keys.MouthRight, mouth.Right * mouthWeight); - proxy.AccumulateValue(Keys.MouthSmileRight, mouth.RightSmile * mouthWeight); - proxy.AccumulateValue(Keys.MouthFrownRight, mouth.RightFrown * mouthWeight); - proxy.AccumulateValue(Keys.MouthPressRight, mouth.RightPress * mouthWeight); - proxy.AccumulateValue(Keys.MouthUpperUpRight, mouth.RightUpperUp * mouthWeight); - proxy.AccumulateValue(Keys.MouthLowerDownRight, mouth.RightLowerDown * mouthWeight); - proxy.AccumulateValue(Keys.MouthStretchRight, mouth.RightStretch * mouthWeight); - proxy.AccumulateValue(Keys.MouthDimpleRight, mouth.RightDimple * mouthWeight); - - proxy.AccumulateValue(Keys.MouthClose, mouth.Close * mouthWeight); - proxy.AccumulateValue(Keys.MouthFunnel, mouth.Funnel * mouthWeight); - proxy.AccumulateValue(Keys.MouthPucker, mouth.Pucker * mouthWeight); - proxy.AccumulateValue(Keys.MouthShrugUpper, mouth.ShrugUpper * mouthWeight); - proxy.AccumulateValue(Keys.MouthShrugLower, mouth.ShrugLower * mouthWeight); - proxy.AccumulateValue(Keys.MouthRollUpper, mouth.RollUpper * mouthWeight); - proxy.AccumulateValue(Keys.MouthRollLower, mouth.RollLower * mouthWeight); + accumulator.Accumulate(Keys.MouthLeft, mouth.Left * mouthWeight); + accumulator.Accumulate(Keys.MouthSmileLeft, mouth.LeftSmile * mouthWeight); + accumulator.Accumulate(Keys.MouthFrownLeft, mouth.LeftFrown * mouthWeight); + accumulator.Accumulate(Keys.MouthPressLeft, mouth.LeftPress * mouthWeight); + accumulator.Accumulate(Keys.MouthUpperUpLeft, mouth.LeftUpperUp * mouthWeight); + accumulator.Accumulate(Keys.MouthLowerDownLeft, mouth.LeftLowerDown * mouthWeight); + accumulator.Accumulate(Keys.MouthStretchLeft, mouth.LeftStretch * mouthWeight); + accumulator.Accumulate(Keys.MouthDimpleLeft, mouth.LeftDimple * mouthWeight); + + accumulator.Accumulate(Keys.MouthRight, mouth.Right * mouthWeight); + accumulator.Accumulate(Keys.MouthSmileRight, mouth.RightSmile * mouthWeight); + accumulator.Accumulate(Keys.MouthFrownRight, mouth.RightFrown * mouthWeight); + accumulator.Accumulate(Keys.MouthPressRight, mouth.RightPress * mouthWeight); + accumulator.Accumulate(Keys.MouthUpperUpRight, mouth.RightUpperUp * mouthWeight); + accumulator.Accumulate(Keys.MouthLowerDownRight, mouth.RightLowerDown * mouthWeight); + accumulator.Accumulate(Keys.MouthStretchRight, mouth.RightStretch * mouthWeight); + accumulator.Accumulate(Keys.MouthDimpleRight, mouth.RightDimple * mouthWeight); + + accumulator.Accumulate(Keys.MouthClose, mouth.Close * mouthWeight); + accumulator.Accumulate(Keys.MouthFunnel, mouth.Funnel * mouthWeight); + accumulator.Accumulate(Keys.MouthPucker, mouth.Pucker * mouthWeight); + accumulator.Accumulate(Keys.MouthShrugUpper, mouth.ShrugUpper * mouthWeight); + accumulator.Accumulate(Keys.MouthShrugLower, mouth.ShrugLower * mouthWeight); + accumulator.Accumulate(Keys.MouthRollUpper, mouth.RollUpper * mouthWeight); + accumulator.Accumulate(Keys.MouthRollLower, mouth.RollLower * mouthWeight); //あご - proxy.AccumulateValue(Keys.JawOpen, source.Jaw.Open * mouthWeight); - proxy.AccumulateValue(Keys.JawForward, source.Jaw.Forward * mouthWeight); - proxy.AccumulateValue(Keys.JawLeft, source.Jaw.Left * mouthWeight); - proxy.AccumulateValue(Keys.JawRight, source.Jaw.Right * mouthWeight); + accumulator.Accumulate(Keys.JawOpen, source.Jaw.Open * mouthWeight); + accumulator.Accumulate(Keys.JawForward, source.Jaw.Forward * mouthWeight); + accumulator.Accumulate(Keys.JawLeft, source.Jaw.Left * mouthWeight); + accumulator.Accumulate(Keys.JawRight, source.Jaw.Right * mouthWeight); //舌 - proxy.AccumulateValue(Keys.TongueOut, source.Tongue.TongueOut * mouthWeight); + accumulator.Accumulate(Keys.TongueOut, source.Tongue.TongueOut * mouthWeight); //ほお - proxy.AccumulateValue(Keys.CheekPuff, source.Cheek.Puff * mouthWeight); - proxy.AccumulateValue(Keys.CheekSquintLeft, source.Cheek.LeftSquint * mouthWeight); - proxy.AccumulateValue(Keys.CheekSquintRight, source.Cheek.RightSquint * mouthWeight); + accumulator.Accumulate(Keys.CheekPuff, source.Cheek.Puff * mouthWeight); + accumulator.Accumulate(Keys.CheekSquintLeft, source.Cheek.LeftSquint * mouthWeight); + accumulator.Accumulate(Keys.CheekSquintRight, source.Cheek.RightSquint * mouthWeight); } else if (writeExcludedKeys) { //口(多い) - proxy.AccumulateValue(Keys.MouthLeft, 0); - proxy.AccumulateValue(Keys.MouthSmileLeft, 0); - proxy.AccumulateValue(Keys.MouthFrownLeft, 0); - proxy.AccumulateValue(Keys.MouthPressLeft, 0); - proxy.AccumulateValue(Keys.MouthUpperUpLeft, 0); - proxy.AccumulateValue(Keys.MouthLowerDownLeft, 0); - proxy.AccumulateValue(Keys.MouthStretchLeft, 0); - proxy.AccumulateValue(Keys.MouthDimpleLeft, 0); - - proxy.AccumulateValue(Keys.MouthRight, 0); - proxy.AccumulateValue(Keys.MouthSmileRight, 0); - proxy.AccumulateValue(Keys.MouthFrownRight, 0); - proxy.AccumulateValue(Keys.MouthPressRight, 0); - proxy.AccumulateValue(Keys.MouthUpperUpRight, 0); - proxy.AccumulateValue(Keys.MouthLowerDownRight, 0); - proxy.AccumulateValue(Keys.MouthStretchRight, 0); - proxy.AccumulateValue(Keys.MouthDimpleRight, 0); - - proxy.AccumulateValue(Keys.MouthClose, 0); - proxy.AccumulateValue(Keys.MouthFunnel, 0); - proxy.AccumulateValue(Keys.MouthPucker, 0); - proxy.AccumulateValue(Keys.MouthShrugUpper, 0); - proxy.AccumulateValue(Keys.MouthShrugLower, 0); - proxy.AccumulateValue(Keys.MouthRollUpper, 0); - proxy.AccumulateValue(Keys.MouthRollLower, 0); + accumulator.Accumulate(Keys.MouthLeft, 0); + accumulator.Accumulate(Keys.MouthSmileLeft, 0); + accumulator.Accumulate(Keys.MouthFrownLeft, 0); + accumulator.Accumulate(Keys.MouthPressLeft, 0); + accumulator.Accumulate(Keys.MouthUpperUpLeft, 0); + accumulator.Accumulate(Keys.MouthLowerDownLeft, 0); + accumulator.Accumulate(Keys.MouthStretchLeft, 0); + accumulator.Accumulate(Keys.MouthDimpleLeft, 0); + + accumulator.Accumulate(Keys.MouthRight, 0); + accumulator.Accumulate(Keys.MouthSmileRight, 0); + accumulator.Accumulate(Keys.MouthFrownRight, 0); + accumulator.Accumulate(Keys.MouthPressRight, 0); + accumulator.Accumulate(Keys.MouthUpperUpRight, 0); + accumulator.Accumulate(Keys.MouthLowerDownRight, 0); + accumulator.Accumulate(Keys.MouthStretchRight, 0); + accumulator.Accumulate(Keys.MouthDimpleRight, 0); + + accumulator.Accumulate(Keys.MouthClose, 0); + accumulator.Accumulate(Keys.MouthFunnel, 0); + accumulator.Accumulate(Keys.MouthPucker, 0); + accumulator.Accumulate(Keys.MouthShrugUpper, 0); + accumulator.Accumulate(Keys.MouthShrugLower, 0); + accumulator.Accumulate(Keys.MouthRollUpper, 0); + accumulator.Accumulate(Keys.MouthRollLower, 0); //あご - proxy.AccumulateValue(Keys.JawOpen, 0); - proxy.AccumulateValue(Keys.JawForward, 0); - proxy.AccumulateValue(Keys.JawLeft, 0); - proxy.AccumulateValue(Keys.JawRight, 0); + accumulator.Accumulate(Keys.JawOpen, 0); + accumulator.Accumulate(Keys.JawForward, 0); + accumulator.Accumulate(Keys.JawLeft, 0); + accumulator.Accumulate(Keys.JawRight, 0); //舌 - proxy.AccumulateValue(Keys.TongueOut, 0); + accumulator.Accumulate(Keys.TongueOut, 0); //ほお - proxy.AccumulateValue(Keys.CheekPuff, 0); - proxy.AccumulateValue(Keys.CheekSquintLeft, 0); - proxy.AccumulateValue(Keys.CheekSquintRight, 0); + accumulator.Accumulate(Keys.CheekPuff, 0); + accumulator.Accumulate(Keys.CheekSquintLeft, 0); + accumulator.Accumulate(Keys.CheekSquintRight, 0); } } private void AccumulateWithFlip( - VRMBlendShapeProxy proxy, IFaceTrackSource source, + ExpressionAccumulator accumulator, IFaceTrackSource source, bool nonMouthPart, bool mouthPart, bool writeExcludedKeys, float mouthWeight, float nonMouthWeight ) @@ -291,165 +293,169 @@ FaceControlConfiguration faceControlConfig { //目 var eye = source.Eye; - proxy.AccumulateValue(Keys.EyeBlinkRight, eye.LeftBlink * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookUpRight, eye.LeftLookUp * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookDownRight, eye.LeftLookDown * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookInRight, eye.LeftLookIn * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookOutRight, eye.LeftLookOut * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeWideRight, eye.LeftWide * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeSquintRight, eye.LeftSquint * nonMouthWeight); - - proxy.AccumulateValue(Keys.EyeBlinkLeft, eye.RightBlink * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookUpLeft, eye.RightLookUp * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookDownLeft, eye.RightLookDown * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookInLeft, eye.RightLookIn * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeLookOutLeft, eye.RightLookOut * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeWideLeft, eye.RightWide * nonMouthWeight); - proxy.AccumulateValue(Keys.EyeSquintLeft, eye.RightSquint * nonMouthWeight); + accumulator.Accumulate(Keys.EyeBlinkRight, eye.LeftBlink * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookUpRight, eye.LeftLookUp * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookDownRight, eye.LeftLookDown * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookInRight, eye.LeftLookIn * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookOutRight, eye.LeftLookOut * nonMouthWeight); + accumulator.Accumulate(Keys.EyeWideRight, eye.LeftWide * nonMouthWeight); + accumulator.Accumulate(Keys.EyeSquintRight, eye.LeftSquint * nonMouthWeight); + + accumulator.Accumulate(Keys.EyeBlinkLeft, eye.RightBlink * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookUpLeft, eye.RightLookUp * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookDownLeft, eye.RightLookDown * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookInLeft, eye.RightLookIn * nonMouthWeight); + accumulator.Accumulate(Keys.EyeLookOutLeft, eye.RightLookOut * nonMouthWeight); + accumulator.Accumulate(Keys.EyeWideLeft, eye.RightWide * nonMouthWeight); + accumulator.Accumulate(Keys.EyeSquintLeft, eye.RightSquint * nonMouthWeight); //NOTE: 瞬き時の目下げ処理に使うためにセット _faceControlConfig.AlternativeBlinkR = eye.LeftBlink; _faceControlConfig.AlternativeBlinkL = eye.RightBlink; //鼻 - proxy.AccumulateValue(Keys.NoseSneerRight, source.Nose.LeftSneer * nonMouthWeight); - proxy.AccumulateValue(Keys.NoseSneerLeft, source.Nose.RightSneer * nonMouthWeight); + accumulator.Accumulate(Keys.NoseSneerRight, source.Nose.LeftSneer * nonMouthWeight); + accumulator.Accumulate(Keys.NoseSneerLeft, source.Nose.RightSneer * nonMouthWeight); //まゆげ - proxy.AccumulateValue(Keys.BrowDownRight, source.Brow.LeftDown * nonMouthWeight); - proxy.AccumulateValue(Keys.BrowOuterUpRight, source.Brow.LeftOuterUp * nonMouthWeight); - proxy.AccumulateValue(Keys.BrowDownLeft, source.Brow.RightDown * nonMouthWeight); - proxy.AccumulateValue(Keys.BrowOuterUpLeft, source.Brow.RightOuterUp * nonMouthWeight); - proxy.AccumulateValue(Keys.BrowInnerUp, source.Brow.InnerUp * nonMouthWeight); + accumulator.Accumulate(Keys.BrowDownRight, source.Brow.LeftDown * nonMouthWeight); + accumulator.Accumulate(Keys.BrowOuterUpRight, source.Brow.LeftOuterUp * nonMouthWeight); + accumulator.Accumulate(Keys.BrowDownLeft, source.Brow.RightDown * nonMouthWeight); + accumulator.Accumulate(Keys.BrowOuterUpLeft, source.Brow.RightOuterUp * nonMouthWeight); + accumulator.Accumulate(Keys.BrowInnerUp, source.Brow.InnerUp * nonMouthWeight); } else if (writeExcludedKeys) { //目 - proxy.AccumulateValue(Keys.EyeBlinkRight, 0); - proxy.AccumulateValue(Keys.EyeLookUpRight, 0); - proxy.AccumulateValue(Keys.EyeLookDownRight, 0); - proxy.AccumulateValue(Keys.EyeLookInRight, 0); - proxy.AccumulateValue(Keys.EyeLookOutRight, 0); - proxy.AccumulateValue(Keys.EyeWideRight, 0); - proxy.AccumulateValue(Keys.EyeSquintRight, 0); - - proxy.AccumulateValue(Keys.EyeBlinkLeft, 0); - proxy.AccumulateValue(Keys.EyeLookUpLeft, 0); - proxy.AccumulateValue(Keys.EyeLookDownLeft, 0); - proxy.AccumulateValue(Keys.EyeLookInLeft, 0); - proxy.AccumulateValue(Keys.EyeLookOutLeft, 0); - proxy.AccumulateValue(Keys.EyeWideLeft, 0); - proxy.AccumulateValue(Keys.EyeSquintLeft, 0); + accumulator.Accumulate(Keys.EyeBlinkRight, 0); + accumulator.Accumulate(Keys.EyeLookUpRight, 0); + accumulator.Accumulate(Keys.EyeLookDownRight, 0); + accumulator.Accumulate(Keys.EyeLookInRight, 0); + accumulator.Accumulate(Keys.EyeLookOutRight, 0); + accumulator.Accumulate(Keys.EyeWideRight, 0); + accumulator.Accumulate(Keys.EyeSquintRight, 0); + + accumulator.Accumulate(Keys.EyeBlinkLeft, 0); + accumulator.Accumulate(Keys.EyeLookUpLeft, 0); + accumulator.Accumulate(Keys.EyeLookDownLeft, 0); + accumulator.Accumulate(Keys.EyeLookInLeft, 0); + accumulator.Accumulate(Keys.EyeLookOutLeft, 0); + accumulator.Accumulate(Keys.EyeWideLeft, 0); + accumulator.Accumulate(Keys.EyeSquintLeft, 0); //NOTE: 瞬き時の目下げ処理に使うためにセット...は非適用時は要らない。 // _faceControlConfig.AlternativeBlinkR = eye.LeftBlink; // _faceControlConfig.AlternativeBlinkL = eye.RightBlink; //鼻 - proxy.AccumulateValue(Keys.NoseSneerRight, 0); - proxy.AccumulateValue(Keys.NoseSneerLeft, 0); + accumulator.Accumulate(Keys.NoseSneerRight, 0); + accumulator.Accumulate(Keys.NoseSneerLeft, 0); //まゆげ - proxy.AccumulateValue(Keys.BrowDownRight, 0); - proxy.AccumulateValue(Keys.BrowOuterUpRight, 0); - proxy.AccumulateValue(Keys.BrowDownLeft, 0); - proxy.AccumulateValue(Keys.BrowOuterUpLeft, 0); - proxy.AccumulateValue(Keys.BrowInnerUp, 0); + accumulator.Accumulate(Keys.BrowDownRight, 0); + accumulator.Accumulate(Keys.BrowOuterUpRight, 0); + accumulator.Accumulate(Keys.BrowDownLeft, 0); + accumulator.Accumulate(Keys.BrowOuterUpLeft, 0); + accumulator.Accumulate(Keys.BrowInnerUp, 0); } if (mouthPart) { //口(多い) var mouth = source.Mouth; - proxy.AccumulateValue(Keys.MouthRight, mouth.Left * mouthWeight); - proxy.AccumulateValue(Keys.MouthSmileRight, mouth.LeftSmile * mouthWeight); - proxy.AccumulateValue(Keys.MouthFrownRight, mouth.LeftFrown * mouthWeight); - proxy.AccumulateValue(Keys.MouthPressRight, mouth.LeftPress * mouthWeight); - proxy.AccumulateValue(Keys.MouthUpperUpRight, mouth.LeftUpperUp * mouthWeight); - proxy.AccumulateValue(Keys.MouthLowerDownRight, mouth.LeftLowerDown * mouthWeight); - proxy.AccumulateValue(Keys.MouthStretchRight, mouth.LeftStretch * mouthWeight); - proxy.AccumulateValue(Keys.MouthDimpleRight, mouth.LeftDimple * mouthWeight); - - proxy.AccumulateValue(Keys.MouthLeft, mouth.Right * mouthWeight); - proxy.AccumulateValue(Keys.MouthSmileLeft, mouth.RightSmile * mouthWeight); - proxy.AccumulateValue(Keys.MouthFrownLeft, mouth.RightFrown * mouthWeight); - proxy.AccumulateValue(Keys.MouthPressLeft, mouth.RightPress * mouthWeight); - proxy.AccumulateValue(Keys.MouthUpperUpLeft, mouth.RightUpperUp * mouthWeight); - proxy.AccumulateValue(Keys.MouthLowerDownLeft, mouth.RightLowerDown * mouthWeight); - proxy.AccumulateValue(Keys.MouthStretchLeft, mouth.RightStretch * mouthWeight); - proxy.AccumulateValue(Keys.MouthDimpleLeft, mouth.RightDimple * mouthWeight); - - proxy.AccumulateValue(Keys.MouthClose, mouth.Close * mouthWeight); - proxy.AccumulateValue(Keys.MouthFunnel, mouth.Funnel * mouthWeight); - proxy.AccumulateValue(Keys.MouthPucker, mouth.Pucker * mouthWeight); - proxy.AccumulateValue(Keys.MouthShrugUpper, mouth.ShrugUpper * mouthWeight); - proxy.AccumulateValue(Keys.MouthShrugLower, mouth.ShrugLower * mouthWeight); - proxy.AccumulateValue(Keys.MouthRollUpper, mouth.RollUpper * mouthWeight); - proxy.AccumulateValue(Keys.MouthRollLower, mouth.RollLower * mouthWeight); + accumulator.Accumulate(Keys.MouthRight, mouth.Left * mouthWeight); + accumulator.Accumulate(Keys.MouthSmileRight, mouth.LeftSmile * mouthWeight); + accumulator.Accumulate(Keys.MouthFrownRight, mouth.LeftFrown * mouthWeight); + accumulator.Accumulate(Keys.MouthPressRight, mouth.LeftPress * mouthWeight); + accumulator.Accumulate(Keys.MouthUpperUpRight, mouth.LeftUpperUp * mouthWeight); + accumulator.Accumulate(Keys.MouthLowerDownRight, mouth.LeftLowerDown * mouthWeight); + accumulator.Accumulate(Keys.MouthStretchRight, mouth.LeftStretch * mouthWeight); + accumulator.Accumulate(Keys.MouthDimpleRight, mouth.LeftDimple * mouthWeight); + + accumulator.Accumulate(Keys.MouthLeft, mouth.Right * mouthWeight); + accumulator.Accumulate(Keys.MouthSmileLeft, mouth.RightSmile * mouthWeight); + accumulator.Accumulate(Keys.MouthFrownLeft, mouth.RightFrown * mouthWeight); + accumulator.Accumulate(Keys.MouthPressLeft, mouth.RightPress * mouthWeight); + accumulator.Accumulate(Keys.MouthUpperUpLeft, mouth.RightUpperUp * mouthWeight); + accumulator.Accumulate(Keys.MouthLowerDownLeft, mouth.RightLowerDown * mouthWeight); + accumulator.Accumulate(Keys.MouthStretchLeft, mouth.RightStretch * mouthWeight); + accumulator.Accumulate(Keys.MouthDimpleLeft, mouth.RightDimple * mouthWeight); + + accumulator.Accumulate(Keys.MouthClose, mouth.Close * mouthWeight); + accumulator.Accumulate(Keys.MouthFunnel, mouth.Funnel * mouthWeight); + accumulator.Accumulate(Keys.MouthPucker, mouth.Pucker * mouthWeight); + accumulator.Accumulate(Keys.MouthShrugUpper, mouth.ShrugUpper * mouthWeight); + accumulator.Accumulate(Keys.MouthShrugLower, mouth.ShrugLower * mouthWeight); + accumulator.Accumulate(Keys.MouthRollUpper, mouth.RollUpper * mouthWeight); + accumulator.Accumulate(Keys.MouthRollLower, mouth.RollLower * mouthWeight); //あご - proxy.AccumulateValue(Keys.JawOpen, source.Jaw.Open * mouthWeight); - proxy.AccumulateValue(Keys.JawForward, source.Jaw.Forward * mouthWeight); - proxy.AccumulateValue(Keys.JawRight, source.Jaw.Left * mouthWeight); - proxy.AccumulateValue(Keys.JawLeft, source.Jaw.Right * mouthWeight); + accumulator.Accumulate(Keys.JawOpen, source.Jaw.Open * mouthWeight); + accumulator.Accumulate(Keys.JawForward, source.Jaw.Forward * mouthWeight); + accumulator.Accumulate(Keys.JawRight, source.Jaw.Left * mouthWeight); + accumulator.Accumulate(Keys.JawLeft, source.Jaw.Right * mouthWeight); //舌 - proxy.AccumulateValue(Keys.TongueOut, source.Tongue.TongueOut * mouthWeight); + accumulator.Accumulate(Keys.TongueOut, source.Tongue.TongueOut * mouthWeight); //ほお - proxy.AccumulateValue(Keys.CheekPuff, source.Cheek.Puff * mouthWeight); - proxy.AccumulateValue(Keys.CheekSquintRight, source.Cheek.LeftSquint * mouthWeight); - proxy.AccumulateValue(Keys.CheekSquintLeft, source.Cheek.RightSquint * mouthWeight); + accumulator.Accumulate(Keys.CheekPuff, source.Cheek.Puff * mouthWeight); + accumulator.Accumulate(Keys.CheekSquintRight, source.Cheek.LeftSquint * mouthWeight); + accumulator.Accumulate(Keys.CheekSquintLeft, source.Cheek.RightSquint * mouthWeight); } else if (writeExcludedKeys) { //口(多い) - proxy.AccumulateValue(Keys.MouthRight, 0); - proxy.AccumulateValue(Keys.MouthSmileRight, 0); - proxy.AccumulateValue(Keys.MouthFrownRight, 0); - proxy.AccumulateValue(Keys.MouthPressRight, 0); - proxy.AccumulateValue(Keys.MouthUpperUpRight, 0); - proxy.AccumulateValue(Keys.MouthLowerDownRight, 0); - proxy.AccumulateValue(Keys.MouthStretchRight, 0); - proxy.AccumulateValue(Keys.MouthDimpleRight, 0); - - proxy.AccumulateValue(Keys.MouthLeft, 0); - proxy.AccumulateValue(Keys.MouthSmileLeft, 0); - proxy.AccumulateValue(Keys.MouthFrownLeft, 0); - proxy.AccumulateValue(Keys.MouthPressLeft, 0); - proxy.AccumulateValue(Keys.MouthUpperUpLeft, 0); - proxy.AccumulateValue(Keys.MouthLowerDownLeft, 0); - proxy.AccumulateValue(Keys.MouthStretchLeft, 0); - proxy.AccumulateValue(Keys.MouthDimpleLeft, 0); - - proxy.AccumulateValue(Keys.MouthClose, 0); - proxy.AccumulateValue(Keys.MouthFunnel, 0); - proxy.AccumulateValue(Keys.MouthPucker, 0); - proxy.AccumulateValue(Keys.MouthShrugUpper, 0); - proxy.AccumulateValue(Keys.MouthShrugLower, 0); - proxy.AccumulateValue(Keys.MouthRollUpper, 0); - proxy.AccumulateValue(Keys.MouthRollLower, 0); + accumulator.Accumulate(Keys.MouthRight, 0); + accumulator.Accumulate(Keys.MouthSmileRight, 0); + accumulator.Accumulate(Keys.MouthFrownRight, 0); + accumulator.Accumulate(Keys.MouthPressRight, 0); + accumulator.Accumulate(Keys.MouthUpperUpRight, 0); + accumulator.Accumulate(Keys.MouthLowerDownRight, 0); + accumulator.Accumulate(Keys.MouthStretchRight, 0); + accumulator.Accumulate(Keys.MouthDimpleRight, 0); + + accumulator.Accumulate(Keys.MouthLeft, 0); + accumulator.Accumulate(Keys.MouthSmileLeft, 0); + accumulator.Accumulate(Keys.MouthFrownLeft, 0); + accumulator.Accumulate(Keys.MouthPressLeft, 0); + accumulator.Accumulate(Keys.MouthUpperUpLeft, 0); + accumulator.Accumulate(Keys.MouthLowerDownLeft, 0); + accumulator.Accumulate(Keys.MouthStretchLeft, 0); + accumulator.Accumulate(Keys.MouthDimpleLeft, 0); + + accumulator.Accumulate(Keys.MouthClose, 0); + accumulator.Accumulate(Keys.MouthFunnel, 0); + accumulator.Accumulate(Keys.MouthPucker, 0); + accumulator.Accumulate(Keys.MouthShrugUpper, 0); + accumulator.Accumulate(Keys.MouthShrugLower, 0); + accumulator.Accumulate(Keys.MouthRollUpper, 0); + accumulator.Accumulate(Keys.MouthRollLower, 0); //あご - proxy.AccumulateValue(Keys.JawOpen, 0); - proxy.AccumulateValue(Keys.JawForward, 0); - proxy.AccumulateValue(Keys.JawRight, 0); - proxy.AccumulateValue(Keys.JawLeft, 0); + accumulator.Accumulate(Keys.JawOpen, 0); + accumulator.Accumulate(Keys.JawForward, 0); + accumulator.Accumulate(Keys.JawRight, 0); + accumulator.Accumulate(Keys.JawLeft, 0); //舌 - proxy.AccumulateValue(Keys.TongueOut, 0); + accumulator.Accumulate(Keys.TongueOut, 0); //ほお - proxy.AccumulateValue(Keys.CheekPuff, 0); - proxy.AccumulateValue(Keys.CheekSquintRight, 0); - proxy.AccumulateValue(Keys.CheekSquintLeft, 0); + accumulator.Accumulate(Keys.CheekPuff, 0); + accumulator.Accumulate(Keys.CheekSquintRight, 0); + accumulator.Accumulate(Keys.CheekSquintLeft, 0); } } private void ParseClipCompletenessToSendMessage() { //やること: パーフェクトシンク用に定義されていてほしいにも関わらず、定義が漏れたクリップがないかチェックする。 - var modelBlendShapeNames = _modelBaseClips.Select(c => c.BlendShapeName).ToArray(); + var modelBlendShapeNames = new HashSet( + _modelBasedMap.Keys + .Where(k => k.Preset == ExpressionPreset.custom) + .Select(k => k.Name) + ); var missedBlendShapeNames = Keys.BlendShapeNames .Where(n => !modelBlendShapeNames.Contains(n)) .ToList(); @@ -466,15 +472,13 @@ private void ParseClipCompletenessToSendMessage() //空文字列を送ることでエラーが解消したことを通知する _sender.SendCommand(MessageFactory.Instance.ExTrackerSetPerfectSyncMissedClipNames("")); } - } - private BlendShapeKey[] LoadNonPerfectSyncKeys() + private ExpressionKey[] LoadNonPerfectSyncKeys() { var perfectSyncKeys = Keys.PerfectSyncKeys; - return _modelBaseClips - .Select(BlendShapeKey.CreateFromClip) - .Where(key => !perfectSyncKeys.Any(k => k.Preset == key.Preset && k.Name == key.Name)) + return _modelBasedMap.Keys + .Where(key => !perfectSyncKeys.Any(k => k.Equals(key))) .ToArray(); } @@ -703,113 +707,104 @@ static Keys() }; } - /// - /// Perfect Syncでいじる対象のブレンドシェイプキー名の一覧を、大文字化される前の状態で取得します。 - /// - /// - /// UniVRMが0.55.0でも動くようにしてます(0.56.0ならPerfectSyncKeysのKeyのNameとかでも大丈夫) - /// + //TODO: これ大文字小文字の配慮おかしいかも。要注意です + /// Perfect Syncでいじる対象のブレンドシェイプキー名の一覧 public static string[] BlendShapeNames { get; } /// Perfect Syncでいじる対象のブレンドシェイプキー一覧を取得します。 - public static BlendShapeKey[] PerfectSyncKeys { get; } + public static ExpressionKey[] PerfectSyncKeys { get; } /// Perfect Syncの口、ほお、顎、舌のキーを取得します。 - public static BlendShapeKey[] PerfectSyncMouthKeys { get; } + public static ExpressionKey[] PerfectSyncMouthKeys { get; } /// Perfect Syncの目、鼻、眉のキーを取得します。 - public static BlendShapeKey[] PerfectSyncNonMouthKeys { get; } + public static ExpressionKey[] PerfectSyncNonMouthKeys { get; } //目 - public static readonly BlendShapeKey EyeBlinkLeft = BlendShapeKey.CreateUnknown(nameof(EyeBlinkLeft)); - public static readonly BlendShapeKey EyeLookUpLeft = BlendShapeKey.CreateUnknown(nameof(EyeLookUpLeft)); - public static readonly BlendShapeKey EyeLookDownLeft = BlendShapeKey.CreateUnknown(nameof(EyeLookDownLeft)); - public static readonly BlendShapeKey EyeLookInLeft = BlendShapeKey.CreateUnknown(nameof(EyeLookInLeft)); - public static readonly BlendShapeKey EyeLookOutLeft = BlendShapeKey.CreateUnknown(nameof(EyeLookOutLeft)); - public static readonly BlendShapeKey EyeWideLeft = BlendShapeKey.CreateUnknown(nameof(EyeWideLeft)); - public static readonly BlendShapeKey EyeSquintLeft = BlendShapeKey.CreateUnknown(nameof(EyeSquintLeft)); - - public static readonly BlendShapeKey EyeBlinkRight = BlendShapeKey.CreateUnknown(nameof(EyeBlinkRight)); - public static readonly BlendShapeKey EyeLookUpRight = BlendShapeKey.CreateUnknown(nameof(EyeLookUpRight)); - public static readonly BlendShapeKey EyeLookDownRight = BlendShapeKey.CreateUnknown(nameof(EyeLookDownRight)); - public static readonly BlendShapeKey EyeLookInRight = BlendShapeKey.CreateUnknown(nameof(EyeLookInRight)); - public static readonly BlendShapeKey EyeLookOutRight = BlendShapeKey.CreateUnknown(nameof(EyeLookOutRight)); - public static readonly BlendShapeKey EyeWideRight = BlendShapeKey.CreateUnknown(nameof(EyeWideRight)); - public static readonly BlendShapeKey EyeSquintRight = BlendShapeKey.CreateUnknown(nameof(EyeSquintRight)); + public static readonly ExpressionKey EyeBlinkLeft = ExpressionKey.CreateCustom(nameof(EyeBlinkLeft)); + public static readonly ExpressionKey EyeLookUpLeft = ExpressionKey.CreateCustom(nameof(EyeLookUpLeft)); + public static readonly ExpressionKey EyeLookDownLeft = ExpressionKey.CreateCustom(nameof(EyeLookDownLeft)); + public static readonly ExpressionKey EyeLookInLeft = ExpressionKey.CreateCustom(nameof(EyeLookInLeft)); + public static readonly ExpressionKey EyeLookOutLeft = ExpressionKey.CreateCustom(nameof(EyeLookOutLeft)); + public static readonly ExpressionKey EyeWideLeft = ExpressionKey.CreateCustom(nameof(EyeWideLeft)); + public static readonly ExpressionKey EyeSquintLeft = ExpressionKey.CreateCustom(nameof(EyeSquintLeft)); + + public static readonly ExpressionKey EyeBlinkRight = ExpressionKey.CreateCustom(nameof(EyeBlinkRight)); + public static readonly ExpressionKey EyeLookUpRight = ExpressionKey.CreateCustom(nameof(EyeLookUpRight)); + public static readonly ExpressionKey EyeLookDownRight = ExpressionKey.CreateCustom(nameof(EyeLookDownRight)); + public static readonly ExpressionKey EyeLookInRight = ExpressionKey.CreateCustom(nameof(EyeLookInRight)); + public static readonly ExpressionKey EyeLookOutRight = ExpressionKey.CreateCustom(nameof(EyeLookOutRight)); + public static readonly ExpressionKey EyeWideRight = ExpressionKey.CreateCustom(nameof(EyeWideRight)); + public static readonly ExpressionKey EyeSquintRight = ExpressionKey.CreateCustom(nameof(EyeSquintRight)); //口(多い) - public static readonly BlendShapeKey MouthLeft = BlendShapeKey.CreateUnknown(nameof(MouthLeft)); - public static readonly BlendShapeKey MouthSmileLeft = BlendShapeKey.CreateUnknown(nameof(MouthSmileLeft)); - public static readonly BlendShapeKey MouthFrownLeft = BlendShapeKey.CreateUnknown(nameof(MouthFrownLeft)); - public static readonly BlendShapeKey MouthPressLeft = BlendShapeKey.CreateUnknown(nameof(MouthPressLeft)); - public static readonly BlendShapeKey MouthUpperUpLeft = BlendShapeKey.CreateUnknown(nameof(MouthUpperUpLeft)); - public static readonly BlendShapeKey MouthLowerDownLeft = BlendShapeKey.CreateUnknown(nameof(MouthLowerDownLeft)); - public static readonly BlendShapeKey MouthStretchLeft = BlendShapeKey.CreateUnknown(nameof(MouthStretchLeft)); - public static readonly BlendShapeKey MouthDimpleLeft = BlendShapeKey.CreateUnknown(nameof(MouthDimpleLeft)); - - public static readonly BlendShapeKey MouthRight = BlendShapeKey.CreateUnknown(nameof(MouthRight)); - public static readonly BlendShapeKey MouthSmileRight = BlendShapeKey.CreateUnknown(nameof(MouthSmileRight)); - public static readonly BlendShapeKey MouthFrownRight = BlendShapeKey.CreateUnknown(nameof(MouthFrownRight)); - public static readonly BlendShapeKey MouthPressRight = BlendShapeKey.CreateUnknown(nameof(MouthPressRight)); - public static readonly BlendShapeKey MouthUpperUpRight = BlendShapeKey.CreateUnknown(nameof(MouthUpperUpRight)); - public static readonly BlendShapeKey MouthLowerDownRight = BlendShapeKey.CreateUnknown(nameof(MouthLowerDownRight)); - public static readonly BlendShapeKey MouthStretchRight = BlendShapeKey.CreateUnknown(nameof(MouthStretchRight)); - public static readonly BlendShapeKey MouthDimpleRight = BlendShapeKey.CreateUnknown(nameof(MouthDimpleRight)); + public static readonly ExpressionKey MouthLeft = ExpressionKey.CreateCustom(nameof(MouthLeft)); + public static readonly ExpressionKey MouthSmileLeft = ExpressionKey.CreateCustom(nameof(MouthSmileLeft)); + public static readonly ExpressionKey MouthFrownLeft = ExpressionKey.CreateCustom(nameof(MouthFrownLeft)); + public static readonly ExpressionKey MouthPressLeft = ExpressionKey.CreateCustom(nameof(MouthPressLeft)); + public static readonly ExpressionKey MouthUpperUpLeft = ExpressionKey.CreateCustom(nameof(MouthUpperUpLeft)); + public static readonly ExpressionKey MouthLowerDownLeft = ExpressionKey.CreateCustom(nameof(MouthLowerDownLeft)); + public static readonly ExpressionKey MouthStretchLeft = ExpressionKey.CreateCustom(nameof(MouthStretchLeft)); + public static readonly ExpressionKey MouthDimpleLeft = ExpressionKey.CreateCustom(nameof(MouthDimpleLeft)); + + public static readonly ExpressionKey MouthRight = ExpressionKey.CreateCustom(nameof(MouthRight)); + public static readonly ExpressionKey MouthSmileRight = ExpressionKey.CreateCustom(nameof(MouthSmileRight)); + public static readonly ExpressionKey MouthFrownRight = ExpressionKey.CreateCustom(nameof(MouthFrownRight)); + public static readonly ExpressionKey MouthPressRight = ExpressionKey.CreateCustom(nameof(MouthPressRight)); + public static readonly ExpressionKey MouthUpperUpRight = ExpressionKey.CreateCustom(nameof(MouthUpperUpRight)); + public static readonly ExpressionKey MouthLowerDownRight = ExpressionKey.CreateCustom(nameof(MouthLowerDownRight)); + public static readonly ExpressionKey MouthStretchRight = ExpressionKey.CreateCustom(nameof(MouthStretchRight)); + public static readonly ExpressionKey MouthDimpleRight = ExpressionKey.CreateCustom(nameof(MouthDimpleRight)); - public static readonly BlendShapeKey MouthClose = BlendShapeKey.CreateUnknown(nameof(MouthClose)); - public static readonly BlendShapeKey MouthFunnel = BlendShapeKey.CreateUnknown(nameof(MouthFunnel)); - public static readonly BlendShapeKey MouthPucker = BlendShapeKey.CreateUnknown(nameof(MouthPucker)); - public static readonly BlendShapeKey MouthShrugUpper = BlendShapeKey.CreateUnknown(nameof(MouthShrugUpper)); - public static readonly BlendShapeKey MouthShrugLower = BlendShapeKey.CreateUnknown(nameof(MouthShrugLower)); - public static readonly BlendShapeKey MouthRollUpper = BlendShapeKey.CreateUnknown(nameof(MouthRollUpper)); - public static readonly BlendShapeKey MouthRollLower = BlendShapeKey.CreateUnknown(nameof(MouthRollLower)); + public static readonly ExpressionKey MouthClose = ExpressionKey.CreateCustom(nameof(MouthClose)); + public static readonly ExpressionKey MouthFunnel = ExpressionKey.CreateCustom(nameof(MouthFunnel)); + public static readonly ExpressionKey MouthPucker = ExpressionKey.CreateCustom(nameof(MouthPucker)); + public static readonly ExpressionKey MouthShrugUpper = ExpressionKey.CreateCustom(nameof(MouthShrugUpper)); + public static readonly ExpressionKey MouthShrugLower = ExpressionKey.CreateCustom(nameof(MouthShrugLower)); + public static readonly ExpressionKey MouthRollUpper = ExpressionKey.CreateCustom(nameof(MouthRollUpper)); + public static readonly ExpressionKey MouthRollLower = ExpressionKey.CreateCustom(nameof(MouthRollLower)); //あご - public static readonly BlendShapeKey JawOpen = BlendShapeKey.CreateUnknown(nameof(JawOpen)); - public static readonly BlendShapeKey JawForward = BlendShapeKey.CreateUnknown(nameof(JawForward)); - public static readonly BlendShapeKey JawLeft = BlendShapeKey.CreateUnknown(nameof(JawLeft)); - public static readonly BlendShapeKey JawRight = BlendShapeKey.CreateUnknown(nameof(JawRight)); + public static readonly ExpressionKey JawOpen = ExpressionKey.CreateCustom(nameof(JawOpen)); + public static readonly ExpressionKey JawForward = ExpressionKey.CreateCustom(nameof(JawForward)); + public static readonly ExpressionKey JawLeft = ExpressionKey.CreateCustom(nameof(JawLeft)); + public static readonly ExpressionKey JawRight = ExpressionKey.CreateCustom(nameof(JawRight)); //鼻 - public static readonly BlendShapeKey NoseSneerLeft = BlendShapeKey.CreateUnknown(nameof(NoseSneerLeft)); - public static readonly BlendShapeKey NoseSneerRight = BlendShapeKey.CreateUnknown(nameof(NoseSneerRight)); + public static readonly ExpressionKey NoseSneerLeft = ExpressionKey.CreateCustom(nameof(NoseSneerLeft)); + public static readonly ExpressionKey NoseSneerRight = ExpressionKey.CreateCustom(nameof(NoseSneerRight)); //ほお - public static readonly BlendShapeKey CheekPuff = BlendShapeKey.CreateUnknown(nameof(CheekPuff)); - public static readonly BlendShapeKey CheekSquintLeft = BlendShapeKey.CreateUnknown(nameof(CheekSquintLeft)); - public static readonly BlendShapeKey CheekSquintRight = BlendShapeKey.CreateUnknown(nameof(CheekSquintRight)); + public static readonly ExpressionKey CheekPuff = ExpressionKey.CreateCustom(nameof(CheekPuff)); + public static readonly ExpressionKey CheekSquintLeft = ExpressionKey.CreateCustom(nameof(CheekSquintLeft)); + public static readonly ExpressionKey CheekSquintRight = ExpressionKey.CreateCustom(nameof(CheekSquintRight)); //舌 - public static readonly BlendShapeKey TongueOut = BlendShapeKey.CreateUnknown(nameof(TongueOut)); + public static readonly ExpressionKey TongueOut = ExpressionKey.CreateCustom(nameof(TongueOut)); //まゆげ - public static readonly BlendShapeKey BrowDownLeft = BlendShapeKey.CreateUnknown(nameof(BrowDownLeft)); - public static readonly BlendShapeKey BrowOuterUpLeft = BlendShapeKey.CreateUnknown(nameof(BrowOuterUpLeft)); - public static readonly BlendShapeKey BrowDownRight = BlendShapeKey.CreateUnknown(nameof(BrowDownRight)); - public static readonly BlendShapeKey BrowOuterUpRight = BlendShapeKey.CreateUnknown(nameof(BrowOuterUpRight)); - public static readonly BlendShapeKey BrowInnerUp = BlendShapeKey.CreateUnknown(nameof(BrowInnerUp)); + public static readonly ExpressionKey BrowDownLeft = ExpressionKey.CreateCustom(nameof(BrowDownLeft)); + public static readonly ExpressionKey BrowOuterUpLeft = ExpressionKey.CreateCustom(nameof(BrowOuterUpLeft)); + public static readonly ExpressionKey BrowDownRight = ExpressionKey.CreateCustom(nameof(BrowDownRight)); + public static readonly ExpressionKey BrowOuterUpRight = ExpressionKey.CreateCustom(nameof(BrowOuterUpRight)); + public static readonly ExpressionKey BrowInnerUp = ExpressionKey.CreateCustom(nameof(BrowInnerUp)); } /// ブレンドシェイプの上書き処理で使うための、リップシンクのブレンドシェイプキー struct LipSyncValues { - public LipSyncValues(VRMBlendShapeProxy proxy) + //NOTE: Accumulatorを渡すほうが良ければ修正してほしい + public LipSyncValues(Vrm10RuntimeExpression expression) { - A = proxy.GetValue(AKey); - I = proxy.GetValue(IKey); - U = proxy.GetValue(UKey); - E = proxy.GetValue(EKey); - O = proxy.GetValue(OKey); + A = expression.GetWeight(ExpressionKey.Aa); + I = expression.GetWeight(ExpressionKey.Ih); + U = expression.GetWeight(ExpressionKey.Ou); + E = expression.GetWeight(ExpressionKey.Ee); + O = expression.GetWeight(ExpressionKey.Oh); } public float A { get; set; } public float I { get; set; } public float U { get; set; } public float E { get; set; } public float O { get; set; } - - public static readonly BlendShapeKey AKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.A); - public static readonly BlendShapeKey IKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.I); - public static readonly BlendShapeKey UKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.U); - public static readonly BlendShapeKey EKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.E); - public static readonly BlendShapeKey OKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.O); } } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeCompatUtil.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeCompatUtil.cs new file mode 100644 index 00000000..b6c0b194 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeCompatUtil.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; + +namespace Baku.VMagicMirror +{ + public static class BlendShapeCompatUtil + { + private static readonly Dictionary _oldNameToNewName = new Dictionary() + { + ["Joy"] = "Happy", + ["Sorrow"] = "Sad", + ["Fun"] = "Relaxed", + ["Blink_L"] = "BlinkLeft", + ["Blink_R"] = "BlinkRight", + + ["A"] = "Aa", + ["I"] = "Ih", + ["U"] = "Ou", + ["E"] = "Ee", + ["O"] = "Oh", + }; + + public static string GetVrm10ClipName(string vrm0ClipName) + { + return + (_oldNameToNewName.TryGetValue(vrm0ClipName, out var newName) ? newName : vrm0ClipName) + ?? ""; + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/ReplacedVRMSpringBoneScheduler.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeCompatUtil.cs.meta similarity index 83% rename from VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/ReplacedVRMSpringBoneScheduler.cs.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeCompatUtil.cs.meta index 5f03dea9..1216e7d0 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/ReplacedVRMSpringBoneScheduler.cs.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeCompatUtil.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 77bb3dbd3237db944b66c85850a76101 +guid: b00c8c6c9af79234d86c1b0ccad32138 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeExclusivenessChecker.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeExclusivenessChecker.cs new file mode 100644 index 00000000..5aec8e9f --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeExclusivenessChecker.cs @@ -0,0 +1,33 @@ +using System.Linq; +using UniGLTF.Extensions.VRMC_vrm; +using UniVRM10; + +namespace Baku.VMagicMirror +{ + public class BlendShapeExclusivenessChecker + { + public BlendShapeExclusivenessChecker(IVRMLoadable vrmLoadable) + { + vrmLoadable.VrmLoaded += CheckBlendShape; + } + + private void CheckBlendShape(VrmLoadedInfo info) + { + //表情のセットアップで排他系の設定がちゃんとあると検出するクラス + var expr = info.instance.Vrm.Expression; + + var clipAboutOverride = expr.Clips.FirstOrDefault(c => + c.Clip.OverrideBlink != ExpressionOverrideType.none || + c.Clip.OverrideMouth != ExpressionOverrideType.none || + c.Clip.OverrideLookAt != ExpressionOverrideType.none + ); + + if (clipAboutOverride.Preset != ExpressionPreset.custom || + !string.IsNullOrEmpty(clipAboutOverride.Clip.name) + ) + { + LogOutput.Instance.Write($"Avatar has some exclusive blendshape setup, {clipAboutOverride.Preset} / {clipAboutOverride.Clip.name}"); + } + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInitializer.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeExclusivenessChecker.cs.meta similarity index 83% rename from VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInitializer.cs.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeExclusivenessChecker.cs.meta index b2521f31..757bce89 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInitializer.cs.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeExclusivenessChecker.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a125f000c2a422b4c88a36e60296385a +guid: 366bf12bbbb9ea84584856b52dccf526 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInitializer.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInitializer.cs deleted file mode 100644 index 938bc1c8..00000000 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInitializer.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using Zenject; -using VRM; - -namespace Baku.VMagicMirror -{ - /// 毎フレームの冒頭で全ブレンドシェイプの値が0になるように前処理するスクリプト。 - /// - /// VMagicMirrorではブレンドシェイプ値は毎フレームごとに細かくAccumulate and Applyするようになっているので、 - /// フレーム開始の時点では表情データが残ってないのが望ましい。 - /// ※ちょっと負荷に効くかもしれないのでそこは要チェック - /// - public class BlendShapeInitializer : MonoBehaviour - { - private static readonly Dictionary _presetKeys = new Dictionary() - { - ["Blink"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), - ["Blink_L"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_L), - ["Blink_R"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_R), - - ["LookLeft"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.LookLeft), - ["LookRight"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.LookRight), - ["LookUp"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.LookUp), - ["LookDown"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.LookDown), - - ["A"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.A), - ["I"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.I), - ["U"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.U), - ["E"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.E), - ["O"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.O), - - ["Joy"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy), - ["Angry"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.Angry), - ["Sorrow"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.Sorrow), - ["Fun"] = BlendShapeKey.CreateFromPreset(BlendShapePreset.Fun), - }; - - private static readonly BlendShapeKey[] _lipSyncKeys = new[] - { - BlendShapeKey.CreateFromPreset(BlendShapePreset.A), - BlendShapeKey.CreateFromPreset(BlendShapePreset.I), - BlendShapeKey.CreateFromPreset(BlendShapePreset.U), - BlendShapeKey.CreateFromPreset(BlendShapePreset.E), - BlendShapeKey.CreateFromPreset(BlendShapePreset.O), - }; - - [Inject] - public void Initialize(IVRMLoadable vrmLoadable) - { - vrmLoadable.VrmLoaded += info => - { - _proxy = info.blendShape; - _hasModel = true; - //NOTE: ReloadClipsのなかで_hasModelによるガードがかかってるのを踏まえてこういう順番です - ReloadClips(); - }; - - vrmLoadable.VrmDisposing += () => - { - _hasModel = false; - _proxy = null; - }; - } - - private bool _hasModel; - private VRMBlendShapeProxy _proxy; - private BlendShapeKey[] _keys = new BlendShapeKey[0]; - - public void ReloadClips() - { - if (!_hasModel) - { - return; - } - - _keys = CreateKeys( - _proxy.BlendShapeAvatar - .Clips - .Select(c => c.BlendShapeName) - ); - } - - /// - /// すべてのクリップにゼロを当て込みます。 - /// - public void InitializeBlendShapes() - { - if (!_hasModel) - { - return; - } - - for (int i = 0; i < _keys.Length; i++) - { - _proxy.AccumulateValue(_keys[i], 0); - } - } - - /// - /// 指定したキーのクリップ値をゼロにします。 - /// - /// - public void InitializeBlendShapes(BlendShapeKey[] keys) - { - if (!_hasModel) - { - return; - } - - for (int i = 0; i < keys.Length; i++) - { - _proxy.AccumulateValue(keys[i], 0); - } - } - - - private static BlendShapeKey[] CreateKeys(IEnumerable names) - { - return names - .Select(n => - _presetKeys.ContainsKey(n) - ? _presetKeys[n] - : BlendShapeKey.CreateUnknown(n) - ) - .ToArray(); - } - } -} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInterpolator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInterpolator.cs index ea9a29bd..d439f7e8 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInterpolator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeInterpolator.cs @@ -2,7 +2,7 @@ using System.Linq; using UniRx; using UnityEngine; -using VRM; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -10,6 +10,7 @@ namespace Baku.VMagicMirror /// /// で適用する表情のうち、 /// FaceSwitchとWord to Motionを適用するときのフェードを考慮できるようにするクラス + /// NOTE: VRM 1.0の排他がどうとかはあまり考えてない実装であることに注意 /// public class BlendShapeInterpolator : MonoBehaviour { @@ -46,20 +47,20 @@ public class BlendShapeInterpolator : MonoBehaviour vrmLoadable.VrmLoaded += info => { - _blendShapeAvatar = info.blendShape.BlendShapeAvatar; - //CheckBinaryClips(_blendShapeAvatar); + _expressionMap = info.instance.Vrm.Expression.LoadExpressionMap(); + //CheckBinaryClips(_expressionMap); _hasModel = true; }; vrmLoadable.VrmDisposing += () => { _hasModel = false; - _blendShapeAvatar = null; + _expressionMap = null; }; } private bool _hasModel; - private BlendShapeAvatar _blendShapeAvatar; + private VRM10ExpressionMap _expressionMap; private EyeBoneAngleSetter _eyeBoneAngleSetter; private bool _interpolateBlendShapeWeight = true; @@ -184,23 +185,23 @@ public void UpdateWeight() //NOTE: fromかtoにFaceSwitch / WtMいずれかの表情が入っている時だけ呼ぶ想定の関数。 //ただし、それ以外のケースで呼んでも破綻はしないはず - public void Accumulate(VRMBlendShapeProxy proxy) + public void Accumulate(ExpressionAccumulator accumulator) { foreach (var item in _fromState.Keys) { - proxy.AccumulateValue(item.Item1, item.Item2 * _fromState.Weight); + accumulator.Accumulate(item.Item1, item.Item2 * _fromState.Weight); } foreach (var item in _toState.Keys) { - proxy.AccumulateValue(item.Item1, item.Item2 * _toState.Weight); + accumulator.Accumulate(item.Item1, item.Item2 * _toState.Weight); } //WtM / Face Switchが効いているときは目ボーンをデフォルト位置に引っ張り戻す _eyeBoneAngleSetter.ReserveWeight = NonMouthWeight; } - private void SetFaceSwitch(BlendShapeKey key, bool keepLipSync) + private void SetFaceSwitch(ExpressionKey key, bool keepLipSync) { Write(_faceSwitchState, key, keepLipSync); @@ -214,7 +215,7 @@ private void SetFaceSwitch(BlendShapeKey key, bool keepLipSync) Write(_toState, key, keepLipSync); _faceAppliedCount = 0; - void Write(State target, BlendShapeKey bsKey, bool bsKeepLipSync) + void Write(State target, ExpressionKey bsKey, bool bsKeepLipSync) { target.IsEmpty = false; target.Weight = 0f; @@ -222,11 +223,12 @@ void Write(State target, BlendShapeKey bsKey, bool bsKeepLipSync) target.Keys.Clear(); target.Keys.Add((bsKey, 1f)); target.KeepLipSync = bsKeepLipSync; - target.IsBinary = _hasModel && _blendShapeAvatar.GetClip(bsKey)?.IsBinary == true; + target.IsBinary = + _hasModel && _expressionMap.TryGet(bsKey, out var clip) && clip.IsBinary; } } - private void SetWordToMotion(List<(BlendShapeKey, float)> blendShapes, bool keepLipSync, bool isPreview) + private void SetWordToMotion(List<(ExpressionKey, float)> blendShapes, bool keepLipSync, bool isPreview) { _toState.CopyTo(_fromState); @@ -245,8 +247,7 @@ private void SetWordToMotion(List<(BlendShapeKey, float)> blendShapes, bool keep { return false; } - var clip = _blendShapeAvatar.GetClip(key); - return (clip != null) && clip.IsBinary; + return _expressionMap.TryGet(key, out var clip) && clip.IsBinary; })); _faceAppliedCount = 0; @@ -271,11 +272,11 @@ private void Clear() } //DEBUG用: 読み込んだモデルでIsBinaryなBlendShapeを確認する - private void CheckBinaryClips(BlendShapeAvatar blendShapeAvatar) + private void CheckBinaryClips(VRM10ObjectExpression expressions) { - foreach (var clip in blendShapeAvatar.Clips) + foreach (var clip in expressions.Clips) { - Debug.Log($"BlendShapeClip.Key={clip.Key}, IsBinary={clip.IsBinary}"); + Debug.Log($"BlendShapeClip.Key=({clip.Preset}){clip.Clip.name}, IsBinary={clip.Clip.IsBinary}"); } } @@ -283,7 +284,7 @@ private void CheckBinaryClips(BlendShapeAvatar blendShapeAvatar) class State { public bool IsEmpty { get; set; } - public List<(BlendShapeKey, float)> Keys { get; } = new List<(BlendShapeKey, float)>(8); + public List<(ExpressionKey, float)> Keys { get; } = new List<(ExpressionKey, float)>(8); public bool KeepLipSync { get; set; } public bool IsBinary { get; set; } public float Weight { get; set; } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeKeyFactory.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeKeyFactory.cs index 917a8e13..1e8f0d88 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeKeyFactory.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeKeyFactory.cs @@ -33,9 +33,12 @@ static BlendShapeKeyFactory() /// /// VMagicMirrorではプリセットと重複する名称のブレンドシェイプ名があるモデルは変な動きするかも、という事になる。 /// +#pragma warning disable CS0618 public static BlendShapeKey CreateFrom(string name) => _presets.ContainsKey(name) ? BlendShapeKey.CreateFromPreset(_presets[name]) : BlendShapeKey.CreateUnknown(name); +#pragma warning restore CS0618 + } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeResultSetter.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeResultSetter.cs index 9fa006c6..294a17c1 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeResultSetter.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/BlendShapeResultSetter.cs @@ -1,6 +1,6 @@ using Baku.VMagicMirror.ExternalTracker; using UnityEngine; -using VRM; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -18,11 +18,9 @@ public class BlendShapeResultSetter : MonoBehaviour [SerializeField] private BlendShapeInterpolator blendShapeInterpolator = null; private ExternalTrackerDataSource _exTracker = null; - private BlendShapeInitializer _initializer = null; private WordToMotionBlendShape _wtmBlendShape = null; - + private ExpressionAccumulator _accumulator = null; private bool _hasModel = false; - private VRMBlendShapeProxy _blendShape = null; //NOTE: ここのコンポーネントの書き順は実は優先度を表している: 後ろのやつほど上書きの権利が強い [Inject] @@ -30,25 +28,16 @@ public class BlendShapeResultSetter : MonoBehaviour IMessageReceiver receiver, IVRMLoadable vrmLoadable, ExternalTrackerDataSource exTracker, - BlendShapeInitializer initializer, - WordToMotionBlendShape wtmBlendShape + WordToMotionBlendShape wtmBlendShape, + ExpressionAccumulator accumulator ) { _exTracker = exTracker; - _initializer = initializer; _wtmBlendShape = wtmBlendShape; + _accumulator = accumulator; - vrmLoadable.VrmLoaded += info => - { - _blendShape = info.blendShape; - _hasModel = true; - }; - - vrmLoadable.VrmDisposing += () => - { - _hasModel = false; - _blendShape = null; - }; + vrmLoadable.VrmLoaded += info => _hasModel = true; + vrmLoadable.VrmDisposing += () => _hasModel = false; blendShapeInterpolator.Setup(faceSwitch, wtmBlendShape); } @@ -74,7 +63,8 @@ private void LateUpdate() { WriteClips(); } - _blendShape.Apply(); + + _accumulator.Apply(); } private void WriteClips() @@ -88,26 +78,26 @@ private void WriteClips() if (!_wtmBlendShape.KeepLipSync) { //そもそもリップシンクは切ってよいケース: シンプルにゼロ埋め + WtMを適用 - _initializer.InitializeBlendShapes(); - _wtmBlendShape.Accumulate(_blendShape); + _accumulator.ResetValues(); + _wtmBlendShape.Accumulate(_accumulator); } else if (_exTracker.Connected && perfectSync.IsActive && perfectSync.PreferWriteMouthBlendShape) { //WtM + パーフェクトシンクの口周りを適用するケース: 口周りのゼロ埋めをサボれるのでサボる - _initializer.InitializeBlendShapes(perfectSync.NonPerfectSyncKeys); - _initializer.InitializeBlendShapes(ExternalTrackerPerfectSync.Keys.PerfectSyncNonMouthKeys); - _wtmBlendShape.Accumulate(_blendShape); - perfectSync.Accumulate(_blendShape, false, true, false); + _accumulator.SetZero(perfectSync.NonPerfectSyncKeys); + _accumulator.SetZero(ExternalTrackerPerfectSync.Keys.PerfectSyncNonMouthKeys); + _wtmBlendShape.Accumulate(_accumulator); + perfectSync.Accumulate(_accumulator, false, true, false); } else { //WtM + AIUEOの口を適用するケース: 重複がAIUEOの5個だけなのでザツにやっちゃう - _initializer.InitializeBlendShapes(); - _wtmBlendShape.Accumulate(_blendShape); - lipSync.Accumulate(_blendShape); + _accumulator.ResetValues(); + _wtmBlendShape.Accumulate(_accumulator); + lipSync.Accumulate(_accumulator); } - neutralClipSettings.ApplyOffsetClip(_blendShape); + neutralClipSettings.AccumulateOffsetClip(_accumulator); return; } @@ -118,26 +108,26 @@ private void WriteClips() //NOTE: WtMと同じく、パーフェクトシンクの口と組み合わす場合のコストに多少配慮した書き方。 if (!faceSwitch.KeepLipSync) { - _initializer.InitializeBlendShapes(); - faceSwitch.Accumulate(_blendShape); + _accumulator.ResetValues(); + faceSwitch.Accumulate(_accumulator); } else if (_exTracker.Connected && perfectSync.IsActive && perfectSync.PreferWriteMouthBlendShape) { //Face Switch + パーフェクトシンクの口周りを適用: 口周りのパーフェクトシンクのゼロ埋めをサボれるのでサボる - _initializer.InitializeBlendShapes(perfectSync.NonPerfectSyncKeys); - _initializer.InitializeBlendShapes(ExternalTrackerPerfectSync.Keys.PerfectSyncNonMouthKeys); - faceSwitch.Accumulate(_blendShape); - perfectSync.Accumulate(_blendShape, false, true, false); + _accumulator.SetZero(perfectSync.NonPerfectSyncKeys); + _accumulator.SetZero(ExternalTrackerPerfectSync.Keys.PerfectSyncNonMouthKeys); + faceSwitch.Accumulate(_accumulator); + perfectSync.Accumulate(_accumulator, false, true, false); } else { //FaceSwitch + AIUEOを適用するケース: 重複がAIUEOの5個だけなのでザツにやっちゃう - _initializer.InitializeBlendShapes(); - faceSwitch.Accumulate(_blendShape); - lipSync.Accumulate(_blendShape); + _accumulator.ResetValues(); + faceSwitch.Accumulate(_accumulator); + lipSync.Accumulate(_accumulator); } - neutralClipSettings.ApplyOffsetClip(_blendShape); + neutralClipSettings.AccumulateOffsetClip(_accumulator); return; } @@ -146,22 +136,22 @@ private void WriteClips() if (perfectSync.IsReadyToAccumulate) { //パーフェクトシンクじゃないクリップを0埋め - _initializer.InitializeBlendShapes(perfectSync.NonPerfectSyncKeys); + _accumulator.SetZero(perfectSync.NonPerfectSyncKeys); //パーフェクトシンクのクリップを埋め: このとき口まわりは設定次第で0埋めか有効値で埋めるかが変化 perfectSync.Accumulate( - _blendShape, true, perfectSync.PreferWriteMouthBlendShape, true + _accumulator, true, perfectSync.PreferWriteMouthBlendShape, true ); //外部トラッキングの口形状を使わない: このときはlipSyncのほうでも //マイクベースのリップシンクが優先になっているので、それを適用 if (!perfectSync.PreferWriteMouthBlendShape) { - lipSync.Accumulate(_blendShape); + lipSync.Accumulate(_accumulator); } - neutralClipSettings.ApplyNeutralClip(_blendShape); - neutralClipSettings.ApplyOffsetClip(_blendShape); + neutralClipSettings.AccumulateNeutralClip(_accumulator); + neutralClipSettings.AccumulateOffsetClip(_accumulator); return; } @@ -169,12 +159,12 @@ private void WriteClips() // - 口: パーフェクトシンクの画像 or マイク // - 目: パーフェクトシンクの目 or webカメラ or AutoBlink // という使い分けがあるが、この分岐は各コンポーネントのレベルで面倒を見てもらえる - _initializer.InitializeBlendShapes(); - eyes.Accumulate(_blendShape); - lipSync.Accumulate(_blendShape); + _accumulator.ResetValues(); + eyes.Accumulate(_accumulator); + lipSync.Accumulate(_accumulator); - neutralClipSettings.ApplyNeutralClip(_blendShape); - neutralClipSettings.ApplyOffsetClip(_blendShape); + neutralClipSettings.AccumulateNeutralClip(_accumulator); + neutralClipSettings.AccumulateOffsetClip(_accumulator); } private void WriteClipsWithInterpolation() @@ -183,9 +173,8 @@ private void WriteClipsWithInterpolation() // - FaceSwitch / WtMの現在値は(KeepLipSyncも含めて)使わず、Interpolatorが代行してくれる // - ゼロ埋めの冗長化回避は無理なので諦めて、全部ゼロ埋めしておく // - ふだんの動きを適用するが、そこでは必ずweightが入る - - _initializer.InitializeBlendShapes(); - blendShapeInterpolator.Accumulate(_blendShape); + _accumulator.ResetValues(); + blendShapeInterpolator.Accumulate(_accumulator); //Perfect Syncが適用 > Blinkは確定で無視。 //リップシンクは…ここも設定しだいで適用。 @@ -193,7 +182,7 @@ private void WriteClipsWithInterpolation() { //パーフェクトシンクのクリップを埋め: このとき口まわりは設定次第で0埋めか有効値で埋めるかが変化 perfectSync.Accumulate( - _blendShape, + _accumulator, true, perfectSync.PreferWriteMouthBlendShape, true, @@ -205,11 +194,11 @@ private void WriteClipsWithInterpolation() //マイクベースのリップシンクが優先になっているので、それを適用 if (!perfectSync.PreferWriteMouthBlendShape) { - lipSync.Accumulate(_blendShape, blendShapeInterpolator.MouthWeight); + lipSync.Accumulate(_accumulator, blendShapeInterpolator.MouthWeight); } - neutralClipSettings.ApplyNeutralClip(_blendShape, blendShapeInterpolator.NonMouthWeight); - neutralClipSettings.ApplyOffsetClip(_blendShape); + neutralClipSettings.AccumulateNeutralClip(_accumulator, blendShapeInterpolator.NonMouthWeight); + neutralClipSettings.AccumulateOffsetClip(_accumulator); return; } @@ -217,11 +206,11 @@ private void WriteClipsWithInterpolation() // - 口: パーフェクトシンクの画像 or マイク // - 目: パーフェクトシンクの目 or webカメラ or AutoBlink // という使い分けがあるが、この分岐は各コンポーネントのレベルで面倒を見てもらえる - eyes.Accumulate(_blendShape, blendShapeInterpolator.NonMouthWeight); - lipSync.Accumulate(_blendShape, blendShapeInterpolator.MouthWeight); + eyes.Accumulate(_accumulator, blendShapeInterpolator.NonMouthWeight); + lipSync.Accumulate(_accumulator, blendShapeInterpolator.MouthWeight); - neutralClipSettings.ApplyNeutralClip(_blendShape, blendShapeInterpolator.NonMouthWeight); - neutralClipSettings.ApplyOffsetClip(_blendShape); + neutralClipSettings.AccumulateNeutralClip(_accumulator, blendShapeInterpolator.NonMouthWeight); + neutralClipSettings.AccumulateOffsetClip(_accumulator); } } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Blink/BehaviorBasedAutoBlinkAdjust.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Blink/BehaviorBasedAutoBlinkAdjust.cs index 9b932295..fed73980 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Blink/BehaviorBasedAutoBlinkAdjust.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Blink/BehaviorBasedAutoBlinkAdjust.cs @@ -81,7 +81,7 @@ public void Initialize(IVRMLoadable vrmLoadable, IMessageReceiver receiver, VmmL _lipSyncContext = lipSyncContext; vrmLoadable.VrmLoaded += vrm => { - _head = vrm.animator.GetBoneTransform(HumanBodyBones.Head); + _head = vrm.controlRig.GetBoneTransform(HumanBodyBones.Head); _prevHeadRotation = _head.rotation; _headRotationDegree = 0; _isVrmLoaded = true; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/DefaultFunBlendShapeModifier.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/DefaultFunBlendShapeModifier.cs index 827e8957..71ce79af 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/DefaultFunBlendShapeModifier.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/DefaultFunBlendShapeModifier.cs @@ -1,24 +1,21 @@ -using VRM; +using UniVRM10; namespace Baku.VMagicMirror { - /// - /// 何もしてないときも若干Funのブレンドシェイプを入れるやつ。 - /// + //TODO: めっちゃ廃止したい~ + /// 何もしてないときも若干Funのブレンドシェイプを入れるやつ public class DefaultFunBlendShapeModifier { - private BlendShapeKey FunKey { get; } = BlendShapeKey.CreateFromPreset(BlendShapePreset.Fun); - public float FaceDefaultFunValue { get; set; } = 0.0f; - public void Apply(VRMBlendShapeProxy proxy) + public void Apply(ExpressionAccumulator accumulator) { - proxy.AccumulateValue(FunKey, FaceDefaultFunValue); + accumulator.Accumulate(ExpressionKey.Relaxed, FaceDefaultFunValue); } - public void Reset(VRMBlendShapeProxy proxy) + public void Reset(ExpressionAccumulator accumulator) { - proxy.AccumulateValue(FunKey, 0); + accumulator.Accumulate(ExpressionKey.Relaxed, 0f); } } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/ExpressionAccumulator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/ExpressionAccumulator.cs new file mode 100644 index 00000000..387e4842 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/ExpressionAccumulator.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using UniVRM10; +using Zenject; + +namespace Baku.VMagicMirror +{ + /// + /// 表情のBlendShapeについて「Accumulate -> Apply」というVRM 0.x用の操作をサポートするための、 + /// VRM10のRuntime.Expressionのラッパー + /// + public class ExpressionAccumulator : IInitializable + { + private readonly Dictionary _values = new Dictionary(); + private readonly HashSet _keys = new HashSet(); + private readonly IVRMLoadable _vrmLoadable; + + private bool _hasModel; + private Vrm10RuntimeExpression _expression; + + public ExpressionAccumulator(IVRMLoadable vrmLoadable) + { + _vrmLoadable = vrmLoadable; + } + + public void Initialize() + { + _vrmLoadable.VrmLoaded += info => + { + _expression = info.instance.Runtime.Expression; + var exprMap = info.instance.Vrm.Expression.LoadExpressionMap(); + + _values.Clear(); + _keys.Clear(); + foreach (var key in exprMap.Keys) + { + _values[key] = 0f; + _keys.Add(key); + } + _hasModel = true; + }; + + _vrmLoadable.VrmDisposing += () => + { + _hasModel = false; + _expression = null; + }; + } + + public void Accumulate(ExpressionKey key, float value) + { + if (_hasModel && _keys.Contains(key)) + { + _values[key] += value; + } + } + + public void Apply() => _expression?.SetWeights(_values); + + public void ResetValues() + { + foreach (var k in _keys) + { + _values[k] = 0f; + } + } + + public float GetValue(ExpressionKey key) => _keys.Contains(key) ? _values[key] : 0f; + + public void SetZero(ExpressionKey key) + { + if (_keys.Contains(key)) + { + _values[key] = 0f; + } + } + + public void SetZero(IEnumerable keys) + { + foreach (var k in keys) + { + if (_keys.Contains(k)) + { + _values[k] = 0f; + } + } + } + } +} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedBuffer.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/ExpressionAccumulator.cs.meta similarity index 83% rename from VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedBuffer.cs.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/ExpressionAccumulator.cs.meta index 5426c4df..b5188ad6 100644 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedBuffer.cs.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/ExpressionAccumulator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fc5820f77510c8f459884d54b815f832 +guid: 559c8748f70e0a3408945dba088af580 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeBoneAngleSetter.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeBoneAngleSetter.cs index 1d88583d..60de3404 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeBoneAngleSetter.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeBoneAngleSetter.cs @@ -1,6 +1,5 @@ -using Baku.VMagicMirror.IK; using UnityEngine; -using VRM; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -14,11 +13,6 @@ namespace Baku.VMagicMirror /// public class EyeBoneAngleSetter : MonoBehaviour { - private static readonly BlendShapeKey LookLeftKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.LookLeft); - private static readonly BlendShapeKey LookRightKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.LookRight); - private static readonly BlendShapeKey LookUpKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.LookUp); - private static readonly BlendShapeKey LookDownKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.LookDown); - //NOTE: 実験した範囲ではこのリミットを超えることは滅多にない private const float RateMagnitudeLimit = 1.2f; @@ -42,7 +36,7 @@ public class EyeBoneAngleSetter : MonoBehaviour private EyeBlendShapeMapApplier _blendShapeApplier; private EyeLookAt _eyeLookAt; //NOTE: BlendShapeResultSetterの更に後処理として呼び出す(ホントは前処理で値を入れたいが、Execution Order的に難しい) - private VRMBlendShapeProxy _blendShape = null; + private ExpressionAccumulator _expressionAccumulator; private Transform _leftEye; private Transform _rightEye; @@ -66,11 +60,13 @@ public class EyeBoneAngleSetter : MonoBehaviour IMessageReceiver receiver, IVRMLoadable vrmLoadable, EyeLookAt eyeLookAt, - NonImageBasedMotion nonImageBasedMotion) + NonImageBasedMotion nonImageBasedMotion, + ExpressionAccumulator expressionAccumulator) { _nonImageBasedMotion = nonImageBasedMotion; _boneApplier = new EyeBoneAngleMapApplier(vrmLoadable); _blendShapeApplier = new EyeBlendShapeMapApplier(vrmLoadable); + _expressionAccumulator = expressionAccumulator; _eyeLookAt = eyeLookAt; vrmLoadable.VrmLoaded += OnVrmLoaded; @@ -100,10 +96,8 @@ public class EyeBoneAngleSetter : MonoBehaviour private void OnVrmLoaded(VrmLoadedInfo info) { - _leftEye = info.animator.GetBoneTransform(HumanBodyBones.LeftEye); - _rightEye = info.animator.GetBoneTransform(HumanBodyBones.RightEye); - _blendShape = info.blendShape; - + _leftEye = info.controlRig.GetBoneTransform(HumanBodyBones.LeftEye); + _rightEye = info.controlRig.GetBoneTransform(HumanBodyBones.RightEye); _hasLeftEyeBone = _leftEye != null; _hasRightEyeBone = _rightEye != null; _hasModel = true; @@ -115,7 +109,6 @@ private void OnVrmDisposed() _hasLeftEyeBone = false; _hasRightEyeBone = false; - _blendShape = null; _leftEye = null; _rightEye = null; } @@ -226,11 +219,12 @@ private void LateUpdate() 0.5f * (leftPitch + rightPitch) ); - _blendShape.AccumulateValue(LookLeftKey, result.Left); - _blendShape.AccumulateValue(LookRightKey, result.Right); - _blendShape.AccumulateValue(LookUpKey, result.Up); - _blendShape.AccumulateValue(LookDownKey, result.Down); - _blendShape.Apply(); + //NOTE: ここ1フレーム中に2回目のApplyになるのでちょっと嫌い + _expressionAccumulator.Accumulate(ExpressionKey.LookLeft, result.Left); + _expressionAccumulator.Accumulate(ExpressionKey.LookRight, result.Right); + _expressionAccumulator.Accumulate(ExpressionKey.LookUp, result.Up); + _expressionAccumulator.Accumulate(ExpressionKey.LookDown, result.Down); + _expressionAccumulator.Apply(); } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeDownMotionController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeDownMotionController.cs index 6f45ee0a..85ed12a6 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeDownMotionController.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeDownMotionController.cs @@ -1,6 +1,6 @@ using Baku.VMagicMirror.ExternalTracker; using UnityEngine; -using VRM; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -8,9 +8,6 @@ namespace Baku.VMagicMirror /// 瞬きに対して目と眉を下げる処理をするやつ public class EyeDownMotionController : MonoBehaviour, IEyeRotationRequestSource { - private static readonly BlendShapeKey BlinkLKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_L); - private static readonly BlendShapeKey BlinkRKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_R); - [SerializeField] private float eyeDownRateWhenEyeClosed = 1.0f; [Inject] @@ -28,7 +25,7 @@ public class EyeDownMotionController : MonoBehaviour, IEyeRotationRequestSource private FaceControlConfiguration _config; private ExternalTrackerDataSource _exTracker = null; - private VRMBlendShapeProxy _blendShapeProxy = null; + private Vrm10RuntimeExpression _runtimeExpression = null; private bool _hasValidEyeSettings = false; bool IEyeRotationRequestSource.IsActive => _hasValidEyeSettings && !_config.ShouldSkipNonMouthBlendShape; @@ -37,14 +34,14 @@ public class EyeDownMotionController : MonoBehaviour, IEyeRotationRequestSource private void OnVrmLoaded(VrmLoadedInfo info) { - _blendShapeProxy = info.blendShape; - _hasValidEyeSettings = CheckBlinkBlendShapeClips(_blendShapeProxy); + _runtimeExpression = info.RuntimeFacialExpression; + _hasValidEyeSettings = CheckBlinkBlendShapeClips(info.instance.Vrm.Expression); } private void OnVrmDisposing() { _hasValidEyeSettings = false; - _blendShapeProxy = null; + _runtimeExpression = null; } public void UpdateRotationRate() @@ -62,22 +59,20 @@ public void UpdateRotationRate() // このへんの値が1フレーム前の値ではなく同一フレームの値を参照できるともっと良い var leftBlink = shouldUseAlternativeBlink ? _config.AlternativeBlinkL - : _blendShapeProxy.GetValue(BlinkLKey); + : _runtimeExpression.GetWeight(ExpressionKey.BlinkLeft); var rightBlink = shouldUseAlternativeBlink ? _config.AlternativeBlinkR - : _blendShapeProxy.GetValue(BlinkRKey); + : _runtimeExpression.GetWeight(ExpressionKey.BlinkRight); LeftEyeRotationRate = new Vector2(0f, -leftBlink * eyeDownRateWhenEyeClosed); RightEyeRotationRate = new Vector2(0f, -rightBlink * eyeDownRateWhenEyeClosed); } - private static bool CheckBlinkBlendShapeClips(VRMBlendShapeProxy proxy) + private static bool CheckBlinkBlendShapeClips(VRM10ObjectExpression settings) { //NOTE: 隻眼/単眼でも補正はかかってほしい、という事でこういう感じ - var avatar = proxy.BlendShapeAvatar; - return - (avatar.GetClip(BlinkLKey).Values.Length > 0 || avatar.GetClip(BlinkRKey).Values.Length > 0) && - avatar.GetClip(BlendShapePreset.Blink).Values.Length > 0; + return (settings.BlinkLeft.HasValidBinds() || settings.BlinkRight.HasValidBinds()) && + settings.Blink.HasValidBinds(); } } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeLookAt.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeLookAt.cs index 22e48314..d7d8e0f6 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeLookAt.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/EyeLookAt.cs @@ -27,7 +27,7 @@ public float Weight public EyeLookAt(IVRMLoadable vrmLoadable, IKTargetTransforms ikTargets) { _lookAtTarget = ikTargets.LookAt; - vrmLoadable.VrmLoaded += info => SetAvatarHead(info.animator.GetBoneTransform(HumanBodyBones.Head)); + vrmLoadable.VrmLoaded += info => SetAvatarHead(info.controlRig.GetBoneTransform(HumanBodyBones.Head)); vrmLoadable.VrmDisposing += ReleaseAvatarHead; } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/FaceControlManager.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/FaceControlManager.cs index 991802e4..6cc0389c 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/FaceControlManager.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/FaceControlManager.cs @@ -1,5 +1,5 @@ using UnityEngine; -using VRM; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -9,9 +9,6 @@ namespace Baku.VMagicMirror /// public class FaceControlManager : MonoBehaviour { - private static readonly BlendShapeKey BlinkLKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_L); - private static readonly BlendShapeKey BlinkRKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_R); - //NOTE: まばたき自体は3種類どれかが排他で適用される。複数走っている場合、external > image > autoの優先度で適用する。 [SerializeField] private ExternalTrackerBlink externalTrackerBlink = null; [SerializeField] private ImageBasedBlinkController imageBasedBlinkController = null; @@ -48,7 +45,7 @@ public class FaceControlManager : MonoBehaviour /// WebCamベースのトラッキング中でも自動まばたきを優先するかどうかを取得、設定します。 public bool PreferAutoBlinkOnWebCamTracking { get; set; } = true; - public void Accumulate(VRMBlendShapeProxy proxy, float weight = 1f) + public void Accumulate(ExpressionAccumulator accumulator, float weight = 1f) { if (!_hasModel) { @@ -59,15 +56,15 @@ public void Accumulate(VRMBlendShapeProxy proxy, float weight = 1f) //「パーフェクトシンク使用中」「FaceSwitch適用中」「Word to Motion適用中」 //の3ケースでは適用されると困る。 //で、ここに書いておくと上記3ケースではそもそもAccumulateが呼ばれないため、うまく動く。 - DefaultBlendShape.Apply(proxy); + DefaultBlendShape.Apply(accumulator); var blinkSource = _config.ControlMode == FaceControlModes.ExternalTracker ? externalTrackerBlink.BlinkSource : (_config.ControlMode == FaceControlModes.WebCam && !PreferAutoBlinkOnWebCamTracking) ? imageBasedBlinkController.BlinkSource : autoBlink.BlinkSource; - proxy.AccumulateValue(BlinkLKey, blinkSource.Left * weight); - proxy.AccumulateValue(BlinkRKey, blinkSource.Right * weight); + accumulator.Accumulate(ExpressionKey.BlinkLeft, blinkSource.Left * weight); + accumulator.Accumulate(ExpressionKey.BlinkRight, blinkSource.Right * weight); } private void Update() diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/LIpSync/AnimMorphEasedTarget.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/LIpSync/AnimMorphEasedTarget.cs index 79a4856d..457d2f95 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/LIpSync/AnimMorphEasedTarget.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/LIpSync/AnimMorphEasedTarget.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using UnityEngine; -using VRM; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -45,22 +45,22 @@ public bool ShouldReceiveData private readonly RecordLipSyncSource _lipSyncSource = new RecordLipSyncSource(); public IMouthLipSyncSource LipSyncSource => _lipSyncSource; - private readonly Dictionary _blendShapeWeights = new Dictionary + private readonly Dictionary _blendShapeWeights = new Dictionary { - [BlendShapeKey.CreateFromPreset(BlendShapePreset.A)] = 0.0f, - [BlendShapeKey.CreateFromPreset(BlendShapePreset.E)] = 0.0f, - [BlendShapeKey.CreateFromPreset(BlendShapePreset.I)] = 0.0f, - [BlendShapeKey.CreateFromPreset(BlendShapePreset.O)] = 0.0f, - [BlendShapeKey.CreateFromPreset(BlendShapePreset.U)] = 0.0f, + [ExpressionKey.Aa] = 0f, + [ExpressionKey.Ee] = 0f, + [ExpressionKey.Ih] = 0f, + [ExpressionKey.Oh] = 0f, + [ExpressionKey.Ou] = 0f, }; - private readonly BlendShapeKey[] _keys = new[] + private readonly ExpressionKey[] _keys = new[] { - BlendShapeKey.CreateFromPreset(BlendShapePreset.A), - BlendShapeKey.CreateFromPreset(BlendShapePreset.E), - BlendShapeKey.CreateFromPreset(BlendShapePreset.I), - BlendShapeKey.CreateFromPreset(BlendShapePreset.O), - BlendShapeKey.CreateFromPreset(BlendShapePreset.U), + ExpressionKey.Aa, + ExpressionKey.Ee, + ExpressionKey.Ih, + ExpressionKey.Oh, + ExpressionKey.Ou, }; private VmmLipSyncContextBase _context; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/LIpSync/LipSyncIntegrator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/LIpSync/LipSyncIntegrator.cs index c557c026..62c3aa30 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/LIpSync/LipSyncIntegrator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/LIpSync/LipSyncIntegrator.cs @@ -1,18 +1,12 @@ using UnityEngine; +using UniVRM10; using Zenject; -using VRM; namespace Baku.VMagicMirror { /// PCマイクまたは外部トラッキングのリップシンク情報をVRMに適用する、ちょっと偉いクラス。 public class LipSyncIntegrator : MonoBehaviour - { - private static readonly BlendShapeKey _a = BlendShapeKey.CreateFromPreset(BlendShapePreset.A); - private static readonly BlendShapeKey _i = BlendShapeKey.CreateFromPreset(BlendShapePreset.I); - private static readonly BlendShapeKey _u = BlendShapeKey.CreateFromPreset(BlendShapePreset.U); - private static readonly BlendShapeKey _e = BlendShapeKey.CreateFromPreset(BlendShapePreset.E); - private static readonly BlendShapeKey _o = BlendShapeKey.CreateFromPreset(BlendShapePreset.O); - + { [SerializeField] private AnimMorphEasedTarget animMorphEasedTarget = null; [SerializeField] private ExternalTrackerLipSync externalTrackerLipSync = null; @@ -38,18 +32,18 @@ public float VoiceRate } } - public void Accumulate(VRMBlendShapeProxy proxy, float weight = 1f) + public void Accumulate(ExpressionAccumulator accumulator, float weight = 1f) { //NOTE: マイクが無効な場合はanimMorphEasedTargetの出力がゼロになる、というのを想定した書き方でもあります var src = PreferExternalTrackerLipSync ? externalTrackerLipSync.LipSyncSource : animMorphEasedTarget.LipSyncSource; - proxy.AccumulateValue(_a, src.A * weight); - proxy.AccumulateValue(_i, src.I * weight); - proxy.AccumulateValue(_u, src.U * weight); - proxy.AccumulateValue(_e, src.E * weight); - proxy.AccumulateValue(_o, src.O * weight); + accumulator.Accumulate(ExpressionKey.Aa, src.A * weight); + accumulator.Accumulate(ExpressionKey.Ih, src.I * weight); + accumulator.Accumulate(ExpressionKey.Ou, src.U * weight); + accumulator.Accumulate(ExpressionKey.Ee, src.E * weight); + accumulator.Accumulate(ExpressionKey.Oh, src.O * weight); } } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/NeutralClipSettings.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/NeutralClipSettings.cs index d0f2f180..8c09deac 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/NeutralClipSettings.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/NeutralClipSettings.cs @@ -1,5 +1,5 @@ using UnityEngine; -using VRM; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -20,7 +20,9 @@ public void Initialize(IVRMLoadable vrmLoadable, IMessageReceiver receiver) HasValidNeutralClipKey = !string.IsNullOrWhiteSpace(c.Content); if (HasValidNeutralClipKey) { - NeutralClipKey = BlendShapeKeyFactory.CreateFrom(c.Content); + NeutralClipKey = ExpressionKeyUtils.CreateKeyByName( + BlendShapeCompatUtil.GetVrm10ClipName(c.Content) + ); } }); @@ -31,32 +33,34 @@ public void Initialize(IVRMLoadable vrmLoadable, IMessageReceiver receiver) HasValidOffsetClipKey = !string.IsNullOrWhiteSpace(c.Content); if (HasValidOffsetClipKey) { - OffsetClipKey = BlendShapeKeyFactory.CreateFrom(c.Content); + OffsetClipKey = ExpressionKeyUtils.CreateKeyByName( + BlendShapeCompatUtil.GetVrm10ClipName(c.Content) + ); } }); } - public void ApplyNeutralClip(VRMBlendShapeProxy proxy, float weight = 1f) + public void AccumulateNeutralClip(ExpressionAccumulator accumulator, float weight = 1f) { if (HasValidNeutralClipKey) { - proxy.AccumulateValue(NeutralClipKey, weight); + accumulator.Accumulate(NeutralClipKey, weight); } } - public void ApplyOffsetClip(VRMBlendShapeProxy proxy) + public void AccumulateOffsetClip(ExpressionAccumulator accumulator) { if (HasValidOffsetClipKey) { - proxy.AccumulateValue(OffsetClipKey, 1f); + accumulator.Accumulate(OffsetClipKey, 1f); } } private bool HasValidNeutralClipKey = false; - private BlendShapeKey NeutralClipKey; + private ExpressionKey NeutralClipKey; private bool HasValidOffsetClipKey = false; - private BlendShapeKey OffsetClipKey; + private ExpressionKey OffsetClipKey; } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Vrm10ExpressionUtils.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Vrm10ExpressionUtils.cs new file mode 100644 index 00000000..eefede1c --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Vrm10ExpressionUtils.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; +using System.Linq; +using UniVRM10; + +namespace Baku.VMagicMirror +{ + public class VRM10ExpressionMap + { + public VRM10ExpressionMap(IReadOnlyDictionary map) + { + _map = map; + } + + private readonly IReadOnlyDictionary _map; + + //NOTE: 必要ならPairs的なのを出してもいい + public IEnumerable Keys => _map.Keys; + public IEnumerable Values => _map.Values; + + public VRM10Expression this[ExpressionKey key] => _map[key]; + + public bool TryGet(ExpressionKey key, out VRM10Expression result) + { + return _map.TryGetValue(key, out result); + } + } + + public static class Vrm10ObjectExpressionExtensions + { + public static VRM10ExpressionMap LoadExpressionMap(this VRM10ObjectExpression expression) + { + var map = expression.Clips + .ToDictionary( + v => expression.CreateKey(v.Clip), + v => v.Clip + ); + return new VRM10ExpressionMap(map); + } + } + + public static class Vrm10ExpressionExtensions + { + public static bool HasValidBinds(this VRM10Expression expression) + { + return + expression.MaterialColorBindings.Length > 0 || + expression.MorphTargetBindings.Length > 0 || + expression.MaterialUVBindings.Length > 0; + } + } + + public static class ExpressionKeyUtils + { + //キーが名前だけで与えられた場合、それがプリセットと同名ならプリセット、そうでなければカスタムクリップ扱いします。 + public static ExpressionKey CreateKeyByName(string name) => _presets.ContainsKey(name) + ? ExpressionKey.CreateFromPreset(_presets[name]) + : ExpressionKey.CreateCustom(name); + + private static readonly Dictionary _presets = new Dictionary() + { + //キーって大文字でもいい or むしろ大文字のほうがいいのでは + ["Neutral"] = ExpressionPreset.neutral, + ["Happy"] = ExpressionPreset.happy, + ["Angry"] = ExpressionPreset.angry, + ["Sad"] = ExpressionPreset.sad, + ["Relaxed"] = ExpressionPreset.relaxed, + ["Surprised"] = ExpressionPreset.surprised, + + ["Aa"] = ExpressionPreset.aa, + ["Ih"] = ExpressionPreset.ih, + ["Ou"] = ExpressionPreset.ou, + ["Ee"] = ExpressionPreset.ee, + ["Oh"] = ExpressionPreset.oh, + + ["Blink"] = ExpressionPreset.blink, + ["BlinkLeft"] = ExpressionPreset.blinkLeft, + ["BlinkRight"] = ExpressionPreset.blinkRight, + + ["LookLeft"] = ExpressionPreset.lookLeft, + ["LookRight"] = ExpressionPreset.lookRight, + ["LookUp"] = ExpressionPreset.lookUp, + ["LookDown"] = ExpressionPreset.lookDown, + }; + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/BuiltInMotionRequest.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Vrm10ExpressionUtils.cs.meta similarity index 83% rename from VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/BuiltInMotionRequest.cs.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Vrm10ExpressionUtils.cs.meta index 67050566..2d49af8a 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/BuiltInMotionRequest.cs.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/FaceContol/Vrm10ExpressionUtils.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 296a60f6a62576743a5febe4ce10ce48 +guid: 9b85e6b3f0c02cf4a9b45e9dcaba84bf MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/BodyLeanIntegrator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/BodyLeanIntegrator.cs index 57581b8b..1eb85a56 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/BodyLeanIntegrator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/BodyLeanIntegrator.cs @@ -47,7 +47,7 @@ public void Initialize(IVRMLoadable vrmLoadable) vrmLoadable.VrmLoaded += info => { BodyHorizontalOffsetSuggest = 0; - float hipsHeight = info.animator.GetBoneTransform(HumanBodyBones.Hips).position.y; + float hipsHeight = info.controlRig.GetBoneTransform(HumanBodyBones.Hips).position.y; //あまり非常識な値が来たらもう適当に蹴ってしまう。別に蹴ってもそこまで危険でもないし。 _hipsHeightRate = Mathf.Clamp(hipsHeight / ReferenceHipsHeight, 0.1f, 3f); }; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/FaceAngleToBodyAngle.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/FaceAngleToBodyAngle.cs index e94475f2..172ebe7b 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/FaceAngleToBodyAngle.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/FaceAngleToBodyAngle.cs @@ -33,8 +33,8 @@ public void Initialize(IVRMLoadable vrmLoadable, IMessageReceiver receiver) vrmLoadable.VrmLoaded += info => { SetZeroTarget(); - _head = info.animator.GetBoneTransform(HumanBodyBones.Head); - _neck = info.animator.GetBoneTransform(HumanBodyBones.Neck); + _head = info.controlRig.GetBoneTransform(HumanBodyBones.Head); + _neck = info.controlRig.GetBoneTransform(HumanBodyBones.Neck); _hasNeck = _neck != null; _hasModel = true; }; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/ImageBasedBodyMotion.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/ImageBasedBodyMotion.cs index 04df6cde..10571ff8 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/ImageBasedBodyMotion.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/ImageBasedBodyMotion.cs @@ -1,6 +1,5 @@ using DG.Tweening; using UnityEngine; -using RootMotion.FinalIK; using Zenject; namespace Baku.VMagicMirror @@ -104,18 +103,20 @@ public bool NoHandTrackMode public void OnVrmLoaded(VrmLoadedInfo info) { - var ik = info.vrmRoot.GetComponent(); - var animator = info.animator; + var ik = info.fbbIk; + var controlRig = info.controlRig; _hasModel = true; - _vrmRoot = animator.transform; + //TODO: ここ合ってるか自信ない + _vrmRoot = info.animator.transform; + var animatorTransform = info.animator.transform; { _leftShoulderEffector = new GameObject("LeftUpperArmEffector").transform; _leftShoulderEffector.parent = _vrmRoot; - _leftShoulderDefaultOffset = animator.transform.InverseTransformPoint( - animator.GetBoneTransform(HumanBodyBones.LeftUpperArm).position + _leftShoulderDefaultOffset = animatorTransform.InverseTransformPoint( + controlRig.GetBoneTransform(HumanBodyBones.LeftUpperArm).position ); ik.solver.leftShoulderEffector.target = _leftShoulderEffector; @@ -128,8 +129,8 @@ public void OnVrmLoaded(VrmLoadedInfo info) _rightShoulderEffector = new GameObject("RightUpperArmEffector").transform; _rightShoulderEffector.parent = _vrmRoot; - _rightShoulderDefaultOffset = animator.transform.InverseTransformPoint( - animator.GetBoneTransform(HumanBodyBones.RightUpperArm).position + _rightShoulderDefaultOffset = animatorTransform.InverseTransformPoint( + controlRig.GetBoneTransform(HumanBodyBones.RightUpperArm).position ); ik.solver.rightShoulderEffector.target = _rightShoulderEffector; ik.solver.rightShoulderEffector.positionWeight = PositionWeightWhenValid; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/ShoulderRotationModifier.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/ShoulderRotationModifier.cs index 9ed9b88a..ebaf61fb 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/ShoulderRotationModifier.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/Body/ShoulderRotationModifier.cs @@ -166,18 +166,18 @@ public bool EnableRotationModification private void OnVrmLoaded(VrmLoadedInfo info) { - _leftShoulder = info.animator.GetBoneTransform(HumanBodyBones.LeftShoulder); - _leftUpperArm = info.animator.GetBoneTransform(HumanBodyBones.LeftUpperArm); - _leftLowerArm = info.animator.GetBoneTransform(HumanBodyBones.LeftLowerArm); + _leftShoulder = info.controlRig.GetBoneTransform(HumanBodyBones.LeftShoulder); + _leftUpperArm = info.controlRig.GetBoneTransform(HumanBodyBones.LeftUpperArm); + _leftLowerArm = info.controlRig.GetBoneTransform(HumanBodyBones.LeftLowerArm); - _rightShoulder = info.animator.GetBoneTransform(HumanBodyBones.RightShoulder); - _rightUpperArm = info.animator.GetBoneTransform(HumanBodyBones.RightUpperArm); - _rightLowerArm = info.animator.GetBoneTransform(HumanBodyBones.RightLowerArm); + _rightShoulder = info.controlRig.GetBoneTransform(HumanBodyBones.RightShoulder); + _rightUpperArm = info.controlRig.GetBoneTransform(HumanBodyBones.RightUpperArm); + _rightLowerArm = info.controlRig.GetBoneTransform(HumanBodyBones.RightLowerArm); - _rightHandEffector = info.vrmRoot.GetComponent().solver.rightHandEffector; + _rightHandEffector = info.fbbIk.solver.rightHandEffector; _handDiffMax = handDiffMaxBase * - info.animator.GetBoneTransform(HumanBodyBones.Head).position.y / ReferenceHeadHeight; + info.controlRig.GetBoneTransform(HumanBodyBones.Head).position.y / ReferenceHeadHeight; //値が0寄りすぎると危ないので念のため。 if (_handDiffMax < 0.001f) { @@ -187,7 +187,7 @@ private void OnVrmLoaded(VrmLoadedInfo info) _hasValidShoulderBone = (handIk != null && _leftShoulder != null && _rightShoulder != null); - InitializeBoneParameters(info.animator); + InitializeBoneParameters(); } private void OnVrmDisposing() @@ -206,7 +206,7 @@ private void OnVrmDisposing() _rightHandEffector = null; } - private void InitializeBoneParameters(Animator animator) + private void InitializeBoneParameters() { _staticLeftShoulderEuler = Vector3.zero; _staticRightShoulderEuler = Vector3.zero; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/ElbowMotionModifier.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/ElbowMotionModifier.cs index 0ed7b140..21aee2e4 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/ElbowMotionModifier.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/ElbowMotionModifier.cs @@ -101,8 +101,8 @@ private void Update() private void OnVrmLoaded(VrmLoadedInfo info) { - _ik = info.vrmRoot.GetComponent(); - var spineBone = info.animator.GetBoneTransform(HumanBodyBones.Spine); + _ik = info.fbbIk; + var spineBone = info.controlRig.GetBoneTransform(HumanBodyBones.Spine); _rightArmBendGoal = new GameObject().transform; _rightArmBendGoal.SetParent(spineBone); diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FK/BoneFrameReducer.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FK/BoneFrameReducer.cs index b177c252..6bae5dd1 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FK/BoneFrameReducer.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FK/BoneFrameReducer.cs @@ -54,7 +54,7 @@ private void OnModelLoaded(VrmLoadedInfo info) for (var i = (int) HumanBodyBones.Hips; i < (int) HumanBodyBones.LastBone; i++) { var boneType = (HumanBodyBones) i; - var bone = info.animator.GetBoneTransform(boneType); + var bone = info.controlRig.GetBoneTransform(boneType); if (bone != null) { _bones[boneType] = bone; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FaceAttitudeController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FaceAttitudeController.cs index 6c852553..88a251c7 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FaceAttitudeController.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FaceAttitudeController.cs @@ -48,7 +48,7 @@ public void Initialize(FaceTracker faceTracker, IVRMLoadable vrmLoadable) vrmLoadable.VrmLoaded += info => { - var animator = info.animator; + var animator = info.controlRig; _neck = animator.GetBoneTransform(HumanBodyBones.Neck); _head = animator.GetBoneTransform(HumanBodyBones.Head); _hasNeck = (_neck != null); diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FingerController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FingerController.cs index ab82da9b..89cd4e21 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FingerController.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FingerController.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using Unity.Mathematics; using UnityEngine; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FingerLateController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FingerLateController.cs index 13b36a46..826e42a0 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FingerLateController.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/FingerLateController.cs @@ -1,4 +1,5 @@ using UnityEngine; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -11,7 +12,7 @@ public class FingerLateController : MonoBehaviour //角度ベースの値をMuscleのレートにおおよそ換算してくれるすごいやつだよ //観察ベースで「マッスル値をいくつ変えたら90度ぶん動くかな~」と調べてます private const float BendDegToMuscle = 1.65f / 90f; - + private Animator _animator = null; //角度入力時に使うマッスル系の情報 private HumanPoseHandler _humanPoseHandler = null; @@ -35,10 +36,6 @@ public void Initialize(IVRMLoadable vrmLoadable) vrmLoadable.VrmLoaded += OnVrmLoaded; vrmLoadable.VrmDisposing += () => { - if (_animator == null) - { - return; - } _animator = null; _humanPoseHandler = null; _fingers = null; @@ -76,8 +73,8 @@ public void Release(int fingerNumber) private void OnVrmLoaded(VrmLoadedInfo info) { - _animator = info.animator; - _humanPoseHandler = new HumanPoseHandler(_animator.avatar, _animator.transform); + _animator = info.controlRig; + _humanPoseHandler = new HumanPoseHandler(info.animator.avatar, info.animator.transform); //とりあえず現在の値を拾っておく _humanPoseHandler.GetHumanPose(ref _humanPose); _defaultHumanPose = _humanPose; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HandIKIntegrator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HandIKIntegrator.cs index f2150aaa..f5878118 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HandIKIntegrator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HandIKIntegrator.cs @@ -418,7 +418,7 @@ private void Start() private void OnVrmLoaded(VrmLoadedInfo info) { - fingerController.Initialize(info.animator); + fingerController.Initialize(info.controlRig); //キャラロード前のHandDownとブレンドするとIK位置が原点に飛ぶので、その値を捨てる MouseMove.ResetHandDownTimeout(true); diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HeadIkIntegrator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HeadIkIntegrator.cs index 1bd1e859..6d9e574a 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HeadIkIntegrator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HeadIkIntegrator.cs @@ -1,7 +1,6 @@ using Baku.VMagicMirror.IK; using RootMotion.FinalIK; using UnityEngine; -using VRM; using Zenject; using Quaternion = UnityEngine.Quaternion; using Vector3 = UnityEngine.Vector3; @@ -40,7 +39,6 @@ public class HeadIkIntegrator : MonoBehaviour private PenTabletProvider _penTabletProvider; private LookAtIK _lookAtIk = null; - private VRMLookAtHead _vrmLookAtHead = null; private float _mouseActionCount = 0f; @@ -61,16 +59,14 @@ public class HeadIkIntegrator : MonoBehaviour vrmLoadable.VrmLoaded += info => { - _head = info.animator.GetBoneTransform(HumanBodyBones.Head); - _lookAtIk = info.vrmRoot.GetComponent(); - _vrmLookAtHead = info.vrmRoot.GetComponent(); + _head = info.controlRig.GetBoneTransform(HumanBodyBones.Head); + _lookAtIk = info.vrmRoot.GetComponentInChildren(); _hasModel = true; }; vrmLoadable.VrmDisposing += () => { _hasModel = false; _lookAtIk = null; - _vrmLookAtHead = null; _head = null; }; } @@ -157,7 +153,6 @@ private void Update() { //NOTE: 外部トラッキング + PenTabletのときにLookAtをやるべきかという問題があるが、無視する。 //当面はそっちのほうが分かりやすいので - _vrmLookAtHead.enabled = false; _lookAtIk.enabled = false; //NOTE: 正面向きに持っていけば安全、という考え方 _lookAtTarget.localPosition = _head.position + Vector3.forward * 5.0f; @@ -166,7 +161,6 @@ private void Update() if (_hasModel) { - _vrmLookAtHead.enabled = true; _lookAtIk.enabled = true; } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HeadMotionClipPlayer.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HeadMotionClipPlayer.cs index e200d319..0609e350 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HeadMotionClipPlayer.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/HeadMotionClipPlayer.cs @@ -120,8 +120,8 @@ public void Initialize(IVRMLoadable vrmLoadable, VRMAutoBlink autoBlink) _autoBlink = autoBlink; vrmLoadable.VrmLoaded += info => { - _neck = info.animator.GetBoneTransform(HumanBodyBones.Neck); - _head = info.animator.GetBoneTransform(HumanBodyBones.Head); + _neck = info.controlRig.GetBoneTransform(HumanBodyBones.Neck); + _head = info.controlRig.GetBoneTransform(HumanBodyBones.Head); _hasNeck = (_neck != null); _hasModel = true; }; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/AlwaysDownHandIkGenerator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/AlwaysDownHandIkGenerator.cs index 25c556b3..8956f5f3 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/AlwaysDownHandIkGenerator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/AlwaysDownHandIkGenerator.cs @@ -53,7 +53,7 @@ public AlwaysDownHandIkGenerator(HandIkGeneratorDependency dependency, IVRMLoada vrmLoadable.VrmLoaded += info => { - var animator = info.animator; + var animator = info.controlRig; _hips = animator.GetBoneTransform(HumanBodyBones.Hips); _rightUpperArm = animator.GetBoneTransform(HumanBodyBones.RightUpperArm); diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ArcadeStickHandIKGenerator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ArcadeStickHandIKGenerator.cs index 46bb20fc..12e5a281 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ArcadeStickHandIKGenerator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ArcadeStickHandIKGenerator.cs @@ -1,5 +1,6 @@ using System; using UnityEngine; +using UniVRM10; namespace Baku.VMagicMirror.IK { @@ -54,9 +55,9 @@ public class ArcadeStickHandIKGenerator : HandIkGeneratorBase //モデルロード時、身長を参照することで「コントローラの移動オフセットはこんくらいだよね」を初期化 vrmLoadable.VrmLoaded += info => { - var h = info.animator.GetBoneTransform(HumanBodyBones.Head); - var f = info.animator.GetBoneTransform(HumanBodyBones.LeftFoot); - CacheHandOffsets(info.animator); + var h = info.controlRig.GetBoneTransform(HumanBodyBones.Head); + var f = info.controlRig.GetBoneTransform(HumanBodyBones.LeftFoot); + CacheHandOffsets(info.controlRig); }; dependency.Events.MoveLeftGamepadStick += v => diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ClapMotionHandIKGenerator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ClapMotionHandIKGenerator.cs index ca8a63a3..ac1119f0 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ClapMotionHandIKGenerator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ClapMotionHandIKGenerator.cs @@ -122,8 +122,8 @@ public void RunClapMotion() private void OnVrmLoaded(VrmLoadedInfo info) { - _keyPoseCalculator.SetupAvatarBodyParameter(info.animator); - var headHeight = info.animator.GetBoneTransform(HumanBodyBones.Head).position.y; + _keyPoseCalculator.SetupAvatarBodyParameter(info.controlRig); + var headHeight = info.controlRig.GetBoneTransform(HumanBodyBones.Head).position.y; //0を入れると0除算になるので一応避けておく _timeTableGenerator.HeadHeight = Mathf.Max(headHeight, 0.1f); _hasModel = true; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ClapMotionSubroutines/ClapMotionKeyPoseCalculator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ClapMotionSubroutines/ClapMotionKeyPoseCalculator.cs index 09dae76f..d5a5af0d 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ClapMotionSubroutines/ClapMotionKeyPoseCalculator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/ClapMotionSubroutines/ClapMotionKeyPoseCalculator.cs @@ -1,5 +1,6 @@ using Baku.VMagicMirror.IK.Utils; using UnityEngine; +using UniVRM10; namespace Baku.VMagicMirror.IK { diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/FootIkSetter.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/FootIkSetter.cs index 8b251abe..1fa2eef4 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/FootIkSetter.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/FootIkSetter.cs @@ -21,8 +21,8 @@ public override void Initialize() { _vrmLoadable.VrmLoaded += info => { - var leftFoot = info.animator.GetBoneTransform(HumanBodyBones.LeftFoot); - var rightFoot = info.animator.GetBoneTransform(HumanBodyBones.RightFoot); + var leftFoot = info.controlRig.GetBoneTransform(HumanBodyBones.LeftFoot); + var rightFoot = info.controlRig.GetBoneTransform(HumanBodyBones.RightFoot); _defaultLeftFootPosition = leftFoot.position; _defaultRightFootPosition = rightFoot.position; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/GamepadHandIKGenerator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/GamepadHandIKGenerator.cs index fdcf0365..bde31c74 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/GamepadHandIKGenerator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/GamepadHandIKGenerator.cs @@ -84,8 +84,8 @@ public class GamepadHandIkGeneratorSetting //モデルロード時、身長を参照することで「コントローラの移動オフセットはこんくらいだよね」を初期化 vrmLoadable.VrmLoaded += info => { - var h = info.animator.GetBoneTransform(HumanBodyBones.Head); - var f = info.animator.GetBoneTransform(HumanBodyBones.LeftFoot); + var h = info.controlRig.GetBoneTransform(HumanBodyBones.Head); + var f = info.controlRig.GetBoneTransform(HumanBodyBones.LeftFoot); float height = h.position.y - f.position.y; _posOffsetScale = Mathf.Clamp(height / ReferenceHeight, 0.1f, 5f); }; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/PenTabletHandIkGenerator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/PenTabletHandIkGenerator.cs index 3fff498b..3fe3d67e 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/PenTabletHandIkGenerator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/PenTabletHandIkGenerator.cs @@ -67,12 +67,12 @@ public void Quit(IHandIkState nextState) vrmLoadable.VrmLoaded += info => { - var wrist = info.animator.GetBoneTransform(HumanBodyBones.RightHand); + var wrist = info.controlRig.GetBoneTransform(HumanBodyBones.RightHand); var wristPosition = wrist.position; - var midProximal = info.animator.GetBoneTransform(HumanBodyBones.RightMiddleProximal); - var midInter = info.animator.GetBoneTransform(HumanBodyBones.RightMiddleIntermediate); - var littleDistal = info.animator.GetBoneTransform(HumanBodyBones.RightLittleDistal); - var thumbProximal = info.animator.GetBoneTransform(HumanBodyBones.RightThumbIntermediate); + var midProximal = info.controlRig.GetBoneTransform(HumanBodyBones.RightMiddleProximal); + var midInter = info.controlRig.GetBoneTransform(HumanBodyBones.RightMiddleIntermediate); + var littleDistal = info.controlRig.GetBoneTransform(HumanBodyBones.RightLittleDistal); + var thumbProximal = info.controlRig.GetBoneTransform(HumanBodyBones.RightThumbIntermediate); //NOTE: 人差し指の第2-第3関節の横でペンが縦に立つように調節するとこういう式になります _wristToPenBasePosition = (midProximal != null && midInter != null && thumbProximal != null) diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/PresentationHandIKGenerator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/PresentationHandIKGenerator.cs index 5252ae55..50160cc9 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/PresentationHandIKGenerator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/IK/PresentationHandIKGenerator.cs @@ -77,10 +77,10 @@ public PresentationHandIKGenerator(HandIkGeneratorDependency dependency, IVRMLoa //NOTE: Shoulderが必須ボーンでは無い事に注意 var bones = new List() { - info.animator.GetBoneTransform(HumanBodyBones.RightShoulder), - info.animator.GetBoneTransform(HumanBodyBones.RightUpperArm), - info.animator.GetBoneTransform(HumanBodyBones.RightLowerArm), - info.animator.GetBoneTransform(HumanBodyBones.RightHand), + info.controlRig.GetBoneTransform(HumanBodyBones.RightShoulder), + info.controlRig.GetBoneTransform(HumanBodyBones.RightUpperArm), + info.controlRig.GetBoneTransform(HumanBodyBones.RightLowerArm), + info.controlRig.GetBoneTransform(HumanBodyBones.RightHand), } .Where(t => t != null) .ToArray(); @@ -92,10 +92,10 @@ public PresentationHandIKGenerator(HandIkGeneratorDependency dependency, IVRMLoa } _lengthFromShoulderToWrist = sum; - _head = info.animator.GetBoneTransform(HumanBodyBones.Head); + _head = info.controlRig.GetBoneTransform(HumanBodyBones.Head); //NOTE: ここも肩ボーンはオプションなことに注意 - _rightShoulder = info.animator.GetBoneTransform(HumanBodyBones.RightShoulder) ?? - info.animator.GetBoneTransform(HumanBodyBones.RightUpperArm); + _rightShoulder = info.controlRig.GetBoneTransform(HumanBodyBones.RightShoulder) ?? + info.controlRig.GetBoneTransform(HumanBodyBones.RightUpperArm); _hasModel = true; }; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/NonImageBasedMotion.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/NonImageBasedMotion.cs index a138cd6f..abdfc086 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/NonImageBasedMotion.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/Motion/NonImageBasedMotion.cs @@ -278,8 +278,8 @@ public NonImageBasedMotionApplier(IVRMLoadable vrmLoadable) { vrmLoadable.VrmLoaded += info => { - _head = info.animator.GetBoneTransform(HumanBodyBones.Head); - _neck = info.animator.GetBoneTransform(HumanBodyBones.Neck); + _head = info.controlRig.GetBoneTransform(HumanBodyBones.Head); + _neck = info.controlRig.GetBoneTransform(HumanBodyBones.Neck); _hasNeck = _neck != null; _hasModel = true; }; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/BuiltInMotionClipData.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/BuiltInMotionClipData.cs index 30cc7445..9c2836ab 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/BuiltInMotionClipData.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/BuiltInMotionClipData.cs @@ -7,9 +7,11 @@ namespace Baku.VMagicMirror [CreateAssetMenu(fileName = "BuiltInClips", menuName = "Baku/VMagicMirror/Built-in Motion Clip", order = 1)] public class BuiltInMotionClipData : ScriptableObject { + [SerializeField] private RuntimeAnimatorController defaultAnimatorController; [SerializeField] private AnimationClip defaultStandingAnimation; [SerializeField] private List items; - + + public RuntimeAnimatorController DefaultAnimatorController => defaultAnimatorController; public AnimationClip DefaultStandingAnimation => defaultStandingAnimation; public IEnumerable Items => items; } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/CustomMotionPlayer.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/CustomMotionPlayer.cs index f598467f..26001a49 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/CustomMotionPlayer.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/CustomMotionPlayer.cs @@ -57,8 +57,10 @@ public void Initialize(CustomMotionRepository repository, IVRMLoadable vrmLoadab vrmLoadable.VrmLoaded += info => { + //TODO: これControlRigと相性が悪すぎるので何か考えて下さい + //ビルトインモーションもヤバそう _humanPoseHandler = new HumanPoseHandler(info.animator.avatar, info.vrmRoot); - _hips = info.animator.GetBoneTransform(HumanBodyBones.Hips); + _hips = info.controlRig.GetBoneTransform(HumanBodyBones.Hips); _originHipsPos = _hips.localPosition; _originHipsRot = _hips.localRotation; _playRoutine = new CustomMotionPlayRoutine( diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/ExtraBlendShapeClipNamesSender.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/ExtraBlendShapeClipNamesSender.cs index 8e09747e..96cc5622 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/ExtraBlendShapeClipNamesSender.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/ExtraBlendShapeClipNamesSender.cs @@ -1,12 +1,11 @@ using System.Linq; using UnityEngine; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror { - /// - /// VRMのロード時に規格外のブレンドシェイプ名をチェックしてWPFに通知するやつ - /// + /// VRMのロード時に標準以外のブレンドシェイプ名をチェックしてWPFに通知するやつ public class ExtraBlendShapeClipNamesSender : MonoBehaviour { [Inject] @@ -14,42 +13,16 @@ public void Initialize(IVRMLoadable vrmLoadable, IMessageSender sender) { vrmLoadable.VrmLoaded += info => { - string names = string.Join(",", - info.blendShape - .BlendShapeAvatar - .Clips - .Select(c => c.BlendShapeName) - .Where(n => !BasicNames.Contains(n)) - ); - + var names = string.Join(",", + info.instance.Vrm.Expression.LoadExpressionMap() + .Keys + .Where(k => k.Preset == ExpressionPreset.custom) + .Select(k => k.Name) + ); sender.SendCommand( MessageFactory.Instance.ExtraBlendShapeClipNames(names) ); }; } - - private static readonly string[] BasicNames = new[] - { - "Joy", - "Angry", - "Sorrow", - "Fun", - - "A", - "I", - "U", - "E", - "O", - - "Neutral", - "Blink", - "Blink_L", - "Blink_R", - - "LookUp", - "LookDown", - "LookLeft", - "LookRight", - }; } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/IkWeightCrossFade.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/IkWeightCrossFade.cs index dd17f71f..a0467c2a 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/IkWeightCrossFade.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/IkWeightCrossFade.cs @@ -51,16 +51,14 @@ public bool ForceStopHandIk public void OnVrmLoaded(VrmLoadedInfo info) { - var ik = info.vrmRoot.GetComponent(); - _ik = ik; - - _originLeftShoulderPositionWeight = ik.solver.leftShoulderEffector.positionWeight; - _originLeftHandPositionWeight = ik.solver.leftHandEffector.positionWeight; - _originLeftHandRotationWeight = ik.solver.leftHandEffector.rotationWeight; - - _originRightShoulderPositionWeight = ik.solver.rightShoulderEffector.positionWeight; - _originRightHandPositionWeight = ik.solver.rightHandEffector.positionWeight; - _originRightHandRotationWeight = ik.solver.rightHandEffector.rotationWeight; + _ik = info.fbbIk; + _originLeftShoulderPositionWeight = _ik.solver.leftShoulderEffector.positionWeight; + _originLeftHandPositionWeight = _ik.solver.leftHandEffector.positionWeight; + _originLeftHandRotationWeight = _ik.solver.leftHandEffector.rotationWeight; + + _originRightShoulderPositionWeight = _ik.solver.rightShoulderEffector.positionWeight; + _originRightHandPositionWeight = _ik.solver.rightHandEffector.positionWeight; + _originRightHandRotationWeight = _ik.solver.rightHandEffector.rotationWeight; _hasModel = true; } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/BuiltInMotionRequest.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/BuiltInMotionRequest.cs deleted file mode 100644 index 36b02774..00000000 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/BuiltInMotionRequest.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using VRM; - -namespace Baku.VMagicMirror -{ - public class BuiltInMotionRequest - { - public BuiltInMotionRequest(string word, AnimationClip animation, Dictionary blendShape) - { - Word = word; - Duration = animation.length; - Animation = animation; - BlendShape = blendShape ?? new Dictionary(); - } - - public BuiltInMotionRequest(string word, float duration, Dictionary blendShape) - { - Word = word; - Duration = duration; - Animation = null; - BlendShape = blendShape ?? new Dictionary(); - } - - /// - /// このリクエストに対応するワードを文字列で取得します。 - /// - public string Word { get; } - - /// - /// アニメーションがnullの場合、表情を維持すべき時間を[sec]単位で取得します。 - /// - /// - /// アニメーションが非nullの場合、と同じ値で初期化 - /// - public float Duration { get; } - - /// - /// メインの動作を指定するアニメーション。TODO: ここを唐突にBVHのbyte[]とかにするかも。要注意。 - /// - public AnimationClip Animation { get; } - - /// - /// 動作中の表情を指定するブレンドシェイプ。表情を変える必要が無い場合は空ディクショナリ。 - /// - public IReadOnlyDictionary BlendShape { get; } - - } -} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/MotionRequest.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/MotionRequest.cs index a90d340f..6cfb23a0 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/MotionRequest.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/Models/MotionRequest.cs @@ -98,17 +98,20 @@ public static MotionRequestCollection FromJson(string json) => JsonUtility.FromJson(json); } + //NOTE: VRM 0.x時代との互換性についてはWPF側が吸収する想定なことに注意。 + //Unity側はVRM 0.xのBlendShapeClipの呼称には関知しない [Serializable] public class BlendShapeValues { - public int Joy; + public int Happy; public int Neutral; public int Angry; - public int Sorrow; - public int Fun; + public int Sad; + public int Relaxed; + public int Surprised; public int Blink; - public int Blink_L; - public int Blink_R; + public int BlinkLeft; + public int BlinkRight; public int A; public int I; public int U; @@ -121,14 +124,15 @@ public class BlendShapeValues public Dictionary ToDic() => new Dictionary() { - [nameof(Joy)] = Joy * 0.01f, [nameof(Neutral)] = Neutral * 0.01f, + [nameof(Happy)] = Happy * 0.01f, [nameof(Angry)] = Angry * 0.01f, - [nameof(Sorrow)] = Sorrow * 0.01f, - [nameof(Fun)] = Fun * 0.01f, + [nameof(Sad)] = Sad * 0.01f, + [nameof(Relaxed)] = Relaxed * 0.01f, + [nameof(Surprised)] = Surprised * 0.01f, [nameof(Blink)] = Blink * 0.01f, - [nameof(Blink_L)] = Blink_L * 0.01f, - [nameof(Blink_R)] = Blink_R * 0.01f, + [nameof(BlinkLeft)] = BlinkLeft * 0.01f, + [nameof(BlinkRight)] = BlinkRight * 0.01f, [nameof(A)] = A * 0.01f, [nameof(I)] = I * 0.01f, [nameof(U)] = U * 0.01f, diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/V2/WordToMotionRunner.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/V2/WordToMotionRunner.cs index 323a7bc8..b65d81e2 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/V2/WordToMotionRunner.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/V2/WordToMotionRunner.cs @@ -4,6 +4,7 @@ using System.Threading; using Cysharp.Threading.Tasks; using UnityEngine; +using UniVRM10; namespace Baku.VMagicMirror.WordToMotion { @@ -53,7 +54,7 @@ public override void Dispose() private void OnVrmLoaded(VrmLoadedInfo info) { - _blendShape.Initialize(info.blendShape); + _blendShape.Initialize(info.instance.Vrm.Expression); _ikWeightCrossFade.OnVrmLoaded(info); } @@ -86,7 +87,7 @@ public void Run(MotionRequest request) CancelBlendShapeReset(); _blendShape.SetBlendShapes( request.BlendShapeValuesDic.Select( - pair => (BlendShapeKeyFactory.CreateFrom(pair.Key), pair.Value) + pair => (ExpressionKeyUtils.CreateKeyByName(pair.Key), pair.Value) ), request.PreferLipSync ); @@ -164,7 +165,7 @@ public void RunAsPreview(MotionRequest request) { _blendShape.SetForPreview( request.BlendShapeValuesDic.Select( - pair => (BlendShapeKeyFactory.CreateFrom(pair.Key), pair.Value) + pair => (ExpressionKeyUtils.CreateKeyByName(pair.Key), pair.Value) ), request.PreferLipSync ); diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/WordToMotionBlendShape.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/WordToMotionBlendShape.cs index 129857e9..956fff86 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/WordToMotionBlendShape.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/AvatarControl/WordToMotion/WordToMotionBlendShape.cs @@ -3,7 +3,7 @@ using System.Linq; using UniRx; using UnityEngine; -using VRM; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -11,7 +11,7 @@ namespace Baku.VMagicMirror public readonly struct WordToMotionBlendShapeApplyContent { private WordToMotionBlendShapeApplyContent( - bool hasValue, List<(BlendShapeKey, float)> keys, bool keepLipSync, bool isPreview) + bool hasValue, List<(ExpressionKey, float)> keys, bool keepLipSync, bool isPreview) { HasValue = hasValue; Keys = keys; @@ -20,13 +20,13 @@ namespace Baku.VMagicMirror } public static WordToMotionBlendShapeApplyContent Empty { get; } - = new WordToMotionBlendShapeApplyContent(false, new List<(BlendShapeKey, float)>(), false, false); + = new WordToMotionBlendShapeApplyContent(false, new List<(ExpressionKey, float)>(), false, false); - public static WordToMotionBlendShapeApplyContent Create(List<(BlendShapeKey, float)> keys, bool keepLipSync, + public static WordToMotionBlendShapeApplyContent Create(List<(ExpressionKey, float)> keys, bool keepLipSync, bool isPreview) => new WordToMotionBlendShapeApplyContent(true, keys, keepLipSync, isPreview); public bool HasValue { get; } - public List<(BlendShapeKey, float)> Keys { get; } + public List<(ExpressionKey, float)> Keys { get; } public bool KeepLipSync { get; } public bool IsPreview { get; } @@ -35,24 +35,24 @@ namespace Baku.VMagicMirror /// Word To Motionのブレンドシェイプを適用する。 public class WordToMotionBlendShape : MonoBehaviour { - private static readonly BlendShapeKey[] _lipSyncKeys = new [] + private static readonly ExpressionKey[] _lipSyncKeys = new [] { - BlendShapeKey.CreateFromPreset(BlendShapePreset.A), - BlendShapeKey.CreateFromPreset(BlendShapePreset.I), - BlendShapeKey.CreateFromPreset(BlendShapePreset.U), - BlendShapeKey.CreateFromPreset(BlendShapePreset.E), - BlendShapeKey.CreateFromPreset(BlendShapePreset.O), + ExpressionKey.CreateFromPreset(ExpressionPreset.aa), + ExpressionKey.CreateFromPreset(ExpressionPreset.ih), + ExpressionKey.CreateFromPreset(ExpressionPreset.ou), + ExpressionKey.CreateFromPreset(ExpressionPreset.ee), + ExpressionKey.CreateFromPreset(ExpressionPreset.oh), }; - private BlendShapeKey[] _allBlendShapeKeys = new BlendShapeKey[0]; + private ExpressionKey[] _allBlendShapeKeys = new ExpressionKey[0]; - private readonly Dictionary _blendShape = new Dictionary(); + private readonly Dictionary _blendShape = new Dictionary(); private EyeBoneAngleSetter _eyeBoneResetter; private bool _hasDiff; - private readonly List<(BlendShapeKey, float)> _currentValueSource = new List<(BlendShapeKey, float)>(8); + private readonly List<(ExpressionKey, float)> _currentValueSource = new List<(ExpressionKey, float)>(8); private readonly Subject _currentValue = new Subject(); public IObservable CurrentValue => _currentValue; @@ -62,18 +62,14 @@ public void Initialize(EyeBoneAngleSetter eyeBoneResetter) _eyeBoneResetter = eyeBoneResetter; } - public void Initialize(VRMBlendShapeProxy proxy) + public void Initialize(VRM10ObjectExpression expression) { - _allBlendShapeKeys = proxy - .BlendShapeAvatar - .Clips - .Select(c => BlendShapeKeyFactory.CreateFrom(c.BlendShapeName)) - .ToArray(); + _allBlendShapeKeys = expression.LoadExpressionMap().Keys.ToArray(); } public void DisposeProxy() { - _allBlendShapeKeys = Array.Empty(); + _allBlendShapeKeys = Array.Empty(); } /// trueの場合、このスクリプトではリップシンクのブレンドシェイプに書き込みを行いません。 @@ -124,7 +120,7 @@ public void UpdateCurrentValue() /// /// /// - public void SetForPreview(IEnumerable<(BlendShapeKey, float)> values, bool keepLipSync) + public void SetForPreview(IEnumerable<(ExpressionKey, float)> values, bool keepLipSync) { //SetBlendShapesとは違ってClearしない: 前回と同じ値でよい場合、_hasDiff == falseになるようにしたい foreach (var (key, value) in values) @@ -151,7 +147,7 @@ public void SetForPreview(IEnumerable<(BlendShapeKey, float)> values, bool keepL /// /// /// - public void SetBlendShapes(IEnumerable<(BlendShapeKey, float)> values, bool keepLipSync) + public void SetBlendShapes(IEnumerable<(ExpressionKey, float)> values, bool keepLipSync) { Clear(); foreach (var (key, value) in values) @@ -184,7 +180,7 @@ public void ResetBlendShape() /// 現在このコンポーネントが適用すべきブレンドシェイプを持ってるかどうか public bool HasBlendShapeToApply => _blendShape.Count > 0; - public void Accumulate(VRMBlendShapeProxy proxy) + public void Accumulate(ExpressionAccumulator accumulator) { if (!HasBlendShapeToApply) { @@ -205,7 +201,7 @@ public void Accumulate(VRMBlendShapeProxy proxy) //これはフィルタすると重すぎるので「パーフェクトシンク使う人はそのくらい理解してくれ」という意味です if (_blendShape.TryGetValue(key, out float value) && value > 0f) { - proxy.AccumulateValue(key, value); + accumulator.Accumulate(key, value); } } _eyeBoneResetter.ReserveReset = true; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/BarracudaHand/Scripts/BarracudaHandIK.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/BarracudaHand/Scripts/BarracudaHandIK.cs index e2e1e6c1..2e7752d3 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/BarracudaHand/Scripts/BarracudaHandIK.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/BarracudaHand/Scripts/BarracudaHandIK.cs @@ -1,5 +1,6 @@ using System; using UnityEngine; +using UniVRM10; namespace Baku.VMagicMirror.IK { @@ -94,10 +95,10 @@ Vector3[] rightHandPoints //TODO: 書く場所はココじゃないかもしれないが、頭との相対位置でIKを決めた方がキャリブとの相性が良いかもしれないので考えること vrmLoadable.VrmLoaded += info => { - _head = info.animator.GetBoneTransform(HumanBodyBones.Head); + _head = info.controlRig.GetBoneTransform(HumanBodyBones.Head); _defaultHeadPosition = _head.position; - _ikCalculator.SetModel(info.animator, DownHand); - InitializeArmLengthFactor(info.animator); + _ikCalculator.SetModel(info.controlRig, DownHand); + InitializeArmLengthFactor(info.controlRig); _hasModel = true; }; diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/BarracudaHand/Scripts/BarracudaHandIkCalculator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/BarracudaHand/Scripts/BarracudaHandIkCalculator.cs index f2422170..49ebd9db 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/BarracudaHand/Scripts/BarracudaHandIkCalculator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/BarracudaHand/Scripts/BarracudaHandIkCalculator.cs @@ -1,4 +1,5 @@ using UnityEngine; +using UniVRM10; namespace Baku.VMagicMirror.IK { diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ColliderBasedFitting/ColliderBasedAvatarParamLoader.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ColliderBasedFitting/ColliderBasedAvatarParamLoader.cs index 12ad3859..815badef 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ColliderBasedFitting/ColliderBasedAvatarParamLoader.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ColliderBasedFitting/ColliderBasedAvatarParamLoader.cs @@ -1,5 +1,6 @@ using System.Linq; using UnityEngine; +using UniVRM10; using Zenject; namespace Baku.VMagicMirror @@ -25,13 +26,13 @@ public void Initialize(IVRMLoadable vrmLoadable) private void ReadParams(VrmLoadedInfo info) { - var leftHand = info.animator.GetBoneTransform(HumanBodyBones.LeftHand).position; - var leftPalm = GetLeftHandRaycastReferencePosition(info.animator, leftHand); + var leftHand = info.controlRig.GetBoneTransform(HumanBodyBones.LeftHand).position; + var leftPalm = GetLeftHandRaycastReferencePosition(info.controlRig, leftHand); - var rightHand = info.animator.GetBoneTransform(HumanBodyBones.RightHand).position; - var rightPalm = GetRightHandRaycastReferencePosition(info.animator, rightHand); + var rightHand = info.controlRig.GetBoneTransform(HumanBodyBones.RightHand).position; + var rightPalm = GetRightHandRaycastReferencePosition(info.controlRig, rightHand); - var height = info.animator.GetBoneTransform(HumanBodyBones.Head).position.y; + var height = info.controlRig.GetBoneTransform(HumanBodyBones.Head).position.y; using (var colliders = AvatarColliders.LoadMeshColliders( info.vrmRoot.gameObject, colliderPrefab, transform)) diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger.meta similarity index 77% rename from VMagicMirror/Assets/VRMSpringBoneOptimize.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger.meta index 02015cd0..f0bef22f 100644 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6c82f8eb1fee18642a75593a030b5dba +guid: 126d10bf1384ff04b91b762fd078b2a4 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizer.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizer.cs new file mode 100644 index 00000000..77a3482c --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizer.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UniVRM10; + +namespace Baku.VMagicMirror +{ + /// + /// VRM 1.0モデルがロードされたシーンにこのコンポーネントを含むprefabを置くことで、ControlRigがビジュアライズされます + /// + public class ControlRigVisualizer : MonoBehaviour + { + [SerializeField] private ControlRigVisualizerBone bonePrefab; + + private void Start() + { + var instance = FindObjectOfType(); + if (instance == null) + { + Debug.LogWarning("There is no VRM10Instance, could not initialize visualizer"); + return; + } + + if (instance.Runtime.ControlRig == null) + { + Debug.LogError("ControlRig does not exist in VRM instance. Check ControlRigGenerateOption settings"); + return; + } + + Initialize(instance.Runtime.ControlRig); + } + + private void Initialize(Vrm10RuntimeControlRig controlRig) + { + var bones = new HashSet(); + var t = transform; + foreach (var source in controlRig.Bones) + { + var bone = Instantiate(bonePrefab, t); + bone.Attach(source.Value); + bones.Add(bone); + } + + foreach (var bone in bones) + { + //NOTE: ControlRigはHumanoidBoneだけで構成されるので、アタッチしたボーンの階層からビジュアライザの階層が組める + var parent = + bones.FirstOrDefault(b => b.AttachTarget == bone.AttachTargetParent); + if (parent != null) + { + bone.SetBoneParent(parent); + } + } + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizer.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizer.cs.meta new file mode 100644 index 00000000..56a4040f --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a78ab5a4bb325864687b571bd9146473 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 20200 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizerBone.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizerBone.cs new file mode 100644 index 00000000..72eac608 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizerBone.cs @@ -0,0 +1,51 @@ +using UnityEngine; +using UniVRM10; + +namespace Baku.VMagicMirror +{ + public class ControlRigVisualizerBone : MonoBehaviour + { + [SerializeField] private LineRenderer lineRenderer; + [SerializeField] private Transform controlBoneVisualizeTransform; + [SerializeField] private Transform controlTargetVisualizeTransform; + + private Vrm10ControlBone _controlBone; + private bool _hasBoneParent = false; + private Transform _boneParent = null; + + public Transform AttachTarget => _controlBone.ControlBone; + public Transform AttachTargetParent => _controlBone.ControlBone.parent; + + public void Attach(Vrm10ControlBone controlBone) + { + _controlBone = controlBone; + } + + private void Update() + { + controlBoneVisualizeTransform.SetPositionAndRotation( + _controlBone.ControlBone.position, _controlBone.ControlBone.rotation + ); + + controlTargetVisualizeTransform.SetPositionAndRotation( + _controlBone.ControlTarget.position, _controlBone.ControlTarget.rotation + ); + + if (!_hasBoneParent) + { + lineRenderer.enabled = false; + return; + } + + lineRenderer.enabled = true; + lineRenderer.SetPosition(0, AttachTarget.position); + lineRenderer.SetPosition(1, AttachTargetParent.position); + } + + public void SetBoneParent(ControlRigVisualizerBone parent) + { + _boneParent = parent.transform; + _hasBoneParent = true; + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizerBone.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizerBone.cs.meta new file mode 100644 index 00000000..3db55a5e --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Debugger/ControlRigVisualizerBone.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3547811dc3b182849989f9251b40ebf4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Environment/DeviceTransforms/PenController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Environment/DeviceTransforms/PenController.cs index e82e2b81..08ef73a9 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Environment/DeviceTransforms/PenController.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Environment/DeviceTransforms/PenController.cs @@ -53,9 +53,9 @@ public void Initialize(IMessageReceiver receiver, IMessageSender sender, IVRMLoa vrmLoadable.VrmLoaded += info => { - _rightWrist = info.animator.GetBoneTransform(HumanBodyBones.RightHand); - _rightIndexProximal = info.animator.GetBoneTransform(HumanBodyBones.RightIndexIntermediate); - _rightThumbIntermediate = info.animator.GetBoneTransform(HumanBodyBones.RightThumbDistal); + _rightWrist = info.controlRig.GetBoneTransform(HumanBodyBones.RightHand); + _rightIndexProximal = info.controlRig.GetBoneTransform(HumanBodyBones.RightIndexIntermediate); + _rightThumbIntermediate = info.controlRig.GetBoneTransform(HumanBodyBones.RightThumbDistal); _hasValidFinger = (_rightIndexProximal != null && _rightThumbIntermediate != null); _hasModel = true; _sender.SendCommand(MessageFactory.Instance.SetModelDoesNotSupportPen(!_hasValidFinger)); diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Environment/Wind/VRMWind.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Environment/Wind/VRMWind.cs index 1d816293..0f71fe3e 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Environment/Wind/VRMWind.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Environment/Wind/VRMWind.cs @@ -1,8 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using UnityEngine; +using UniVRM10; using Zenject; -using VRM.Optimize.Jobs; +using Random = UnityEngine.Random; namespace Baku.VMagicMirror { @@ -63,9 +65,12 @@ public WindItem(Vector3 orientation, float riseCount, float sitCount, float maxF } private float _windGenerateCount = 0; - private VRMSpringBoneJob[] _springBones = new VRMSpringBoneJob[] { }; - private Vector3[] _originalGravityDirections = new Vector3[] { }; - private float[] _originalGravityFactors = new float[] { }; + + private bool _hasModel = false; + private Vrm10Instance _instance = null; + private VRM10SpringBoneJoint[] _springBones = Array.Empty(); + private Vector3[] _originalGravityDirections = Array.Empty(); + private float[] _originalGravityFactors = Array.Empty(); private readonly List _windItems = new List(); public bool WindEnabled { get; private set; } @@ -118,21 +123,17 @@ private void Update() UpdateWindGenerateCount(); UpdateWindItems(); - - Vector3 localWindForce = Vector3.zero; - for (int i = 0; i < _windItems.Count; i++) + + var localWindForce = Vector3.zero; + foreach (var wind in _windItems) { - localWindForce += _windItems[i].CurrentFactor * _windItems[i].Orientation; + localWindForce += wind.CurrentFactor * wind.Orientation; } - Vector3 windForce = transform.rotation * localWindForce; - for (int i = 0; i < _springBones.Length; i++) + var windForce = transform.rotation * localWindForce; + if (_hasModel) { - var bone = _springBones[i]; - //NOTE: 力を合成して斜めに力をかけるのが狙い - var forceSum = _originalGravityFactors[i] * _originalGravityDirections[i] + windForce; - bone.m_gravityDir = forceSum.normalized; - bone.m_gravityPower = forceSum.magnitude; + _instance.Runtime.ExternalForce = windForce; } } @@ -181,16 +182,20 @@ private void UpdateWindItems() private void OnVrmUnloading() { - _springBones = new VRMSpringBoneJob[] { }; - _originalGravityDirections = new Vector3[]{ }; - _originalGravityFactors = new float[] { }; + _hasModel = false; + _instance = null; + _springBones = Array.Empty(); + _originalGravityDirections = Array.Empty(); + _originalGravityFactors = Array.Empty(); } private void OnVrmLoaded(VrmLoadedInfo info) { - _springBones = info.vrmRoot.GetComponentsInChildren(); + _instance = info.instance; + _springBones = info.instance.SpringBone.Springs.SelectMany(spring => spring.Joints).ToArray(); _originalGravityDirections = _springBones.Select(b => b.m_gravityDir).ToArray(); _originalGravityFactors = _springBones.Select(b => b.m_gravityPower).ToArray(); + _hasModel = true; } } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/ExternalTrackerDataSource.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/ExternalTrackerDataSource.cs index 466c2772..958d33ae 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/ExternalTrackerDataSource.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/ExternalTrackerDataSource.cs @@ -4,6 +4,7 @@ using Zenject; using Baku.VMagicMirror.ExternalTracker.iFacialMocap; using UniRx; +using UniVRM10; namespace Baku.VMagicMirror.ExternalTracker { @@ -70,16 +71,22 @@ public class ExternalTrackerDataSource : MonoBehaviour private void OnVrmLoaded(VrmLoadedInfo info) { _faceSwitchExtractor.AvatarBlendShapeNames = info - .blendShape - .BlendShapeAvatar - .Clips - .Select(c => c.BlendShapeName) + .instance.Vrm.Expression.LoadExpressionMap() + .Keys.Select(k => + { + var result = k.Name; + if (k.Preset != ExpressionPreset.custom) + { + result = char.ToUpper(result[0]) + result.Substring(1); + } + return result; + }) .ToArray(); } private void OnVrmUnloaded() { - _faceSwitchExtractor.AvatarBlendShapeNames = new string[0]; + _faceSwitchExtractor.AvatarBlendShapeNames = Array.Empty(); } private void OnFaceTrackUpdated(IFaceTrackSource source) diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/FaceSwitch/FaceSwitchData.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/FaceSwitch/FaceSwitchData.cs index bbb02e67..a57c4892 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/FaceSwitch/FaceSwitchData.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/FaceSwitch/FaceSwitchData.cs @@ -20,14 +20,14 @@ public static FaceSwitchSettings LoadDefault() { source = FaceSwitchKeys.MouthSmile, threshold = 70, - clipName = "Joy", + clipName = "Happy", keepLipSync = false, }, new FaceSwitchItem() { source = FaceSwitchKeys.BrowDown, threshold = 70, - clipName = "Sorrow", + clipName = "Sad", keepLipSync = false, } }, @@ -44,6 +44,20 @@ public class FaceSwitchItem public string source; public int threshold; public string clipName; + + [NonSerialized] + private string _filteredClipName = null; + public string ClipName + { + get + { + if (_filteredClipName == null) + { + _filteredClipName = BlendShapeCompatUtil.GetVrm10ClipName(clipName); + } + return _filteredClipName; + } + } public bool keepLipSync; public string accessoryName; } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/FaceSwitch/FaceSwitchExtractor.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/FaceSwitch/FaceSwitchExtractor.cs index e2754824..0f53245e 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/FaceSwitch/FaceSwitchExtractor.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/ExternalTracker/FaceSwitch/FaceSwitchExtractor.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; namespace Baku.VMagicMirror.ExternalTracker { @@ -37,7 +38,7 @@ public class FaceSwitchExtractor { public ActiveFaceSwitchItem ActiveItem { get; private set; } = ActiveFaceSwitchItem.Empty; - private string[] _avatarBlendShapeNames = new string[0]; + private string[] _avatarBlendShapeNames = Array.Empty(); /// 現在ロードされているアバターの全ブレンドシェイプ名 public string[] AvatarBlendShapeNames { @@ -63,20 +64,20 @@ public FaceSwitchSettings Setting } //ロードされたアバターと設定を突き合わせた結果得られる、確認すべき条件セットの一覧 - private FaceSwitchItem[] _itemsToCheck = new FaceSwitchItem[0]; + private FaceSwitchItem[] _itemsToCheck = Array.Empty(); private void RefreshItemsToCheck() { if (Setting == null || AvatarBlendShapeNames == null) { - _itemsToCheck = new FaceSwitchItem[0]; + _itemsToCheck = Array.Empty(); return; } //ブレンドシェイプかアクセサリーの適用内容が記載されているものだけ拾う。無効なものを残すとパフォーマンスが落ちるので無視。 _itemsToCheck = Setting.items .Where(i => - AvatarBlendShapeNames.Contains(i.clipName) || !string.IsNullOrEmpty(i.accessoryName)) + AvatarBlendShapeNames.Contains(i.ClipName) || !string.IsNullOrEmpty(i.accessoryName)) .ToArray(); } @@ -86,14 +87,12 @@ private void RefreshItemsToCheck() /// public void Update(IFaceTrackSource source) { - // float smile = 0.5f * (source.Mouth.LeftSmile + source.Mouth.RightSmile); - for (int i = 0; i < _itemsToCheck.Length; i++) { if (ExtractSpecifiedBlendShape(source, _itemsToCheck[i].source) > _itemsToCheck[i].threshold * 0.01f) { ActiveItem = new ActiveFaceSwitchItem( - _itemsToCheck[i].clipName, + _itemsToCheck[i].ClipName, _itemsToCheck[i].keepLipSync, _itemsToCheck[i].accessoryName ); diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/HandTracker/ImageBaseHandIkGenerator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/HandTracker/ImageBaseHandIkGenerator.cs index a327d3e4..ef11e66f 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/HandTracker/ImageBaseHandIkGenerator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/InputMonitoring/HandTracker/ImageBaseHandIkGenerator.cs @@ -155,7 +155,7 @@ public struct ImageBaseHandIkGeneratorSetting vrmLoadable.VrmLoaded += info => { - var animator = info.animator; + var animator = info.controlRig; _head = animator.GetBoneTransform(HumanBodyBones.Head); _hips = animator.GetBoneTransform(HumanBodyBones.Hips); diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Installer/FaceControlInstaller.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Installer/FaceControlInstaller.cs index 7ece1120..2f3fe24e 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Installer/FaceControlInstaller.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Installer/FaceControlInstaller.cs @@ -6,7 +6,6 @@ namespace Baku.VMagicMirror.Installer /// 顔周りでなんかインストールするやつ public class FaceControlInstaller : InstallerBase { - [SerializeField] private BlendShapeInitializer blendShapeInitializer = null; [SerializeField] private VmmLipSyncContextBase lipSyncContext = null; [SerializeField] private LipSyncIntegrator lipSyncIntegrator = null; [SerializeField] private VRMAutoBlink autoBlink = null; @@ -16,14 +15,17 @@ public override void Install(DiContainer container) { container.Bind().FromInstance(lipSyncContext).AsCached(); container.BindInstances( - blendShapeInitializer, lipSyncIntegrator, autoBlink, eyeBoneAngleSetter ); + container.BindInterfacesAndSelfTo().AsSingle(); container.Bind().AsSingle(); container.BindInterfacesTo().AsSingle(); + + //ブレンドシェイプの内訳の確認処理で、意味のある処理ではないけど一応つねに入れておく + container.Bind().AsSingle(); } } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Installer/ModelLoadInstaller.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Installer/ModelLoadInstaller.cs index 03ea88cc..57109bbd 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Installer/ModelLoadInstaller.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Installer/ModelLoadInstaller.cs @@ -6,20 +6,27 @@ namespace Baku.VMagicMirror.Installer /// モデルのロード処理周りの処理をインジェクトしてくれるすごいやつだよ public class ModelLoadInstaller : InstallerBase { - [SerializeField] private VRMLoadController loadController = null; - [SerializeField] private VRMPreviewCanvas vrmPreviewCanvasPrefab = null; + [SerializeField] private VRM10InstanceUpdater instanceUpdater; + [SerializeField] private VRMPreviewCanvas vrmPreviewCanvasPrefab; + [SerializeField] private VRM10MetaView vrm10MetaViewPrefab; public override void Install(DiContainer container) { - container.Bind() - .FromInstance(loadController) - .AsCached(); - + container.BindInstance(instanceUpdater).AsCached(); + container.Bind().AsCached(); + container.Bind().AsSingle(); + container.Bind() .FromComponentInNewPrefab(vrmPreviewCanvasPrefab) .AsCached(); + + container.BindIFactory() + .FromComponentInNewPrefab(vrm10MetaViewPrefab); + container.Bind().AsSingle(); + + container.BindInterfacesAndSelfTo().AsSingle(); + container.BindInterfacesTo().AsSingle(); - container.Bind().AsCached(); container.Bind().AsCached(); } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Interprocess/MemoryMappedFile/MemoryMappedFileConnect.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Interprocess/MemoryMappedFile/MemoryMappedFileConnect.cs index 03096cd7..2b367b39 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Interprocess/MemoryMappedFile/MemoryMappedFileConnect.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/Interprocess/MemoryMappedFile/MemoryMappedFileConnect.cs @@ -58,8 +58,8 @@ public class MemoryMappedFileConnectServer : MemoryMappedNamedConnectBase /// public abstract class MemoryMappedNamedConnectBase { - private const long MemoryMappedFileCapacity = 131072; - private readonly byte[] _readBuffer = new byte[131072]; + private const long MemoryMappedFileCapacity = 262114; + private readonly byte[] _readBuffer = new byte[MemoryMappedFileCapacity]; //送りたいメッセージ(クエリとコマンド両方)の一覧 private readonly ConcurrentQueue _writeMessageQueue = new ConcurrentQueue(); diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/IVRMLoadable.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/IVRMLoadable.cs index 4d6f2c77..aa899a9f 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/IVRMLoadable.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/IVRMLoadable.cs @@ -1,4 +1,5 @@ using System; +using UniRx; namespace Baku.VMagicMirror { @@ -15,5 +16,8 @@ public interface IVRMLoadable /// VRMをアンロードするときに呼び出されます。 event Action VrmDisposing; + + /// 現在のモデルがVRM 0.xなのかVRM 1.0なのかが分かるプロパティ + IReadOnlyReactiveProperty ModelVersion { get; } } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/ReplacedVRMSpringBoneScheduler.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/ReplacedVRMSpringBoneScheduler.cs deleted file mode 100644 index 43374d9b..00000000 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/ReplacedVRMSpringBoneScheduler.cs +++ /dev/null @@ -1,42 +0,0 @@ -using UnityEngine; -using Zenject; -using VRM.Optimize; -using VRM.Optimize.Jobs; - -namespace Baku.VMagicMirror -{ - [RequireComponent(typeof(CentralizedJobScheduler))] - public class ReplacedVRMSpringBoneScheduler : MonoBehaviour - { - [Inject] - public void Initialize(IVRMLoadable vrmLoadable) - { - _vrmLoadable = vrmLoadable; - } - - private IVRMLoadable _vrmLoadable; - private CentralizedJobScheduler _scheduler = null; - private GameObject _vrm = null; - - private void Start() - { - _scheduler = GetComponent(); - //NOTE: タイミングが早くないとダメ。VRMWindより先に初期化したい - _vrmLoadable.PreVrmLoaded += OnVrmLoaded; - _vrmLoadable.VrmDisposing += OnVrmUnloading; - } - - private void OnVrmUnloading() - { - _scheduler.RemoveBuffer(_vrm); - _vrm = null; - } - - private void OnVrmLoaded(VrmLoadedInfo info) - { - _vrm = info.vrmRoot.gameObject; - ReplaceComponents.ReplaceJobs(_vrm); - _scheduler.AddBuffer(_vrm); - } - } -} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10InstanceUpdater.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10InstanceUpdater.cs new file mode 100644 index 00000000..e8075a35 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10InstanceUpdater.cs @@ -0,0 +1,41 @@ +using System; +using UnityEngine; +using UniVRM10; +using Zenject; + +namespace Baku.VMagicMirror +{ + /// + /// VRM10Instance.Runtime.Processの呼び出しタイミングを調整してくれるやつ. + /// UPMのコードの実行タイミングは勝手に変更できないので… + /// + public class VRM10InstanceUpdater : MonoBehaviour + { + private bool _hasModel; + private Vrm10Instance _instance; + + [Inject] + public void Initialize(IVRMLoadable vrmLoadable) + { + vrmLoadable.VrmLoaded += info => + { + _instance = info.instance; + _hasModel = true; + }; + + vrmLoadable.VrmDisposing += () => + { + _instance = null; + _hasModel = false; + }; + } + + private void LateUpdate() + { + if (_hasModel) + { + _instance.Runtime.Process(); + } + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10InstanceUpdater.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10InstanceUpdater.cs.meta new file mode 100644 index 00000000..13091394 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10InstanceUpdater.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2e37b3175f700840974083a3e50fd9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 13000 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadController.cs new file mode 100644 index 00000000..2a35b130 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadController.cs @@ -0,0 +1,318 @@ +using System; +using System.IO; +using System.Threading; +using Baku.VMagicMirror.IK; +using Cysharp.Threading.Tasks; +using RootMotion.FinalIK; +using UniGLTF.Extensions.VRMC_vrm; +using UniRx; +using UnityEngine; +using UniVRM10; +using UniVRM10.Migration; +using Zenject; +using Object = UnityEngine.Object; + +namespace Baku.VMagicMirror +{ + public enum CurrentModelVersion + { + Unloaded, + Vrm0x, + Vrm10, + } + + /// VRMのロード処理をやるやつで、VRM 0.xとVRM 1.0両方に対応するようなもの + public class VRM10LoadController : IVRMLoadable, IInitializable, IDisposable + { + public event Action PreVrmLoaded; + public event Action VrmLoaded; + public event Action PostVrmLoaded; + public event Action VrmDisposing; + + private readonly IMessageSender _sender; + private readonly IMessageReceiver _receiver; + private readonly BuiltInMotionClipData _builtInClip; + private readonly IKTargetTransforms _ikTargets; + private readonly VrmLoadProcessBroker _previewBroker; + private readonly ErrorIndicateSender _errorSender; + private readonly ErrorInfoFactory _errorInfoFactory; + + private readonly CompositeDisposable _disposable = new CompositeDisposable(); + private readonly CancellationTokenSource _cts = new CancellationTokenSource(); + + private Vrm10Instance _instance = null; + //NOTE: controlRigはinstanceとライフサイクルが違う(可能性がある)ので要注意 + private Vrm10RuntimeControlRig _controlRig = null; + + private readonly ReactiveProperty _modelVersion = + new ReactiveProperty(CurrentModelVersion.Unloaded); + public IReadOnlyReactiveProperty ModelVersion => _modelVersion; + + [Inject] + public VRM10LoadController( + IMessageSender sender, + IMessageReceiver receiver, + BuiltInMotionClipData builtInClip, + VrmLoadProcessBroker previewBroker, + IKTargetTransforms ikTargets, + ErrorIndicateSender errorSender, + ErrorInfoFactory errorInfoFactory + ) + { + _sender = sender; + _receiver = receiver; + _builtInClip = builtInClip; + _previewBroker = previewBroker; + _ikTargets = ikTargets; + _errorSender = errorSender; + _errorInfoFactory = errorInfoFactory; + } + + public void Initialize() + { + _receiver.AssignCommandHandler( + VmmCommands.OpenVrmPreview, + message => LoadModelForPreview(message.Content).Forget() + ); + _receiver.AssignCommandHandler( + VmmCommands.OpenVrm, + message => + { + _previewBroker.RequestHide(); + LoadModel(message.Content).Forget(); + }); + _receiver.AssignCommandHandler( + VmmCommands.CancelLoadVrm, + _ => _previewBroker.RequestHide() + ); + + _previewBroker.VRoidModelLoaded + .Subscribe(v => + { + OnVrmLoadedFromVRoidHub(v.modelId, v.instance, v.isVrm10); + }) + .AddTo(_disposable); + } + + public void Dispose() + { + _disposable.Dispose(); + _cts?.Cancel(); + _cts?.Dispose(); + } + + private async UniTaskVoid LoadModelForPreview(string path) + { + if (!File.Exists(path)) + { + return; + } + + if (Path.GetExtension(path).ToLower() != ".vrm") + { + LogOutput.Instance.Write($"unknown file type: {path}"); + return; + } + + Vrm10Instance instance = null; + try + { + var bytes = File.ReadAllBytes(path); + //コールバックが呼ばれて終わり、インスタンスはすぐ捨てる + instance = await Vrm10.LoadBytesAsync(bytes, + true, + ControlRigGenerationOption.None, + false, + vrmMetaInformationCallback: OnMetaDetectedForPreview, + ct: _cts.Token + ); + } + catch (Exception ex) + { + HandleLoadError(ex); + } + finally + { + if (instance != null) + { + Object.Destroy(instance.gameObject); + } + } + } + + private async UniTaskVoid LoadModel(string path) + { + if (!File.Exists(path)) + { + return; + } + + if (Path.GetExtension(path).ToLower() != ".vrm") + { + LogOutput.Instance.Write($"unknown file type: {path}"); + return; + } + + try + { + var bytes = File.ReadAllBytes(path); + var instance = await Vrm10.LoadBytesAsync(bytes, + true, + ControlRigGenerationOption.Generate, + true, + vrmMetaInformationCallback: OnMetaDetectedForModelLoad, + ct: _cts.Token + ); + + //NOTE: VRM 0.xのcontext.EnableUpdateWhenOffscreen();に相当する。 + //LoadBytesAsyncの一貫で実行されてそうだったら消してもいい + foreach(var sr in instance.gameObject.GetComponentsInChildren()) + { + sr.updateWhenOffscreen = true; + } + + _sender.SendCommand( + MessageFactory.Instance.ModelNameConfirmedOnLoad("VRM File: " + instance.Vrm.Meta.Name) + ); + SetModel(instance); + } + catch (Exception ex) + { + HandleLoadError(ex); + } + } + + private void OnMetaDetectedForPreview(Texture2D thumbnail, Meta vrm10meta, Vrm0Meta vrm0meta) + { + if (vrm10meta == null && vrm0meta == null) + { + LogOutput.Instance.Write("Error: Both VRM 0.x / VRM 1.0 meta were not found"); + return; + } + + if (vrm10meta != null) + { + _previewBroker.RequestShowVrm1Meta(vrm10meta, thumbnail); + } + else + { + _previewBroker.RequestShowVrm0Meta(vrm0meta, thumbnail); + } + } + + private void OnMetaDetectedForModelLoad(Texture2D thumbnail, Meta vrm10meta, Vrm0Meta vrm0meta) + { + _modelVersion.Value = vrm10meta != null ? CurrentModelVersion.Vrm10 : CurrentModelVersion.Vrm0x; + } + + public void OnVrmLoadedFromVRoidHub(string modelId, Vrm10Instance instance, bool isVrm10) + { + try + { + //オクルージョン関連は切っておく: + //context.EnableUpdateWhenOffscreen()に相当する処理 + foreach(var sr in instance.gameObject.GetComponentsInChildren()) + { + sr.updateWhenOffscreen = true; + } + _modelVersion.Value = isVrm10 ? CurrentModelVersion.Vrm10 : CurrentModelVersion.Vrm0x; + SetModel(instance); + } + catch (Exception ex) + { + //NOTE: ここでVRM1.0が来たかどうか知れると良いが、GameObjectで投げ込まれると対処できないので諦める + //(そもそもVRoidのUIでメタデータ表示に失敗しそうな気もするが) + HandleLoadError(ex); + } + } + + private void ReleaseCurrentVrm() + { + //モデルがロード前のときはイベント発火しないようにする。 + //これは理想挙動のためではなく、従来実装に合わすことでバグを起きにくくするため + if (_instance != null) + { + VrmDisposing?.Invoke(); + } + + //NOTE: 分けたほうが良さそうに見えてるので分けてるが、不要なら_instanceのDestroyだけで済ます + // _controlRig?.Dispose(); + // _controlRig = null; + + if (_instance != null) + { + Object.Destroy(_instance.gameObject); + } + _instance = null; + _modelVersion.Value = CurrentModelVersion.Unloaded; + } + + private void SetModel(Vrm10Instance instance) + { + ReleaseCurrentVrm(); + + if (instance == null) + { + return; + } + + _instance = instance; + //NOTE: Script Execution OrderをVMM側で制御したいので。 + instance.UpdateType = Vrm10Instance.UpdateTypes.None; + var go = instance.gameObject; + + //セットアップのうちFinalIKに思い切り依存した所が別スクリプトになってます + VRM10LoadControllerHelper.SetupVrm(instance, _ikTargets); + + var animator = go.GetComponent(); + animator.runtimeAnimatorController = _builtInClip.DefaultAnimatorController; + + var renderers = go.GetComponentsInChildren(); + foreach (var r in renderers) + { + //セルフシャドウは明示的に切る: ちょっとでも軽量化したい + r.receiveShadows = false; + } + + var info = new VrmLoadedInfo() + { + modelVersion = _modelVersion.Value, + vrmRoot = go.transform, + animator = animator, + instance = instance, + fbbIk = go.GetComponentInChildren(), + //NOTE: このbsがないことでエラーが起こるのはイベント購読側が悪い。 + //blendShape = blendShapeProxy, + renderers = renderers, + }; + + PreVrmLoaded?.Invoke(info); + VrmLoaded?.Invoke(info); + PostVrmLoaded?.Invoke(info); + } + + private void HandleLoadError(Exception ex) + { + string logContent = + _errorInfoFactory.LoadVrmErrorContentPrefix() + + "--\n" + LogOutput.ExToString(ex) + "\n--"; + + LogOutput.Instance.Write(logContent); + _errorSender.SendError( + _errorInfoFactory.LoadVrmErrorTitle(), + logContent, + ErrorIndicateSender.ErrorLevel.Error + ); + } + + [Serializable] + public struct VrmLoadSetting + { + public Transform bodyTarget; + public Transform leftHandTarget; + public Transform rightHandTarget; + public Transform rightIndexTarget; + public Transform headTarget; + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadController.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadController.cs.meta new file mode 100644 index 00000000..96a10cfb --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5a181b99d9be044f9e41d10a0f4e41c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadControllerHelper.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadControllerHelper.cs new file mode 100644 index 00000000..ed501de5 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadControllerHelper.cs @@ -0,0 +1,159 @@ +using System; +using System.Linq; +using Baku.VMagicMirror.IK; +using UnityEngine; +using RootMotion; +using RootMotion.FinalIK; +using UniVRM10; + +namespace Baku.VMagicMirror +{ + /// の後継版で、VRM1.0形式に対応したもの + public static class VRM10LoadControllerHelper + { + public static void SetupVrm(Vrm10Instance instance, IKTargetTransforms ikTargets) + { + + var animator = instance.GetComponent(); + animator.applyRootMotion = false; + + var controlRig = instance.Runtime.ControlRig; + var controlRigRoot = controlRig.GetBoneTransform(HumanBodyBones.Hips).parent; + var bipedReferences = LoadReferencesFromVrm(controlRig, controlRigRoot); + _ = AddFBBIK(controlRig.GetBoneTransform(HumanBodyBones.Hips).parent.gameObject, ikTargets, bipedReferences); + + //NOTE: 要するに勝手にLookAt結果を代入しなければいい、という話. + //VRM0ではCurveMapを勝手にいじってたが、これはモデルを尊重してない行為だと思うので廃止 + instance.LookAtTargetType = VRM10ObjectLookAt.LookAtTargetTypes.CalcYawPitchToGaze; + instance.Gaze = ikTargets.LookAt; + + AddLookAtIK(controlRigRoot.gameObject, ikTargets.LookAt, controlRig, bipedReferences.root); + AddFingerRigToRightIndex(controlRig, ikTargets); + } + + private static FullBodyBipedIK AddFBBIK(GameObject go, IKTargetTransforms ikTargets, BipedReferences reference) + { + var fbbik = go.AddComponent(); + fbbik.SetReferences(reference, null); + + //IK目標をロードしたVRMのspineに合わせることで、BodyIKがいきなり動いてしまうのを防ぐ。 + //bodyTargetは実際には多階層なので当て方に注意 + ikTargets.Body.position = reference.spine[0].position; + fbbik.solver.bodyEffector.target = ikTargets.Body; + fbbik.solver.bodyEffector.positionWeight = 0.5f; + //Editorで "FBBIK > Body > Mapping > Maintain Head Rot"を選んだ時の値を↓で入れてる(デフォルト0、ある程度大きくするとLook Atの見栄えがよい) + fbbik.solver.boneMappings[0].maintainRotationWeight = 0.7f; + + fbbik.solver.leftHandEffector.target = ikTargets.LeftHand; + fbbik.solver.leftHandEffector.positionWeight = 1.0f; + fbbik.solver.leftHandEffector.rotationWeight = 1.0f; + + fbbik.solver.rightHandEffector.target = ikTargets.RightHand; + fbbik.solver.rightHandEffector.positionWeight = 1.0f; + fbbik.solver.rightHandEffector.rotationWeight = 1.0f; + + //右手のpullを小さくするのはプレゼンモード中にキャラが吹っ飛んでいかないための対策。 + //右だけやるとバランス的におかしいので、左も揃える。 + //※「0でも良いのでは?」という説も近年出ている + fbbik.solver.rightArmChain.pull = 0.1f; + fbbik.solver.leftArmChain.pull = 0.1f; + + //NOTE: 足についてはSimpleAnimationを使うとO脚みたくなっちゃうので、それを防ぐために入れる。 + //(pull = 0相当にしたいんだけどそういうの無い…?) + fbbik.solver.leftFootEffector.target = ikTargets.LeftFoot; + fbbik.solver.leftFootEffector.positionWeight = 1f; + fbbik.solver.leftFootEffector.rotationWeight = 0f; + fbbik.solver.leftLegChain.pull = 0f; + + fbbik.solver.rightFootEffector.target = ikTargets.RightFoot; + fbbik.solver.rightFootEffector.positionWeight = 1f; + fbbik.solver.rightFootEffector.rotationWeight = 0f; + fbbik.solver.rightLegChain.pull = 0f; + + fbbik.solver.SetLimbOrientations(new BipedLimbOrientations( + new BipedLimbOrientations.LimbOrientation(Vector3.forward, Vector3.forward, Vector3.left), + new BipedLimbOrientations.LimbOrientation(Vector3.forward, Vector3.forward, Vector3.left), + new BipedLimbOrientations.LimbOrientation(Vector3.forward, Vector3.forward, Vector3.left), + new BipedLimbOrientations.LimbOrientation(Vector3.forward, Vector3.forward, Vector3.left) + )); + + return fbbik; + } + + private static void AddLookAtIK(GameObject go, Transform headTarget, Vrm10RuntimeControlRig controlRig, Transform referenceRoot) + { + var lookAtIk = go.AddComponent(); + lookAtIk.solver.SetChain( + new[] + { + controlRig.GetBoneTransform(HumanBodyBones.Spine), + controlRig.GetBoneTransform(HumanBodyBones.Chest), + controlRig.GetBoneTransform(HumanBodyBones.UpperChest), + controlRig.GetBoneTransform(HumanBodyBones.Neck), + } + .Where(t => t != null) + .ToArray(), + controlRig.GetBoneTransform(HumanBodyBones.Head), + Array.Empty(), + referenceRoot + ); + + lookAtIk.solver.target = headTarget; + lookAtIk.solver.bodyWeight = 0.2f; + lookAtIk.solver.headWeight = 0.5f; + } + + private static BipedReferences LoadReferencesFromVrm(Vrm10RuntimeControlRig controlRig, Transform root) + { + return new BipedReferences() + { + root = root, + pelvis = controlRig.GetBoneTransform(HumanBodyBones.Hips), + + leftThigh = controlRig.GetBoneTransform(HumanBodyBones.LeftUpperLeg), + leftCalf = controlRig.GetBoneTransform(HumanBodyBones.LeftLowerLeg), + leftFoot = controlRig.GetBoneTransform(HumanBodyBones.LeftFoot), + + rightThigh = controlRig.GetBoneTransform(HumanBodyBones.RightUpperLeg), + rightCalf = controlRig.GetBoneTransform(HumanBodyBones.RightLowerLeg), + rightFoot = controlRig.GetBoneTransform(HumanBodyBones.RightFoot), + + leftUpperArm = controlRig.GetBoneTransform(HumanBodyBones.LeftUpperArm), + leftForearm = controlRig.GetBoneTransform(HumanBodyBones.LeftLowerArm), + leftHand = controlRig.GetBoneTransform(HumanBodyBones.LeftHand), + + rightUpperArm = controlRig.GetBoneTransform(HumanBodyBones.RightUpperArm), + rightForearm = controlRig.GetBoneTransform(HumanBodyBones.RightLowerArm), + rightHand = controlRig.GetBoneTransform(HumanBodyBones.RightHand), + + head = controlRig.GetBoneTransform(HumanBodyBones.Head), + + spine = new [] + { + controlRig.GetBoneTransform(HumanBodyBones.Spine), + }, + + eyes = Array.Empty(), + }; + } + + private static void AddFingerRigToRightIndex(Vrm10RuntimeControlRig controlRig, IKTargetTransforms ikTargets) + { + //NOTE: FinalIKのサンプルにあるFingerRigを持ち込んでみる。 + var rightHand = controlRig.GetBoneTransform(HumanBodyBones.RightHand); + + var fingerRig = rightHand.gameObject.AddComponent(); + fingerRig.AddFinger( + controlRig.GetBoneTransform(HumanBodyBones.RightIndexProximal), + controlRig.GetBoneTransform(HumanBodyBones.RightIndexIntermediate), + controlRig.GetBoneTransform(HumanBodyBones.RightIndexDistal), + ikTargets.RightIndex + ); + //とりあえず無効化し、有効にするのはInputDeviceToMotionの責務にする + fingerRig.weight = 0.0f; + fingerRig.fingers[0].rotationDOF = Finger.DOF.One; + fingerRig.fingers[0].weight = 1.0f; + fingerRig.fingers[0].rotationWeight = 0; + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadControllerHelper.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadControllerHelper.cs.meta new file mode 100644 index 00000000..2617fae7 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRM10LoadControllerHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77d1d96a36ae2af449c37c540496aebe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadController.cs index b3adcfe9..ed0caff2 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadController.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadController.cs @@ -6,6 +6,7 @@ using UniGLTF; using UnityEngine; using UniHumanoid; +using UniRx; using VRM; using Zenject; @@ -29,6 +30,10 @@ public class VRMLoadController : MonoBehaviour, IVRMLoadable private ErrorIndicateSender _errorSender = null; private ErrorInfoFactory _errorInfoFactory = null; + //NOTE: 使わないはずだが一応こう書いておく + public IReadOnlyReactiveProperty ModelVersion { get; } + = new ReactiveProperty(CurrentModelVersion.Vrm0x); + [Inject] public void Initialize( IMessageSender sender, @@ -79,7 +84,8 @@ private void LoadModelForPreview(string path) var parser = new GlbLowLevelParser("", bytes); using var data = parser.Parse(); using var context = new VRMImporterContext(new VRMData(data)); - _previewCanvas.Show(context); + //すぐなくなるので削除します、using statementのトレーサビリティ都合で… + //_previewCanvas.Show(context); } else { @@ -189,8 +195,9 @@ private void SetModel(GameObject go) var info = new VrmLoadedInfo() { vrmRoot = go.transform, - animator = animator, - blendShape = blendShapeProxy, + //animator = animator, + //クラスごと削除予定なので、この粒度のコンパイラ警告はむしろ邪魔 + //blendShape = blendShapeProxy, renderers = renderers, }; @@ -259,13 +266,4 @@ public struct VrmLoadSetting public Transform headTarget; } } - - [Serializable] - public struct VrmLoadedInfo - { - public Transform vrmRoot; - public Animator animator; - public VRMBlendShapeProxy blendShape; - public Renderer[] renderers; - } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadedInfo.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadedInfo.cs new file mode 100644 index 00000000..87e9aa2b --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadedInfo.cs @@ -0,0 +1,23 @@ +using System; +using RootMotion.FinalIK; +using UnityEngine; +using UniVRM10; + +namespace Baku.VMagicMirror +{ + [Serializable] + public struct VrmLoadedInfo + { + public CurrentModelVersion modelVersion; + public Transform vrmRoot; + public Animator animator; + public Animator controlRig => animator; + //NOTE: property細分化してトレーサビリティとってもいいかも、ExpressionSettingsとか + public Vrm10Instance instance; + public Vrm10RuntimeExpression RuntimeFacialExpression => instance.Runtime.Expression; + public FullBodyBipedIK fbbIk; + //[Obsolete("use `FacialExpression` instead")] + //public VRMBlendShapeProxy blendShape; + public Renderer[] renderers; + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadedInfo.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadedInfo.cs.meta new file mode 100644 index 00000000..32b8cc6e --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMLoadedInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ceed88fbafd63c048939fe41a978ae83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMMetaPreviewBroker.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMMetaPreviewBroker.cs new file mode 100644 index 00000000..1d2c2615 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMMetaPreviewBroker.cs @@ -0,0 +1,36 @@ +using System; +using UniGLTF.Extensions.VRMC_vrm; +using UniRx; +using UnityEngine; +using UniVRM10; +using UniVRM10.Migration; + +namespace Baku.VMagicMirror +{ + /// VRMのメタ情報表示リクエストのブローカー + public class VrmLoadProcessBroker + { + private readonly Subject<(Vrm0Meta, Texture2D)> _showVrm0MetaRequested = new Subject<(Vrm0Meta, Texture2D)>(); + public IObservable<(Vrm0Meta meta, Texture2D thumbnail)> ShowVrm0MetaRequested => _showVrm0MetaRequested; + + private readonly Subject<(Meta, Texture2D)> _showVrm1MetaRequested = new Subject<(Meta, Texture2D)>(); + public IObservable<(Meta meta, Texture2D thumbnail)> ShowVrm1MetaRequested => _showVrm1MetaRequested; + + private readonly Subject<(string modelId, Vrm10Instance instance, bool isVrm10)> _vroidModelLoaded + = new Subject<(string modelId, Vrm10Instance instance, bool isVrm10)>(); + public IObservable<(string modelId, Vrm10Instance instance, bool isVrm10)> VRoidModelLoaded => + _vroidModelLoaded; + + private readonly Subject _hideRequested = new Subject(); + public IObservable HideRequested => _hideRequested; + + public void RequestShowVrm0Meta(Vrm0Meta meta, Texture2D thumbnail) => _showVrm0MetaRequested.OnNext((meta, thumbnail)); + public void RequestShowVrm1Meta(Meta meta, Texture2D thumbnail) => _showVrm1MetaRequested.OnNext((meta, thumbnail)); + + //NOTE: この関数はロード要求ではなくて「ロードしました」という報告っぽい感じ + public void NotifyVRoidModelLoaded(string modelId, Vrm10Instance instance, bool isVrm10) + => _vroidModelLoaded.OnNext((modelId, instance, isVrm10)); + + public void RequestHide() => _hideRequested.OnNext(Unit.Default); + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMMetaPreviewBroker.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMMetaPreviewBroker.cs.meta new file mode 100644 index 00000000..5b84b32d --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMMetaPreviewBroker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01d4dda0458906145b13ec466783548a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewCanvas.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewCanvas.cs index 648aee1c..d1141d02 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewCanvas.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewCanvas.cs @@ -1,6 +1,10 @@ using UnityEngine; +using UniVRM10.Migration; using VRM; using Zenject; +using AllowedUser = VRM.AllowedUser; +using UssageLicense = VRM.UssageLicense; +using LicenseType = VRM.LicenseType; namespace Baku.VMagicMirror { @@ -38,13 +42,31 @@ private void CreateCanvasIfNotExist() .AddListener(() => Application.OpenURL(_otherLicenseUrl)); } - public void Show(VRMImporterContext context) + // public void Show(VRMImporterContext context) + // { + // CreateCanvasIfNotExist(); + // + // var meta = context.ReadMeta(true); + // _otherPermissionUrl = meta.OtherPermissionUrl ?? ""; + // _otherLicenseUrl = meta.OtherLicenseUrl ?? ""; + // _canvas.UISupport.ButtonOpenOtherPermissionUrl.interactable = !string.IsNullOrEmpty(_otherPermissionUrl); + // _canvas.UISupport.ButtonOpenOtherLicenseUrl.interactable = !string.IsNullOrEmpty(_otherLicenseUrl); + // + // //サムネが無いVRMをロードするとき、前回のサムネが残っちゃうのを防ぐ + // _canvas.UISupport.ResetThumbnail(); + // + // _canvas.Locale.SetLocale(LanguageNameToLocaleName(_previewLanguage.Language)); + // _canvas.PreviewUI.setMeta(meta); + // _canvas.gameObject.SetActive(true); + // } + + public void Show(Vrm0Meta meta, Texture2D thumbnail) { CreateCanvasIfNotExist(); - var meta = context.ReadMeta(true); - _otherPermissionUrl = meta.OtherPermissionUrl ?? ""; - _otherLicenseUrl = meta.OtherLicenseUrl ?? ""; + //var meta = context.ReadMeta(true); + _otherPermissionUrl = meta.otherPermissionUrl ?? ""; + _otherLicenseUrl = meta.otherLicenseUrl ?? ""; _canvas.UISupport.ButtonOpenOtherPermissionUrl.interactable = !string.IsNullOrEmpty(_otherPermissionUrl); _canvas.UISupport.ButtonOpenOtherLicenseUrl.interactable = !string.IsNullOrEmpty(_otherLicenseUrl); @@ -52,10 +74,13 @@ public void Show(VRMImporterContext context) _canvas.UISupport.ResetThumbnail(); _canvas.Locale.SetLocale(LanguageNameToLocaleName(_previewLanguage.Language)); - _canvas.PreviewUI.setMeta(meta); + //ちょっと横着だが、旧UIの実装を放置できるように「一瞬作ってすぐ破棄」というスタイルにしている + var oldMeta = CreateOldMetaObject(meta, thumbnail); + _canvas.PreviewUI.setMeta(oldMeta); + Destroy(oldMeta); _canvas.gameObject.SetActive(true); } - + public void Hide() { if (_canvas != null) @@ -76,5 +101,30 @@ private static string LanguageNameToLocaleName(string languageName) } } + private static VRMMetaObject CreateOldMetaObject(Vrm0Meta meta, Texture2D thumbnail) + { + var result = ScriptableObject.CreateInstance(); + result.Thumbnail = thumbnail; + + //NOTE: ExporterVersionないが、まあ不要ということで… + result.ExporterVersion = ""; + result.Title = meta.title; + result.Version = meta.version; + result.Author = meta.author; + result.ContactInformation = meta.contactInformation; + result.Reference = meta.reference; + result.AllowedUser = (AllowedUser) meta.allowedUser; + result.ViolentUssage = meta.violentUsage ? UssageLicense.Allow : UssageLicense.Disallow; + result.SexualUssage = meta.sexualUsage ? UssageLicense.Allow : UssageLicense.Disallow; + result.CommercialUssage = meta.commercialUsage ? UssageLicense.Allow : UssageLicense.Disallow; + + result.OtherPermissionUrl = meta.otherPermissionUrl; + + result.LicenseType = (LicenseType) meta.licenseType; + result.OtherLicenseUrl = meta.otherLicenseUrl; + + return result; + } + } } diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewPresenter.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewPresenter.cs new file mode 100644 index 00000000..d960d813 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewPresenter.cs @@ -0,0 +1,66 @@ +using UniRx; +using UnityEngine; + +namespace Baku.VMagicMirror +{ + public class VRMPreviewPresenter : PresenterBase + { + private readonly VRMPreviewCanvas _vrm0view; + private readonly VRM10MetaViewController _vrm1view; + private readonly VrmLoadProcessBroker _broker; + private Texture2D _copiedThumbnail = null; + + public VRMPreviewPresenter( + VRMPreviewCanvas vrm0view, + VRM10MetaViewController vrm1view, + VrmLoadProcessBroker broker + ) + { + _vrm0view = vrm0view; + _vrm1view = vrm1view; + _broker = broker; + } + + public override void Initialize() + { + _broker.ShowVrm0MetaRequested + .Subscribe(v => + { + GetCopiedThumbnail(v.thumbnail); + _vrm0view.Show(v.meta, _copiedThumbnail); + }) + .AddTo(this); + _broker.ShowVrm1MetaRequested + .Subscribe(v => + { + GetCopiedThumbnail(v.thumbnail); + _vrm1view.Show(v.meta, _copiedThumbnail); + }) + .AddTo(this); + + _broker.HideRequested + .Subscribe(_ => + { + _vrm0view.Hide(); + _vrm1view.Hide(); + if (_copiedThumbnail != null) + { + Object.Destroy(_copiedThumbnail); + } + _copiedThumbnail = null; + }) + .AddTo(this); + } + + private void GetCopiedThumbnail(Texture2D thumbnail) + { + if (_copiedThumbnail != null) + { + Object.Destroy(_copiedThumbnail); + } + + _copiedThumbnail = new Texture2D(thumbnail.width, thumbnail.height, thumbnail.format, false); + Graphics.CopyTexture(thumbnail, _copiedThumbnail); + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewPresenter.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewPresenter.cs.meta new file mode 100644 index 00000000..12ae1286 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/VRMPreviewPresenter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34cf5e8ad79d78947831c815a42ea931 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/Vrm10Validator.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/Vrm10Validator.cs index 0b8d415d..d4bfb506 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/Vrm10Validator.cs +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/ModelLoad/VRMLoad/Vrm10Validator.cs @@ -33,8 +33,6 @@ public static async UniTask CheckModelIsVrm10(byte[] binary, CancellationT } } - Debug.Log("detect VRM 1.0 model"); - LogOutput.Instance.Write("detect VRM 1.0 model"); return _isVrm10; } diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI.meta similarity index 77% rename from VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer.meta rename to VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI.meta index 85568cc2..af5286cc 100644 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer.meta +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0ce0c485eded6574c8d9fb8aa5b10cb6 +guid: 835be397a2d15f24585c6f5a456da433 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaLicenseItemView.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaLicenseItemView.cs new file mode 100644 index 00000000..95902cbd --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaLicenseItemView.cs @@ -0,0 +1,37 @@ +using System; +using TMPro; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace Baku.VMagicMirror +{ + public class VRM10MetaLicenseItemView : MonoBehaviour + { + [SerializeField] private GameObject noneTextObject = null; + [SerializeField] private Button openUrlButton = null; + [SerializeField] private TextMeshProUGUI urlText = null; + + //NOTE: 勝手にApplication.OpenUrlしてもそんなに害はないが、いちおうMetaViewControllerに読ます + public IObservable OpenUrlRequested => openUrlButton + .OnClickAsObservable() + .Select(_ => urlText.text); + + public void SetUrl(string url) + { + if (string.IsNullOrEmpty(url)) + { + urlText.gameObject.SetActive(false); + openUrlButton.gameObject.SetActive(false); + noneTextObject.SetActive(true); + } + else + { + urlText.text = url; + urlText.gameObject.SetActive(true); + openUrlButton.gameObject.SetActive(true); + noneTextObject.SetActive(false); + } + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaLicenseItemView.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaLicenseItemView.cs.meta new file mode 100644 index 00000000..ff375b4f --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaLicenseItemView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64c91c4998f39364697c883d162d6a04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaView.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaView.cs new file mode 100644 index 00000000..5b2cb312 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaView.cs @@ -0,0 +1,328 @@ +using System; +using TMPro; +using UniGLTF.Extensions.VRMC_vrm; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace Baku.VMagicMirror +{ + public enum PreviewUILocale + { + Japanese, + English, + } + + /// VRM1.0用のメタ情報を表示するUI + public class VRM10MetaView : MonoBehaviour + { + //TODO: テキストのハードコーディング避けるのは考えてもいいが、 + //分量的にハードコーディングでも許せる + 3言語以上サポートするモチベが低め + + //NOTE: 理由があればTMPでもいいです、ぜんぶ + [Serializable] + class Headers + { + //要らんものはprefab側でobjectを消したりしてもよい + [SerializeField] private TextMeshProUGUI title; + [SerializeField] private TextMeshProUGUI version; + [SerializeField] private TextMeshProUGUI authors; + [SerializeField] private TextMeshProUGUI copyright; + [SerializeField] private TextMeshProUGUI contactInformation; + [SerializeField] private TextMeshProUGUI references; + [SerializeField] private TextMeshProUGUI thirdPartyLicenses; + [SerializeField] private TextMeshProUGUI licenseUrl; + [SerializeField] private TextMeshProUGUI usageHeader; + [SerializeField] private TextMeshProUGUI avatarPermission; + [SerializeField] private TextMeshProUGUI allowExcessiveViolentUsage; + [SerializeField] private TextMeshProUGUI allowExcessiveSexualUsage; + [SerializeField] private TextMeshProUGUI allowPoliticalOrReligiousUsage; + [SerializeField] private TextMeshProUGUI allowAntisocialOrHateUsage; + [SerializeField] private TextMeshProUGUI creditNotation; + [SerializeField] private TextMeshProUGUI allowRedistribution; + [SerializeField] private TextMeshProUGUI modification; + [SerializeField] private TextMeshProUGUI commercialUsage; + [SerializeField] private TextMeshProUGUI otherLicenseUrl; + + public void SetLocale(PreviewUILocale locale) + { + switch (locale) + { + case PreviewUILocale.Japanese: + title.text = "モデル名: "; + version.text = "バージョン: "; + authors.text = "製作者: "; + copyright.text = "Copyright: "; + contactInformation.text = "連絡先: "; + references.text = "関連情報: "; + thirdPartyLicenses.text = "サードパーティライセンス: "; + licenseUrl.text = "ライセンスURL: "; + + usageHeader.text = "利用方法"; + avatarPermission.text = "アバターとしての使用: "; + allowExcessiveViolentUsage.text = "過剰な暴力表現: "; + allowExcessiveSexualUsage.text = "過剰な性的表現: "; + allowPoliticalOrReligiousUsage.text = "政治・宗教的使用: "; + allowAntisocialOrHateUsage.text = "反社会的・差別的表現: "; + commercialUsage.text = "商用利用: "; + creditNotation.text = "クレジット表記: "; + allowRedistribution.text = "再配布: "; + modification.text = "モデル改変および再配布: "; + + otherLicenseUrl.text = "その他のライセンスURL: "; + break; + case PreviewUILocale.English: + default: + title.text = "Name: "; + version.text = "Version: "; + authors.text = "Authors: "; + copyright.text = "Copyright: "; + contactInformation.text = "Contact: "; + references.text = "Reference: "; + thirdPartyLicenses.text = "3rd Party License: "; + licenseUrl.text = "License URL: "; + + usageHeader.text = "Allowed Usages:"; + + avatarPermission.text = "Use as Avatar: "; + allowExcessiveViolentUsage.text = "Excessively Violent: "; + allowExcessiveSexualUsage.text = "Excessively Sexual: "; + allowPoliticalOrReligiousUsage.text = "Political or Religious: "; + allowAntisocialOrHateUsage.text = "Antisocial or Hate: "; + commercialUsage.text = "Commercial Usage: "; + + creditNotation.text = "Credit Notation: "; + allowRedistribution.text = "Redistribution: "; + modification.text = "Modification: "; + + otherLicenseUrl.text = "Other License URL: "; + break; + + //TODO: English + } + } + } + + [Serializable] + class Inputs + { + [SerializeField] private TextMeshProUGUI title; + [SerializeField] private TextMeshProUGUI version; + [SerializeField] private TextMeshProUGUI authors; + [SerializeField] private TextMeshProUGUI copyright; + [SerializeField] private TextMeshProUGUI contactInformation; + [SerializeField] private TextMeshProUGUI references; + + [SerializeField] private TextMeshProUGUI avatarPermission; + [SerializeField] private TextMeshProUGUI allowExcessiveViolentUsage; + [SerializeField] private TextMeshProUGUI allowExcessiveSexualUsage; + [SerializeField] private TextMeshProUGUI allowPoliticalOrReligiousUsage; + [SerializeField] private TextMeshProUGUI allowAntisocialOrHateUsage; + [SerializeField] private TextMeshProUGUI creditNotation; + [SerializeField] private TextMeshProUGUI allowRedistribution; + [SerializeField] private TextMeshProUGUI modification; + [SerializeField] private TextMeshProUGUI commercialUsage; + + [SerializeField] private VRM10MetaLicenseItemView licenseUrlItem; + [SerializeField] private VRM10MetaLicenseItemView thirdPartyLicenseUrlItem; + [SerializeField] private VRM10MetaLicenseItemView otherLicenseUrlItem; + + public IObservable OpenUrlRequested => Observable.Merge( + licenseUrlItem.OpenUrlRequested, + thirdPartyLicenseUrlItem.OpenUrlRequested, + otherLicenseUrlItem.OpenUrlRequested + ); + + //NOTE: enumの内容をlocaleと突き合わせて反映したりする + public void Update(Meta meta, PreviewUILocale locale) + { + title.text = meta.Name; + version.text = meta.Version; + authors.text = string.Join(", ", meta.Authors); + copyright.text = meta.CopyrightInformation ?? ""; + contactInformation.text = meta.ContactInformation ?? ""; + references.text = (meta.References != null && meta.References.Count > 0) + ? string.Join(", ", meta.References) + : ""; + + avatarPermission.text = GetAvatarPermissionString(meta.AvatarPermission, locale); + allowExcessiveViolentUsage.text = + GetUsageAllowString(meta.AllowExcessivelySexualUsage == true, locale); + allowExcessiveViolentUsage.color = + GetUsageAllowColor(meta.AllowExcessivelySexualUsage == true); + allowExcessiveSexualUsage.text = + GetUsageAllowString(meta.AllowExcessivelySexualUsage == true, locale); + allowExcessiveSexualUsage.color = + GetUsageAllowColor(meta.AllowExcessivelySexualUsage == true); + allowPoliticalOrReligiousUsage.text = + GetUsageAllowString(meta.AllowPoliticalOrReligiousUsage == true, locale); + allowPoliticalOrReligiousUsage.color = + GetUsageAllowColor(meta.AllowPoliticalOrReligiousUsage == true); + allowAntisocialOrHateUsage.text = + GetUsageAllowString(meta.AllowAntisocialOrHateUsage == true, locale); + allowAntisocialOrHateUsage.color = + GetUsageAllowColor(meta.AllowAntisocialOrHateUsage == true); + + creditNotation.text = + GetRequiredBoolString(meta.CreditNotation == CreditNotationType.required, locale); + allowRedistribution.text = + GetUsageAllowString(meta.AllowRedistribution == true, locale); + allowRedistribution.color = + GetUsageAllowColor(meta.AllowRedistribution == true); + commercialUsage.text = GetCommercialUsageString(meta.CommercialUsage, locale); + modification.text = GetModificationPermissionString(meta.Modification, locale); + + licenseUrlItem.SetUrl(meta.LicenseUrl); + thirdPartyLicenseUrlItem.SetUrl(meta.ThirdPartyLicenses); + otherLicenseUrlItem.SetUrl(meta.OtherLicenseUrl); + } + + private static readonly Color _allowedColor = new Color(3 / 255f, 175 / 255f, 122 / 255f); + private static readonly Color _prohibitedColor = new Color(1f, 75 / 255f, 0f); + + private static string GetAvatarPermissionString(AvatarPermissionType type, PreviewUILocale locale) + { + switch (locale) + { + case PreviewUILocale.Japanese: + switch (type) + { + case AvatarPermissionType.everyone: return "誰でも"; + case AvatarPermissionType.onlySeparatelyLicensedPerson: return "別途許可された人のみ"; + case AvatarPermissionType.onlyAuthor: + default: + return "作者のみ"; + } + case PreviewUILocale.English: + default : + switch (type) + { + case AvatarPermissionType.everyone: return "Everyone"; + case AvatarPermissionType.onlySeparatelyLicensedPerson: return "Only Licensed Person"; + case AvatarPermissionType.onlyAuthor: + default: + return "Only Author"; + } + } + } + + private static string GetCommercialUsageString(CommercialUsageType type, PreviewUILocale locale) + { + switch (locale) + { + case PreviewUILocale.Japanese: + switch (type) + { + case CommercialUsageType.personalProfit: return "個人の商用利用"; + case CommercialUsageType.corporation: return "個人・法人の利用"; + case CommercialUsageType.personalNonProfit: + default: + return "個人の非商用利用"; + } + case PreviewUILocale.English: + default : + switch (type) + { + case CommercialUsageType.personalProfit: return "Personal Profit"; + case CommercialUsageType.corporation: return "Personal or Corporation"; + case CommercialUsageType.personalNonProfit: + default: + return "Personal Non-Profit"; + } + } + } + + private static string GetModificationPermissionString(ModificationType type, PreviewUILocale locale) + { + switch (locale) + { + case PreviewUILocale.Japanese: + switch (type) + { + case ModificationType.allowModificationRedistribution: return "改変して再配布可"; + case ModificationType.allowModification: return "改変可・再配布は禁止"; + case ModificationType.prohibited: + default: + return "不許可"; + } + case PreviewUILocale.English: + default : + switch (type) + { + case ModificationType.allowModificationRedistribution: + return "Can be modified and redistributed"; + case ModificationType.allowModification: + return "Can be modified, but redistribution prohibited"; + case ModificationType.prohibited: + default: + return "Prohibited"; + } + } + } + + private static string GetUsageAllowString(bool isAllowed, PreviewUILocale locale) + { + //シンプルでいい気がしたので… + return isAllowed ? "OK" : "NG"; + } + + private static Color GetUsageAllowColor(bool isAllowed) + { + //NOTE: 別に文化的正しさとかは考えなくてよく、色が違ってメリハリがついてればよい + return isAllowed ? _allowedColor : _prohibitedColor; + } + + private static string GetRequiredBoolString(bool required, PreviewUILocale locale) + { + switch (locale) + { + case PreviewUILocale.Japanese: + return required ? "必須" : "不要"; + case PreviewUILocale.English: + default: + return required ? "Required" : "Unnecessary"; + } + } + + private static string ValueOrNone(string value) + { + return string.IsNullOrEmpty(value) ? "(none)" : value; + } + } + + [SerializeField] private Headers headers; + [SerializeField] private Inputs inputs; + [SerializeField] private RawImage thumbnailImage; + + //NOTE: デフォルト値が無くても大丈夫ならそれはそれでOK + private PreviewUILocale _locale = PreviewUILocale.English; + private Meta _meta = null; + + public IObservable OpenUrlRequested => inputs.OpenUrlRequested; + + public void SetMeta(Meta metaData) + { + _meta = metaData; + inputs.Update(metaData, _locale); + } + + //nullも許可: テクスチャの破棄直前にはnullが来るのを期待 + public void SetThumbnail(Texture2D thumbnail) + { + thumbnailImage.texture = thumbnail; + thumbnailImage.gameObject.SetActive(thumbnail != null); + } + + public void SetLocale(PreviewUILocale locale) + { + _locale = locale; + headers.SetLocale(locale); + if (_meta != null) + { + inputs.Update(_meta, locale); + } + } + + public void SetActive(bool active) => gameObject.SetActive(active); + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaView.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaView.cs.meta new file mode 100644 index 00000000..988fcaf9 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5573aaddfdc4c53448a7467392a99b2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaViewController.cs b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaViewController.cs new file mode 100644 index 00000000..41a815ce --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaViewController.cs @@ -0,0 +1,59 @@ +using UniGLTF.Extensions.VRMC_vrm; +using UnityEngine; +using UniRx; +using Zenject; + +namespace Baku.VMagicMirror +{ + /// VRM1.0用のメタ情報を表示するUIを適宜生成して表示/非表示するすごいやつだよ + public class VRM10MetaViewController + { + private readonly IFactory _viewFactory; + private readonly VRMPreviewLanguage _previewLanguage; + private VRM10MetaView _view = null; + + [Inject] + public VRM10MetaViewController(VRMPreviewLanguage previewLanguage, IFactory viewFactory) + { + _viewFactory = viewFactory; + _previewLanguage = previewLanguage; + } + + public void Show(Meta metaData, Texture2D thumbnail) + { + if (_view == null) + { + _view = _viewFactory.Create(); + _view.OpenUrlRequested + .Subscribe(Application.OpenURL) + .AddTo(_view); + } + + _view.SetLocale(LanguageNameToLocale(_previewLanguage.Language)); + _view.SetMeta(metaData); + _view.SetThumbnail(thumbnail); + _view.SetActive(true); + } + + public void Hide() + { + if (_view != null) + { + _view.SetActive(false); + _view.SetThumbnail(null); + } + } + + private static PreviewUILocale LanguageNameToLocale(string languageName) + { + switch (languageName) + { + case "Japanese": + return PreviewUILocale.Japanese; + //case "English": + default: + return PreviewUILocale.English; + } + } + } +} diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaViewController.cs.meta b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaViewController.cs.meta new file mode 100644 index 00000000..e342bd04 --- /dev/null +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Scripts/UI/VRM10MetaViewController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 072741be0744566449af82ea746e70ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/Baku/VMagicMirror/Settings/BuiltInClips.asset b/VMagicMirror/Assets/Baku/VMagicMirror/Settings/BuiltInClips.asset index d156233d..d76c5ae3 100644 --- a/VMagicMirror/Assets/Baku/VMagicMirror/Settings/BuiltInClips.asset +++ b/VMagicMirror/Assets/Baku/VMagicMirror/Settings/BuiltInClips.asset @@ -12,7 +12,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe3b97cb74fb75545a07d19ee8d25ad5, type: 3} m_Name: BuiltInClips m_EditorClassIdentifier: - animatorController: {fileID: 9100000, guid: dce6e8089192b694e8a7df480d2dd98c, type: 2} + defaultAnimatorController: {fileID: 9100000, guid: 8274142a1807f5848a5dd1166db7d615, + type: 2} defaultStandingAnimation: {fileID: 7400000, guid: 66fb8f57b49136c42ab6f7b5b9f1f6dc, type: 2} items: diff --git a/VMagicMirror/Assets/Packages/TransformControl/Materials/Line.mat b/VMagicMirror/Assets/Packages/TransformControl/Materials/Line.mat new file mode 100644 index 00000000..7f2ff6b9 --- /dev/null +++ b/VMagicMirror/Assets/Packages/TransformControl/Materials/Line.mat @@ -0,0 +1,81 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Line + m_Shader: {fileID: 4800000, guid: 6510e3a865189984f8807aaff768ed49, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZBias: 0 + - _ZTest: 8 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.99949026, g: 0.55345905, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/VMagicMirror/Assets/Packages/TransformControl/Materials/Line.mat.meta b/VMagicMirror/Assets/Packages/TransformControl/Materials/Line.mat.meta new file mode 100644 index 00000000..acfcc679 --- /dev/null +++ b/VMagicMirror/Assets/Packages/TransformControl/Materials/Line.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0c9ae4ab29fd05428fa19e3acdc3d46 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedBuffer.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedBuffer.cs deleted file mode 100644 index 5bc4ca53..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedBuffer.cs +++ /dev/null @@ -1,95 +0,0 @@ -namespace VRM.Optimize.Jobs -{ - using System.Collections.Generic; - using UnityEngine; - using IDisposable = System.IDisposable; - - [DisallowMultipleComponent] - public sealed class CentralizedBuffer : MonoBehaviour, IDisposable - { - // ------------------------------ - - #region // Properties - - // Components References - public VRMSpringBoneJob[] SpringBones { get; private set; } - public List UpdateCenterBones { get; private set; } - public List ColliderGroups { get; } = new List(); - - public List AllNodes { get; } = new List(); - public int ColliderHashMapLength { get; private set; } - - #endregion // Properties - - - // ---------------------------------------------------- - - #region // Public Methods - - public void Initialize() - { - // VRMSpringBoneの初期化 - this.SpringBones = this.GetComponentsInChildren(includeInactive:true); - foreach (var springBone in this.SpringBones) - { - springBone.Initialize(); - this.AllNodes.AddRange(springBone.Nodes); - - // m_centerを持つ物を保持 - if (springBone.m_center != null) - { - if (this.UpdateCenterBones == null) - { - this.UpdateCenterBones = new List(); - } - - this.UpdateCenterBones.Add(springBone); - } - - // SpringBoneに登録されている全コライダーの取得 - // →同じコライダーが参照されている時があるので重複は取り除く - if (springBone.ColliderGroups != null) - { - foreach (var collider in springBone.ColliderGroups) - { - if (collider.Colliders == null || collider.Colliders.Length <= 0) - { - continue; - } - - if (this.ColliderGroups.Contains(collider)) - { - continue; - } - - this.ColliderGroups.Add(collider); - } - } - - // VRMSpringBoneColliderGroupの初期化 - foreach (var collider in this.ColliderGroups) - { - collider.Initialize(); - this.ColliderHashMapLength += collider.BlittableFieldsArray.Length; - } - } - } - - public void Dispose() - { - foreach (var springBone in this.SpringBones) - { - springBone.Dispose(); - } - - foreach (var collider in this.ColliderGroups) - { - collider.Dispose(); - } - - UpdateCenterBones?.Clear(); - } - - #endregion // Public Methods - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedJobScheduler.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedJobScheduler.cs deleted file mode 100644 index 384e7297..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedJobScheduler.cs +++ /dev/null @@ -1,385 +0,0 @@ -namespace VRM.Optimize.Jobs -{ - using System.Collections.Generic; - using UnityEngine; - using UnityEngine.Jobs; - using UnityEngine.Assertions; - using Unity.Jobs; - using Unity.Collections; - using Unity.Mathematics; - using IDisposable = System.IDisposable; - -#if UNITY_5_5_OR_NEWER - // DefaultExecutionOrder(11000) means calclate springbone after FinaiIK( VRIK ) - [DefaultExecutionOrder(11000)] -#endif - [DisallowMultipleComponent] - public sealed class CentralizedJobScheduler : MonoBehaviour, IDisposable - { - // ------------------------------ - - #region // Private Fields(Editable) - - [Header("【Settings】")] [SerializeField] - bool _isAutoGetBuffers = false; - -#if UNITY_EDITOR && ENABLE_DEBUG - [Header("【Gizmos】")] [SerializeField] bool _drawGizmo = false; - [SerializeField] Color _jobSpringBoneColor = Color.red; - [SerializeField] Color _jobColliderColor = Color.magenta; - [SerializeField] Color _originalColliderColor = Color.green; -#endif - - #endregion // Private Fields(Editable) - - // ------------------------------ - - #region // Private Fields - - JobHandle _jobHandle; - - // Jobs Data - SpringBoneJobData _springBoneJobData; - ColliderGroupJobData _colliderGroupJobData; - - // Collider Data - NativeMultiHashMap _colliderHashMap; - int _colliderHashMapLength; - - // Parent Rotations - NativeArray _parentRotations; - - // Center - readonly List _updateCenterBones = new List(); - - // Buffers - readonly List _currentBuffers = new List(); - readonly List _allNodes = new List(); - readonly List _allColliderGroups = new List(); -#if UNITY_EDITOR && ENABLE_DEBUG - readonly List _currentAllBones = new List(); -#endif - - #endregion // Private Fields - - - // ---------------------------------------------------- - - #region // Unity Events - - /// - /// MonoBehaviour.Start - /// - void Start() - { - if (!this._isAutoGetBuffers) return; - this.CreateBuffer(FindObjectsOfType()); - } - - /// - /// MonoBehaviour.LateUpdate - /// - void LateUpdate() - { - this._jobHandle.Complete(); - - // m_centerの更新 - if (this._updateCenterBones.Count > 0) - { - foreach (var springBone in this._updateCenterBones) - { - springBone.UpdateCenterMatrix(); - } - } - - this.ExecuteJobs(); - } - - /// - /// MonoBehaviour.OnDestroy - /// - void OnDestroy() => ((IDisposable) this).Dispose(); - - #endregion // Unity Events - - // ---------------------------------------------------- - - #region // Public Methods - - public void AddBuffer(GameObject obj) - { - var buffer = obj.GetComponent(); - if (buffer == null) - { - buffer = obj.AddComponent(); - } - - AddBuffer(buffer); - } - - public void RemoveBuffer(GameObject obj) - { - var buffer = obj.GetComponent(); - Assert.IsTrue(buffer != null); - - RemoveBuffer(buffer); - } - - public void AddBuffer(CentralizedBuffer buffer) - { - if (this._currentBuffers.Contains(buffer)) return; - buffer.Initialize(); - this._currentBuffers.Add(buffer); - this.CreateBuffer(); - } - - public void RemoveBuffer(CentralizedBuffer buffer) - { - if (!this._currentBuffers.Contains(buffer)) return; - buffer.Dispose(); - this._currentBuffers.Remove(buffer); - this.CreateBuffer(); - } - - #endregion // Public Methods - - // ---------------------------------------------------- - - #region // Private Methods - - void ExecuteJobs() - { - if (this._springBoneJobData.Length <= 0) return; - - if (!this._colliderHashMap.IsCreated) - { - // コライダーの初期化 - this._colliderHashMap = new NativeMultiHashMap( - this._colliderHashMapLength, Allocator.Persistent); - } - else - { - this._colliderHashMap.Clear(); - } - - if (this._colliderHashMap.Capacity != this._colliderHashMapLength) - { - this._colliderHashMap.Dispose(); - // コライダーの初期化 - this._colliderHashMap = new NativeMultiHashMap( - this._colliderHashMapLength, Allocator.Persistent); - } - - var updateColliderHashJobHandle = new UpdateColliderHashJob - { - GroupParams = this._colliderGroupJobData.GroupParams, - ColliderHashMap = this._colliderHashMap.AsParallelWriter(), - }.Schedule(this._colliderGroupJobData.TransformAccessArray); - - // 親の回転の取得 - var updateParentRotationJobHandle = new UpdateParentRotationJob - { - ParentRotations = this._parentRotations, - }.Schedule(this._springBoneJobData.ParentTransformAccessArray); - - // 物理演算 - this._jobHandle = new LogicJob - { - ImmutableNodeParams = this._springBoneJobData.ImmutableNodeParams, - ParentRotations = this._parentRotations, - DeltaTime = Time.deltaTime, - ColliderHashMap = this._colliderHashMap, - VariableNodeParams = this._springBoneJobData.VariableNodeParams, - }.Schedule(this._springBoneJobData.TransformAccessArray, - JobHandle.CombineDependencies(updateColliderHashJobHandle, updateParentRotationJobHandle)); - - JobHandle.ScheduleBatchedJobs(); - } - - void CreateBuffer(CentralizedBuffer[] initBuffers = null) - { - if (initBuffers != null) - { - this._currentBuffers.AddRange(initBuffers); - foreach (var buffer in this._currentBuffers) - { - buffer.Initialize(); - } - } - - this.DisposeBuffers(); - - foreach (var buffer in this._currentBuffers) - { -#if UNITY_EDITOR && ENABLE_DEBUG - foreach (var bone in buffer.SpringBones) - { - this._currentAllBones.Add(bone); - } -#endif - foreach (var node in buffer.AllNodes) - { - this._allNodes.Add(node); - } - - foreach (var group in buffer.ColliderGroups) - { - this._allColliderGroups.Add(group); - } - - this._colliderHashMapLength += buffer.ColliderHashMapLength; - - if (buffer.UpdateCenterBones == null) continue; - this._updateCenterBones.AddRange(buffer.UpdateCenterBones); - } - - this._springBoneJobData = new SpringBoneJobData(this._allNodes); - this._colliderGroupJobData = new ColliderGroupJobData(this._allColliderGroups); - this._parentRotations = new NativeArray(this._allNodes.Count, Allocator.Persistent); - } - - void IDisposable.Dispose() - { - foreach (var buffer in this._currentBuffers) - { - buffer.Dispose(); - } - - this._currentBuffers.Clear(); - - DisposeBuffers(); - } - - void DisposeBuffers() - { - this._jobHandle.Complete(); - - if (this._springBoneJobData.IsCreated) - { - this._springBoneJobData.Dispose(); - } - - if (this._colliderGroupJobData.IsCreated) - { - this._colliderGroupJobData.Dispose(); - } - - if (this._colliderHashMap.IsCreated) - { - this._colliderHashMap.Dispose(); - } - - if (this._parentRotations.IsCreated) - { - this._parentRotations.Dispose(); - } - - this._updateCenterBones.Clear(); - this._allNodes.Clear(); - this._allColliderGroups.Clear(); - this._colliderHashMapLength = 0; -#if UNITY_EDITOR && ENABLE_DEBUG - this._currentAllBones.Clear(); -#endif - } - - #endregion // Private Methods - - -#if UNITY_EDITOR && ENABLE_DEBUG - // ---------------------------------------------------- - - #region // OnDrawGizmos - - /// - /// MonoBehaviour.OnDrawGizmos - /// - void OnDrawGizmos() - { - if (this._currentAllBones == null || this._currentAllBones.Count <= 0 || !this._drawGizmo) - { - return; - } - - this._jobHandle.Complete(); - this.DrawSpringBoneGizmos(); - this.DrawColliderGroupGizmos(); - this.DrawOriginalColliderGroupGizmos(); - } - - unsafe void DrawSpringBoneGizmos() - { - Gizmos.matrix = Matrix4x4.identity; - var length = this._springBoneJobData.TransformAccessArray.length; - var immParam = this._springBoneJobData.ImmutableNodeParams; - var valParam = this._springBoneJobData.VariableNodeParams; - for (var i = 0; i < length; i++) - { - var centerMatrixPtr = immParam[i].CenterMatrixPtr; - var isCenter = (centerMatrixPtr != null); - var centerMatrix = isCenter ? *centerMatrixPtr : float4x4.identity; - var currentTailVal = math.transform(centerMatrix, valParam[i].CurrentTail); - var prevTailVal = math.transform(centerMatrix, valParam[i].PrevTail); - var param = immParam[i].BlittableFieldsPtr; - var radius = param->HitRadius; - Gizmos.color = Color.gray; - Gizmos.DrawLine(currentTailVal, prevTailVal); - Gizmos.DrawWireSphere(prevTailVal, radius); - - var position = this._springBoneJobData.TransformAccessArray[i].position; - Gizmos.color = this._jobSpringBoneColor; - Gizmos.DrawLine(currentTailVal, position); - Gizmos.DrawWireSphere(currentTailVal, radius); - } - } - - void DrawColliderGroupGizmos() - { - Gizmos.matrix = Matrix4x4.identity; - var length = this._colliderGroupJobData.TransformAccessArray.length; - var groupParam = this._colliderGroupJobData.GroupParams; - for (var i = 0; i < length; i++) - { - var trs = this._colliderGroupJobData.TransformAccessArray[i]; - var mat = new float4x4(trs.rotation, trs.position); - for (var j = 0; j < groupParam[i].SphereCollidersLength; j++) - { - var sphereCollider = groupParam[i].GetBlittableFields(j); - Gizmos.color = this._jobColliderColor; - Gizmos.DrawWireSphere(math.transform(mat, sphereCollider.Offset), sphereCollider.Radius); - } - } - } - - void DrawOriginalColliderGroupGizmos() - { - foreach (var springBone in this._currentAllBones) - { - Gizmos.matrix = Matrix4x4.identity; - var colliderGroups = springBone.ColliderGroups; - if (colliderGroups == null || colliderGroups.Length <= 0) - { - continue; - } - - foreach (var group in colliderGroups) - { - Gizmos.color = this._originalColliderColor; - var mat = group.transform.localToWorldMatrix; - Gizmos.matrix = mat * Matrix4x4.Scale(new Vector3( - 1.0f / group.transform.lossyScale.x, - 1.0f / group.transform.lossyScale.y, - 1.0f / group.transform.lossyScale.z)); - foreach (var y in group.Colliders) - { - Gizmos.DrawWireSphere(y.Offset, y.Radius); - } - } - } - } - - #endregion // OnDrawGizmos - -#endif - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedJobScheduler.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedJobScheduler.cs.meta deleted file mode 100644 index 474abdde..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/CentralizedBuffer/CentralizedJobScheduler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 18b66bc1277986d4296bd8916178888e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Defines.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Defines.cs deleted file mode 100644 index 9346621b..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Defines.cs +++ /dev/null @@ -1,154 +0,0 @@ -namespace VRM.Optimize.Jobs -{ - using System.Collections.Generic; - using UnityEngine.Jobs; - using UnityEngine.Assertions; - using Unity.Mathematics; - using Unity.Collections; - using Unity.Collections.LowLevel.Unsafe; - - /// - /// NativeMultiHashMap登録用 - /// - public struct SphereCollider - { - public float3 Position; - public float Radius; - } - - /// - /// Jobで使用するColliderの情報 - /// - public unsafe struct ColliderGroupJobData : System.IDisposable - { - /// - /// VRMSpringBoneColliderGroupが持つ情報 - /// - public struct GroupParam - { - public int InstanceID; - public VRMSpringBoneColliderGroupJob.BlittableFields* BlittableFieldsPtr; - public int SphereCollidersLength; - - public VRMSpringBoneColliderGroupJob.BlittableFields GetBlittableFields(int index) - { - Assert.IsTrue((index >= 0) && (index < this.SphereCollidersLength)); - return *(this.BlittableFieldsPtr + index); - } - } - - public TransformAccessArray TransformAccessArray; - public NativeArray GroupParams; - - public bool IsCreated => TransformAccessArray.isCreated; - - public ColliderGroupJobData(IReadOnlyList groups) - { - var length = groups.Count; - this.TransformAccessArray = new TransformAccessArray(length); - foreach (var group in groups) - { - this.TransformAccessArray.Add(group.transform); - } - - this.GroupParams = new NativeArray(length, Allocator.Persistent, - NativeArrayOptions.UninitializedMemory); - for (var i = 0; i < length; i++) - { - var group = groups[i]; - Assert.IsTrue(group.BlittableFieldsArray.IsCreated); - this.GroupParams[i] = new GroupParam - { - InstanceID = group.GetInstanceID(), - BlittableFieldsPtr = - (VRMSpringBoneColliderGroupJob.BlittableFields*) @group.BlittableFieldsArray.GetUnsafePtr(), - SphereCollidersLength = group.BlittableFieldsArray.Length, - }; - } - } - - public void Dispose() - { - this.TransformAccessArray.Dispose(); - this.GroupParams.Dispose(); - } - } - - /// - /// Jobで使用するSpringBoneの情報 - /// - public unsafe struct SpringBoneJobData : System.IDisposable - { - /// - /// ノードが持つパラメータ(不変値) - /// - public struct ImmutableNodeParam - { - public float Length; - public quaternion LocalRotation; - public float3 BoneAxis; - public VRMSpringBoneJob.BlittableFields* BlittableFieldsPtr; - public float4x4* CenterMatrixPtr; - } - - /// - /// ノードが持つパラメータ(可変値) - /// - public struct VariableNodeParam - { - public float3 CurrentTail; - public float3 PrevTail; - } - - public TransformAccessArray TransformAccessArray; - public TransformAccessArray ParentTransformAccessArray; - public NativeArray ImmutableNodeParams; - public NativeArray VariableNodeParams; - - public bool IsCreated => TransformAccessArray.isCreated; - public int Length { get; } - - public SpringBoneJobData(IReadOnlyList nodes) - { - var length = nodes.Count; - this.Length = length; - this.TransformAccessArray = new TransformAccessArray(length); - this.ParentTransformAccessArray = new TransformAccessArray(length); - foreach (var node in nodes) - { - this.TransformAccessArray.Add(node.Transform); - this.ParentTransformAccessArray.Add(node.Transform.parent); - } - - this.ImmutableNodeParams = new NativeArray(length, Allocator.Persistent, - NativeArrayOptions.UninitializedMemory); - this.VariableNodeParams = new NativeArray(length, Allocator.Persistent, - NativeArrayOptions.UninitializedMemory); - for (var i = 0; i < length; i++) - { - var node = nodes[i]; - this.ImmutableNodeParams[i] = new ImmutableNodeParam - { - Length = node.Length, - LocalRotation = node.LocalRotation, - BoneAxis = node.BoneAxis, - BlittableFieldsPtr = node.BlittableFieldsPtr, - CenterMatrixPtr = node.CenterMatrixPtr, - }; - this.VariableNodeParams[i] = new VariableNodeParam - { - CurrentTail = node.InitTail, - PrevTail = node.InitTail, - }; - } - } - - public void Dispose() - { - this.TransformAccessArray.Dispose(); - this.ParentTransformAccessArray.Dispose(); - this.ImmutableNodeParams.Dispose(); - this.VariableNodeParams.Dispose(); - } - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Defines.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Defines.cs.meta deleted file mode 100644 index 1ed14c6c..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Defines.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d9918cf394edc3f44a6ff338b523dd88 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer.meta deleted file mode 100644 index 67814e34..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 017d6a3618522444eb1655bd1bc614e9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedBuffer.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedBuffer.cs deleted file mode 100644 index c511c7b4..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedBuffer.cs +++ /dev/null @@ -1,124 +0,0 @@ -namespace VRM.Optimize.Jobs -{ - using System.Collections.Generic; - using UnityEngine; - using Unity.Collections; - using Unity.Mathematics; - using IDisposable = System.IDisposable; - - [DisallowMultipleComponent] - public sealed class DistributedBuffer : MonoBehaviour, IDisposable - { - // ------------------------------ - - #region // Properties - - // Components References - public VRMSpringBoneJob[] SpringBones { get; private set; } - public List UpdateCenterBones { get; private set; } - public List ColliderGroups { get; } = new List(); - - // Jobs Data - public SpringBoneJobData SpringBoneJobDataValue { get; private set; } - public ColliderGroupJobData ColliderGroupJobDataValue { get; private set; } - - // Collider Data - public NativeMultiHashMap ColliderHashMap { get; set; } - public int ColliderHashMapLength { get; private set; } - - // Parent Rotations - public NativeArray ParentRotations { get; private set; } - - #endregion // Properties - - - // ---------------------------------------------------- - - #region // Public Methods - - public void Initialize() - { - var allNodes = new List(); - - // VRMSpringBoneの初期化 - this.SpringBones = this.GetComponentsInChildren(includeInactive:true); - foreach (var springBone in this.SpringBones) - { - springBone.Initialize(); - allNodes.AddRange(springBone.Nodes); - - // m_centerを持つ物を保持 - if (springBone.m_center != null) - { - if (this.UpdateCenterBones == null) - { - this.UpdateCenterBones = new List(); - } - - this.UpdateCenterBones.Add(springBone); - } - - // SpringBoneに登録されている全コライダーの取得 - // →同じコライダーが参照されている時があるので重複は取り除く - if (springBone.ColliderGroups != null) - { - foreach (var collider in springBone.ColliderGroups) - { - if (collider.Colliders == null || collider.Colliders.Length <= 0) - { - continue; - } - - if (this.ColliderGroups.Contains(collider)) - { - continue; - } - - this.ColliderGroups.Add(collider); - } - } - } - - this.SpringBoneJobDataValue = new SpringBoneJobData(allNodes); - this.ParentRotations = new NativeArray(allNodes.Count, Allocator.Persistent); - - // VRMSpringBoneColliderGroupの初期化 - foreach (var collider in this.ColliderGroups) - { - collider.Initialize(); - this.ColliderHashMapLength += collider.BlittableFieldsArray.Length; - } - - this.ColliderGroupJobDataValue = new ColliderGroupJobData(this.ColliderGroups); - } - - public void Dispose() - { - if (this.ColliderHashMap.IsCreated) - { - this.ColliderHashMap.Dispose(); - } - - this.SpringBoneJobDataValue.Dispose(); - this.ColliderGroupJobDataValue.Dispose(); - this.ParentRotations.Dispose(); - - foreach (var springBone in this.SpringBones) - { - springBone.Dispose(); - } - - foreach (var collider in this.ColliderGroups) - { - collider.Dispose(); - } - - if (this.UpdateCenterBones != null) - { - this.UpdateCenterBones.Clear(); - } - } - - #endregion // Public Methods - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedBuffer.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedBuffer.cs.meta deleted file mode 100644 index 9f066f8d..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedBuffer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f6ca6447efcdcde4088e467883490d2c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedJobScheduler.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedJobScheduler.cs deleted file mode 100644 index 3e198b06..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedJobScheduler.cs +++ /dev/null @@ -1,292 +0,0 @@ -namespace VRM.Optimize.Jobs -{ - using System.Collections.Generic; - using UnityEngine; - using UnityEngine.Jobs; - using UnityEngine.Assertions; - using Unity.Jobs; - using Unity.Collections; - using Unity.Mathematics; - using IDisposable = System.IDisposable; - -#if UNITY_5_5_OR_NEWER - // DefaultExecutionOrder(11000) means calclate springbone after FinaiIK( VRIK ) - [DefaultExecutionOrder(11000)] -#endif - [DisallowMultipleComponent] - public sealed class DistributedJobScheduler : MonoBehaviour, IDisposable - { - // ------------------------------ - - #region // Private Fields(Editable) - - [Header("【Settings】")] [SerializeField] - bool _isAutoGetBuffers = false; - -#if UNITY_EDITOR && ENABLE_DEBUG - [Header("【Gizmos】")] [SerializeField] bool _drawGizmo = false; - [SerializeField] Color _jobSpringBoneColor = Color.red; - [SerializeField] Color _jobColliderColor = Color.magenta; - [SerializeField] Color _originalColliderColor = Color.green; -#endif - - #endregion // Private Fields(Editable) - - // ------------------------------ - - #region // Private Fields - - JobHandle _jobHandle; - readonly List _currentBuffers = new List(); - - #endregion // Private Fields - - - // ---------------------------------------------------- - - #region // Unity Events - - /// - /// MonoBehaviour.Start - /// - void Start() - { - if (!this._isAutoGetBuffers) return; - foreach (var buffer in FindObjectsOfType()) - { - this.AddBuffer(buffer); - } - } - - /// - /// MonoBehaviour.LateUpdate - /// - void LateUpdate() - { - this._jobHandle.Complete(); - - // m_centerの更新 - foreach (var buff in this._currentBuffers) - { - if (buff.UpdateCenterBones == null) continue; - foreach (var springBone in buff.UpdateCenterBones) - { - springBone.UpdateCenterMatrix(); - } - } - - this.ExecuteJobs(); - } - - /// - /// MonoBehaviour.OnDestroy - /// - void OnDestroy() => ((IDisposable) this).Dispose(); - - #endregion // Unity Events - - // ---------------------------------------------------- - - #region // Public Methods - - public void AddBuffer(GameObject obj) - { - var buffer = obj.GetComponent(); - if (buffer == null) - { - buffer = obj.AddComponent(); - } - - AddBuffer(buffer); - } - - public void RemoveBuffer(GameObject obj) - { - var buffer = obj.GetComponent(); - Assert.IsTrue(buffer != null); - - RemoveBuffer(buffer); - } - - public void AddBuffer(DistributedBuffer buffer) - { - if (this._currentBuffers.Contains(buffer)) return; - buffer.Initialize(); - this._currentBuffers.Add(buffer); - } - - public void RemoveBuffer(DistributedBuffer buffer) - { - if (!this._currentBuffers.Contains(buffer)) return; - buffer.Dispose(); - this._currentBuffers.Remove(buffer); - } - - #endregion // Public Methods - - // ---------------------------------------------------- - - #region // Private Methods - - void ExecuteJobs() - { - var handles = new NativeArray(this._currentBuffers.Count, Allocator.TempJob); - for (var i = 0; i < this._currentBuffers.Count; ++i) - { - var buff = this._currentBuffers[i]; - if (buff.ColliderHashMap.IsCreated) - { - buff.ColliderHashMap.Dispose(); - } - - // コライダーの更新 - buff.ColliderHashMap = new NativeMultiHashMap( - buff.ColliderHashMapLength, Allocator.TempJob); - - var handle = new UpdateColliderHashJob - { - GroupParams = buff.ColliderGroupJobDataValue.GroupParams, - ColliderHashMap = buff.ColliderHashMap.AsParallelWriter(), - }.Schedule(buff.ColliderGroupJobDataValue.TransformAccessArray); - - // 親の回転の取得 - handle = new UpdateParentRotationJob - { - ParentRotations = buff.ParentRotations, - }.Schedule(buff.SpringBoneJobDataValue.ParentTransformAccessArray, handle); - - // 物理演算 - handles[i] = new LogicJob - { - ImmutableNodeParams = buff.SpringBoneJobDataValue.ImmutableNodeParams, - ParentRotations = buff.ParentRotations, - DeltaTime = Time.deltaTime, - ColliderHashMap = buff.ColliderHashMap, - VariableNodeParams = buff.SpringBoneJobDataValue.VariableNodeParams, - }.Schedule(buff.SpringBoneJobDataValue.TransformAccessArray, handle); - } - - this._jobHandle = JobHandle.CombineDependencies(handles); - handles.Dispose(); - JobHandle.ScheduleBatchedJobs(); - } - - void IDisposable.Dispose() - { - foreach (var buffer in this._currentBuffers.ToArray()) - { - this.RemoveBuffer(buffer); - } - } - - #endregion // Private Methods - - -#if UNITY_EDITOR && ENABLE_DEBUG - // ---------------------------------------------------- - - #region // OnDrawGizmos - - /// - /// MonoBehaviour.OnDrawGizmos - /// - void OnDrawGizmos() - { - if (this._currentBuffers == null - || this._currentBuffers.Count <= 0 - || !this._drawGizmo) - { - return; - } - - this._jobHandle.Complete(); - this.DrawSpringBoneGizmos(); - this.DrawColliderGroupGizmos(); - this.DrawOriginalColliderGroupGizmos(); - } - - unsafe void DrawSpringBoneGizmos() - { - foreach (var buff in this._currentBuffers) - { - Gizmos.matrix = Matrix4x4.identity; - var length = buff.SpringBoneJobDataValue.TransformAccessArray.length; - var immParam = buff.SpringBoneJobDataValue.ImmutableNodeParams; - var valParam = buff.SpringBoneJobDataValue.VariableNodeParams; - for (var i = 0; i < length; i++) - { - var centerMatrixPtr = immParam[i].CenterMatrixPtr; - var isCenter = (centerMatrixPtr != null); - var centerMatrix = isCenter ? *centerMatrixPtr : float4x4.identity; - var currentTailVal = math.transform(centerMatrix, valParam[i].CurrentTail); - var prevTailVal = math.transform(centerMatrix, valParam[i].PrevTail); - var param = immParam[i].BlittableFieldsPtr; - var radius = param->HitRadius; - Gizmos.color = Color.gray; - Gizmos.DrawLine(currentTailVal, prevTailVal); - Gizmos.DrawWireSphere(prevTailVal, radius); - - var position = buff.SpringBoneJobDataValue.TransformAccessArray[i].position; - Gizmos.color = this._jobSpringBoneColor; - Gizmos.DrawLine(currentTailVal, position); - Gizmos.DrawWireSphere(currentTailVal, radius); - } - } - } - - void DrawColliderGroupGizmos() - { - Gizmos.matrix = Matrix4x4.identity; - foreach (var buff in this._currentBuffers) - { - var length = buff.ColliderGroupJobDataValue.TransformAccessArray.length; - var groupParam = buff.ColliderGroupJobDataValue.GroupParams; - for (var i = 0; i < length; i++) - { - var trs = buff.ColliderGroupJobDataValue.TransformAccessArray[i]; - var mat = new float4x4(trs.rotation, trs.position); - for (var j = 0; j < groupParam[i].SphereCollidersLength; j++) - { - var sphereCollider = groupParam[i].GetBlittableFields(j); - Gizmos.color = this._jobColliderColor; - Gizmos.DrawWireSphere(math.transform(mat, sphereCollider.Offset), sphereCollider.Radius); - } - } - } - } - - void DrawOriginalColliderGroupGizmos() - { - foreach (var buff in this._currentBuffers) - { - foreach (var springBone in buff.SpringBones) - { - Gizmos.matrix = Matrix4x4.identity; - var colliderGroups = springBone.ColliderGroups; - if (colliderGroups == null || colliderGroups.Length <= 0) - { - continue; - } - - foreach (var group in colliderGroups) - { - Gizmos.color = this._originalColliderColor; - var mat = group.transform.localToWorldMatrix; - Gizmos.matrix = mat * Matrix4x4.Scale(new Vector3( - 1.0f / group.transform.lossyScale.x, - 1.0f / group.transform.lossyScale.y, - 1.0f / group.transform.lossyScale.z)); - foreach (var y in group.Colliders) - { - Gizmos.DrawWireSphere(y.Offset, y.Radius); - } - } - } - } - } - - #endregion // OnDrawGizmos - -#endif - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedJobScheduler.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedJobScheduler.cs.meta deleted file mode 100644 index e86517ac..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/DistributedBuffer/DistributedJobScheduler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a3bf1eee046d3bf4cab287c559245e65 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Jobs.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Jobs.cs deleted file mode 100644 index 025ea5f8..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Jobs.cs +++ /dev/null @@ -1,136 +0,0 @@ -namespace VRM.Optimize.Jobs -{ - using UnityEngine; - using UnityEngine.Jobs; - using Unity.Collections; - using Unity.Mathematics; - using Unity.Burst; - - [BurstCompile] - public struct UpdateColliderHashJob : IJobParallelForTransform - { - [ReadOnly] public NativeArray GroupParams; - public NativeMultiHashMap.ParallelWriter ColliderHashMap; - - void IJobParallelForTransform.Execute(int index, TransformAccess trsAccess) - { - var mat = new float4x4(trsAccess.rotation, trsAccess.position); - var param = this.GroupParams[index]; - for (var i = 0; i < param.SphereCollidersLength; i++) - { - var blittableFields = param.GetBlittableFields(i); - var collider = new SphereCollider - { - Position = math.transform(mat, blittableFields.Offset), - Radius = blittableFields.Radius, - }; - this.ColliderHashMap.Add(param.InstanceID, collider); - } - } - } - - [BurstCompile] - public struct UpdateParentRotationJob : IJobParallelForTransform - { - [WriteOnly] public NativeArray ParentRotations; - - void IJobParallelForTransform.Execute(int index, TransformAccess parentTrsAccess) - { - ParentRotations[index] = parentTrsAccess.rotation; - } - } - - /// - /// original from - /// http://rocketjump.skr.jp/unity3d/109/ - /// - [BurstCompile] - public unsafe struct LogicJob : IJobParallelForTransform - { - [ReadOnly] public NativeArray ImmutableNodeParams; - [ReadOnly] public NativeArray ParentRotations; - [ReadOnly] public float DeltaTime; - [ReadOnly] public NativeMultiHashMap ColliderHashMap; - public NativeArray VariableNodeParams; - - void IJobParallelForTransform.Execute(int index, TransformAccess trsAccess) - { - var blittableFields = *this.ImmutableNodeParams[index].BlittableFieldsPtr; - var vecLength = this.ImmutableNodeParams[index].Length; - var localRotation = this.ImmutableNodeParams[index].LocalRotation; - var boneAxis = this.ImmutableNodeParams[index].BoneAxis; - - var parentRotation = this.ParentRotations[index]; - float3 position = trsAccess.position; - - // 物理演算で用いるパラメータの事前計算 - var stiffnessForce = blittableFields.StiffnessForce * this.DeltaTime; - var dragForce = blittableFields.DragForce; - var external = blittableFields.GravityDir * (blittableFields.GravityPower * this.DeltaTime); - - var centerMatrixPtr = this.ImmutableNodeParams[index].CenterMatrixPtr; - var isCenter = (centerMatrixPtr != null); - var centerMatrix = isCenter ? *centerMatrixPtr : float4x4.identity; - var centerInvertMatrix = isCenter ? math.inverse(centerMatrix) : float4x4.identity; - - var currentTail = math.transform(centerMatrix, this.VariableNodeParams[index].CurrentTail); - var prevTail = math.transform(centerMatrix, this.VariableNodeParams[index].PrevTail); - - // verlet積分で次の位置を計算 - var nextTail = currentTail - // 前フレームの移動を継続する(減衰もあるよ) - + (currentTail - prevTail) * (1.0f - dragForce) - // 親の回転による子ボーンの移動目標 - + math.mul(math.mul(parentRotation, localRotation), boneAxis) * stiffnessForce - // 外力による移動量 - + external; - - // 長さをboneLengthに強制 - nextTail = position + math.normalize(nextTail - position) * vecLength; - - // Collisionで移動 - this.Collision(ref nextTail, ref position, ref vecLength, ref blittableFields); - - this.VariableNodeParams[index] = new SpringBoneJobData.VariableNodeParam - { - CurrentTail = math.transform(centerInvertMatrix, nextTail), - PrevTail = math.transform(centerInvertMatrix, currentTail), - }; - - // 回転を適用 - trsAccess.rotation = this.ApplyRotation(ref nextTail, ref parentRotation, ref localRotation, - ref position, ref boneAxis); - } - - quaternion ApplyRotation(ref float3 nextTail, ref quaternion parentRotation, ref quaternion localRotation, - ref float3 position, ref float3 boneAxis) - { - var rotation = math.mul(parentRotation, localRotation); - return Quaternion.FromToRotation(math.mul(rotation, boneAxis), nextTail - position) * rotation; - } - - void Collision(ref float3 nextTail, ref float3 position, ref float vecLength, - ref VRMSpringBoneJob.BlittableFields blittableFields) - { - var hitRadius = blittableFields.HitRadius; - for (var i = 0; i < blittableFields.ColliderGroupInstanceIDsLength; i++) - { - var instanceID = blittableFields.GetColliderGroupInstanceID(i); - for (var success = - this.ColliderHashMap.TryGetFirstValue(instanceID, out var collider, out var iterator); - success; - success = this.ColliderHashMap.TryGetNextValue(out collider, ref iterator)) - { - var r = hitRadius + collider.Radius; - if (!(math.lengthsq(nextTail - collider.Position) <= (r * r))) continue; - // ヒット。Colliderの半径方向に押し出す - var normal = math.normalize(nextTail - collider.Position); - var posFromCollider = collider.Position + normal * (hitRadius + collider.Radius); - // 長さをboneLengthに強制 - nextTail = position + math.normalize(posFromCollider - position) * vecLength; - } - } - } - } -} - diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Jobs.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Jobs.cs.meta deleted file mode 100644 index 5b9b8c5f..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/Jobs.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 386d8d784dcd0ee42aa5899d91605fa5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/UnsafeUtilityHelper.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/UnsafeUtilityHelper.cs deleted file mode 100644 index 0a68188e..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/UnsafeUtilityHelper.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace VRM.Optimize -{ - using Unity.Collections; - using Unity.Collections.LowLevel.Unsafe; - - public static unsafe class UnsafeUtilityHelper - { - public static void* Malloc(Allocator allocator, int length = 1) where T : struct - { - var size = UnsafeUtility.SizeOf() * length; - var ptr = UnsafeUtility.Malloc(size, UnsafeUtility.AlignOf(), allocator); - UnsafeUtility.MemClear(ptr, size); - return ptr; - } - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/UnsafeUtilityHelper.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/UnsafeUtilityHelper.cs.meta deleted file mode 100644 index f005e11c..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/UnsafeUtilityHelper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1879910a1bba94d459fd97f16946d78e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneColliderGroupJob.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneColliderGroupJob.cs deleted file mode 100644 index b77ed981..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneColliderGroupJob.cs +++ /dev/null @@ -1,118 +0,0 @@ -namespace VRM.Optimize.Jobs -{ - using UnityEngine; - using Unity.Collections; - using Unity.Mathematics; - using IDisposable = System.IDisposable; - - public sealed class VRMSpringBoneColliderGroupJob : MonoBehaviour, IDisposable - { - // ------------------------------ - - #region // Defines - - [System.Serializable] - public class SphereCollider - { - public Vector3 Offset; - [Range(0, 1.0f)] public float Radius; - } - - /// - /// アンマネージドメモリ上で運用する想定の値 - /// - public struct BlittableFields - { - public float3 Offset; - public float Radius; - } - - #endregion // Defines - - // ------------------------------ - - #region // Fields(Editable) - - public SphereCollider[] Colliders = new SphereCollider[] {new SphereCollider {Radius = 0.1f}}; - - #endregion // Fields(Editable) - - // ------------------------------ - - #region // Fields - - public NativeArray BlittableFieldsArray; - - #endregion // Fields - - - // ---------------------------------------------------- - - #region // Unity Events - -#if UNITY_EDITOR && ENABLE_DEBUG - /// - /// MonoBehaviour.Update - /// - void Update() - { - // Editor上でのみInspectorからの動的変更を考慮する - if (!this.BlittableFieldsArray.IsCreated) - { - return; - } - - this.CopyBlittableFields(); - } -#endif - - #endregion // Unity Events - - // ---------------------------------------------------- - - #region // Public Methods - - public void Initialize() - { - if (this.Colliders == null - || this.Colliders.Length <= 0 - || this.BlittableFieldsArray.IsCreated) - { - return; - } - - // コライダー用のNativeArrayを確保 - this.BlittableFieldsArray = new NativeArray(this.Colliders.Length, Allocator.Persistent); - this.CopyBlittableFields(); - } - - public void Dispose() - { - if (this.BlittableFieldsArray.IsCreated) - { - this.BlittableFieldsArray.Dispose(); - } - } - - #endregion // Public Methods - - // ---------------------------------------------------- - - #region // Private Methods - - void CopyBlittableFields() - { - for (var i = 0; i < this.Colliders.Length; i++) - { - var collider = this.Colliders[i]; - this.BlittableFieldsArray[i] = new BlittableFields - { - Offset = collider.Offset, - Radius = collider.Radius, - }; - } - } - - #endregion // Private Methods - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneColliderGroupJob.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneColliderGroupJob.cs.meta deleted file mode 100644 index 8f3134ec..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneColliderGroupJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 668e0fd4edc8f4f8f9d6593ee79c5f84 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneJob.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneJob.cs deleted file mode 100644 index 8f0f5d9a..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneJob.cs +++ /dev/null @@ -1,252 +0,0 @@ -namespace VRM.Optimize.Jobs -{ - using System.Collections.Generic; - using UnityEngine; - using UnityEngine.Assertions; - using Unity.Collections; - using Unity.Collections.LowLevel.Unsafe; - using Unity.Mathematics; - using VRM.Optimize; - using IDisposable = System.IDisposable; - - public sealed unsafe class VRMSpringBoneJob : MonoBehaviour, IDisposable - { - // ------------------------------ - - #region // Defines - - /// - /// アンマネージドメモリ上で運用する想定の値 - /// - public unsafe struct BlittableFields - { - public float StiffnessForce; - public float GravityPower; - public float3 GravityDir; - public float DragForce; - public float HitRadius; - - public int* ColliderGroupInstanceIDs; - public int ColliderGroupInstanceIDsLength; - - public int GetColliderGroupInstanceID(int index) - { - Assert.IsTrue((index >= 0) && (index < this.ColliderGroupInstanceIDsLength)); - return *(ColliderGroupInstanceIDs + index); - } - } - - /// - /// 揺れ物の動作対象となるGameObject - /// - public sealed unsafe class Node - { - public Transform Transform { get; private set; } - public float4x4* CenterMatrixPtr { get; private set; } - public BlittableFields* BlittableFieldsPtr { get; private set; } - public float3 InitTail { get; private set; } - public float Length { get; private set; } - public quaternion LocalRotation { get; private set; } - public float3 BoneAxis { get; private set; } - - public Node( - Transform nodeTrs, - BlittableFields* blittableFieldsPtr, - float4x4* centerMatrixPtr, - float3 initTail, - float length, - quaternion localRotation, - float3 boneAxis) - { - this.Transform = nodeTrs; - this.BlittableFieldsPtr = blittableFieldsPtr; - this.CenterMatrixPtr = centerMatrixPtr; - this.InitTail = initTail; - this.Length = length; - this.LocalRotation = localRotation; - this.BoneAxis = boneAxis; - } - } - - #endregion // Defines - - // ------------------------------ - - #region // Fields(Editable) - - public string m_comment; - - [Header("Settings")] [Range(0, 4)] public float m_stiffnessForce = 1.0f; - [Range(0, 2)] public float m_gravityPower = 0; - public Vector3 m_gravityDir = new Vector3(0, -1.0f, 0); - [Range(0, 1)] public float m_dragForce = 0.4f; - public Transform m_center; - public List RootBones = new List(); - - [Header("Collider")] [Range(0, 0.5f)] public float m_hitRadius = 0.02f; - public VRMSpringBoneColliderGroupJob[] ColliderGroups; - - #endregion // Fields(Editable) - - // ------------------------------ - - #region // Fields - - public List Nodes { get; private set; } = new List(); - - BlittableFields* _blittableFieldsPtr = null; - float4x4* _centerMatrixPtr = null; - NativeArray _colliderGroupInstanceIDs; - - #endregion // Fields - - - // ---------------------------------------------------- - - #region // Unity Events - - /// - /// MonoBehaviour.Update - /// - void Update() - { - // VRMWindでのパラメータ書き換えに対応するために、動的変更をその都度反映する - if (this._blittableFieldsPtr == null) - { - return; - } - - this.CopyBlittableFields(); - } - - #endregion // Unity Events - - // ---------------------------------------------------- - - #region // Public Methods - - public void Initialize() - { - this._blittableFieldsPtr = - (BlittableFields*) UnsafeUtilityHelper.Malloc(Allocator.Persistent); - - if (this.m_center != null) - { - this._centerMatrixPtr = (float4x4*) UnsafeUtilityHelper.Malloc(Allocator.Persistent); - this.UpdateCenterMatrix(); - } - - if (this.ColliderGroups != null && this.ColliderGroups.Length > 0) - { - this._colliderGroupInstanceIDs = new NativeArray(this.ColliderGroups.Length, Allocator.Persistent); - for (var i = 0; i < this._colliderGroupInstanceIDs.Length; i++) - { - this._colliderGroupInstanceIDs[i] = this.ColliderGroups[i].GetInstanceID(); - } - } - - this.CopyBlittableFields(); - - foreach (var go in RootBones) - { - if (go == null) - { - continue; - } - - this.CreateNode(go); - } - } - - public void Dispose() - { - if (this._blittableFieldsPtr != null) - { - UnsafeUtility.Free(this._blittableFieldsPtr, Allocator.Persistent); - this._blittableFieldsPtr = null; - } - - if (this._centerMatrixPtr != null) - { - UnsafeUtility.Free(this._centerMatrixPtr, Allocator.Persistent); - this._centerMatrixPtr = null; - } - - if (this._colliderGroupInstanceIDs.IsCreated) - { - this._colliderGroupInstanceIDs.Dispose(); - } - - Nodes?.Clear(); - } - - public void UpdateCenterMatrix() - { - *this._centerMatrixPtr = this.m_center.localToWorldMatrix; - } - - #endregion // Public Methods - - // ---------------------------------------------------- - - #region // Private Methods - - void CopyBlittableFields() - { - *this._blittableFieldsPtr = new BlittableFields - { - StiffnessForce = this.m_stiffnessForce, - GravityPower = this.m_gravityPower, - GravityDir = this.m_gravityDir, - DragForce = this.m_dragForce, - HitRadius = this.m_hitRadius, - - ColliderGroupInstanceIDs = (this._colliderGroupInstanceIDs.IsCreated) - ? (int*) this._colliderGroupInstanceIDs.GetUnsafePtr() - : null, - ColliderGroupInstanceIDsLength = (this._colliderGroupInstanceIDs.IsCreated) - ? this._colliderGroupInstanceIDs.Length - : 0, - }; - } - - void CreateNode(Transform trs) - { - var nodeTrs = trs; - Vector3 localChildPosition; - if (nodeTrs.childCount == 0) - { - var delta = nodeTrs.position - nodeTrs.parent.position; - var childPosition = nodeTrs.position + delta.normalized * 0.07f; - localChildPosition = nodeTrs.worldToLocalMatrix.MultiplyPoint(childPosition); - } - else - { - var firstChild = nodeTrs.childCount > 0 ? nodeTrs.GetChild(0) : null; - var localPosition = firstChild.localPosition; - var scale = firstChild.lossyScale; - localChildPosition = new Vector3( - localPosition.x * scale.x, - localPosition.y * scale.y, - localPosition.z * scale.z); - } - - var worldChildPosition = nodeTrs.TransformPoint(localChildPosition); - var node = new Node( - nodeTrs, - this._blittableFieldsPtr, - this._centerMatrixPtr, - (this.m_center != null) ? this.m_center.InverseTransformPoint(worldChildPosition) : worldChildPosition, - localChildPosition.magnitude, - nodeTrs.localRotation, - localChildPosition.normalized); - this.Nodes.Add(node); - foreach (Transform child in trs) - { - this.CreateNode(child); - } - } - - #endregion // Private Methods - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneJob.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneJob.cs.meta deleted file mode 100644 index 07c3f4fa..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/Scripts/VRMSpringBoneJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5153d612994454a1fbc9abb9a450a436 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/VRMSpringBoneOptimize.Jobs.asmdef b/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/VRMSpringBoneOptimize.Jobs.asmdef deleted file mode 100644 index 9969aeaa..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Jobs/VRMSpringBoneOptimize.Jobs.asmdef +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "JobVRMSpringBone", - "references": [ - "Unity.Collections", - "Unity.Burst", - "Unity.Mathematics" - ], - "optionalUnityReferences": [], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": true, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [ - "ENABLE_JOB_SPRING_BONE" - ] -} \ No newline at end of file diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/LICENSE.txt b/VMagicMirror/Assets/VRMSpringBoneOptimize/LICENSE.txt deleted file mode 100644 index b1454c8e..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2019 mao - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts.meta deleted file mode 100644 index 13c85b6d..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dd3825838f4e6be458fb35392cfb60eb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/Editor.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/Editor.meta deleted file mode 100644 index 7e96a946..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7c06f24150c93d348814d3a53bc9cba9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/Editor/ReplaceComponentsEditor.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/Editor/ReplaceComponentsEditor.cs deleted file mode 100644 index 3f7b680c..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/Editor/ReplaceComponentsEditor.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace VRM.Optimize.Editor -{ - using UnityEngine; - using UnityEditor; - - // VRM.VRMSpringBoneがUniVRMのバージョンによってはasmdef非対応なので、 - // asmdef非依存で参照を持ってこれるように敢えて配下には含めない. - - public static class ReplaceComponentsEditor - { -#if ENABLE_JOB_SPRING_BONE - [MenuItem("VRMSpringBoneOptimize/Replace SpringBone Components - Jobs")] - static void ReplaceJobComponents() - { - EditorApplication.delayCall += () => - { - var models = GameObject.FindObjectsOfType(); - foreach (var model in models) - { - ReplaceComponents.ReplaceJobs(model.gameObject, true); - } - }; - } -#endif - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/Editor/ReplaceComponentsEditor.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/Editor/ReplaceComponentsEditor.cs.meta deleted file mode 100644 index 602d416f..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/Editor/ReplaceComponentsEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bfc61baf238896f43aa4a57bd99f4b7c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/ReplaceComponents.cs b/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/ReplaceComponents.cs deleted file mode 100644 index e658b16f..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/ReplaceComponents.cs +++ /dev/null @@ -1,113 +0,0 @@ -namespace VRM.Optimize -{ - using UnityEngine; - using VRMSpringBone = VRM.VRMSpringBone; -#if ENABLE_JOB_SPRING_BONE - using JobVRMSpringBone = VRM.Optimize.Jobs.VRMSpringBoneJob; - using JobVRMSpringBoneColliderGroup = VRM.Optimize.Jobs.VRMSpringBoneColliderGroupJob; -#endif - - // VRM.VRMSpringBoneがUniVRMのバージョンによってはasmdef非対応なので、 - // asmdef非依存で参照を持ってこれるように敢えて配下には含めない. - - public static class ReplaceComponents - { -#if ENABLE_JOB_SPRING_BONE - public static void ReplaceJobs(GameObject model, bool isEditor = false) - { - var springBones = model.GetComponentsInChildren(includeInactive:true); - foreach (var oldComponent in springBones) - { - // JobSystem版のComponentをつけた上で、 - // 置き換え前のComponentからシリアライズされているデータをコピー - var newComponent = oldComponent.gameObject.AddComponent(); - newComponent.m_stiffnessForce = oldComponent.m_stiffnessForce; - newComponent.m_gravityPower = oldComponent.m_gravityPower; - newComponent.m_gravityDir = oldComponent.m_gravityDir; - newComponent.m_dragForce = oldComponent.m_dragForce; - newComponent.m_center = oldComponent.m_center; - newComponent.RootBones = oldComponent.RootBones; - newComponent.m_hitRadius = oldComponent.m_hitRadius; - - // VRMSpringBoneColliderGroupの情報をコピー - var oldColliders = oldComponent.ColliderGroups; - if (oldColliders == null || oldColliders.Length <= 0) continue; - var newColliders = new JobVRMSpringBoneColliderGroup[oldColliders.Length]; - for (var j = 0; j < oldColliders.Length; j++) - { - var oldCollider = oldColliders[j]; - var newCollider = oldCollider.gameObject.GetComponent(); - if (newCollider == null) - { - newCollider = oldCollider.gameObject.AddComponent(); - var oldSphereColliders = oldCollider.Colliders; - var newSphereColliders = - new JobVRMSpringBoneColliderGroup.SphereCollider[oldSphereColliders.Length]; - for (var k = 0; k < oldSphereColliders.Length; k++) - { - newSphereColliders[k] = new JobVRMSpringBoneColliderGroup.SphereCollider - { - Offset = oldSphereColliders[k].Offset, - Radius = oldSphereColliders[k].Radius, - }; - } - - newCollider.Colliders = newSphereColliders; - } - - newColliders[j] = newCollider; - } - - newComponent.ColliderGroups = newColliders; - } - -#if UNITY_EDITOR - if (isEditor) - { - DestroyComponentsEditor(springBones); - } - else -#endif - { - DestroyComponents(springBones); - } - } -#endif - - static void DestroyComponents(VRMSpringBone[] springBones) - { - foreach (var oldComponent in springBones) - { - var oldColliders = oldComponent.ColliderGroups; - if (oldColliders != null) - { - foreach (var t in oldColliders) - { - GameObject.Destroy(t); - } - } - - GameObject.Destroy(oldComponent); - } - } - -#if UNITY_EDITOR - static void DestroyComponentsEditor(VRMSpringBone[] springBones) - { - foreach (var oldComponent in springBones) - { - var oldColliders = oldComponent.ColliderGroups; - if (oldColliders != null) - { - foreach (var t in oldColliders) - { - GameObject.DestroyImmediate(t); - } - } - - GameObject.DestroyImmediate(oldComponent); - } - } -#endif - } -} diff --git a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/ReplaceComponents.cs.meta b/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/ReplaceComponents.cs.meta deleted file mode 100644 index 06f84be1..00000000 --- a/VMagicMirror/Assets/VRMSpringBoneOptimize/Scripts/ReplaceComponents.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3484beb9770024889b2df083ad8d9acf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/VMagicMirror/Packages/manifest.json b/VMagicMirror/Packages/manifest.json index 6224a875..a651de04 100644 --- a/VMagicMirror/Packages/manifest.json +++ b/VMagicMirror/Packages/manifest.json @@ -21,10 +21,10 @@ "com.unity.probuilder": "4.5.0", "com.unity.textmeshpro": "3.0.6", "com.unity.ugui": "1.0.0", - "com.vrmc.vrmshaders": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRMShaders#v0.104.0", - "com.vrmc.gltf": "https://github.com/vrm-c/UniVRM.git?path=/Assets/UniGLTF#v0.104.0", - "com.vrmc.univrm": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRM#v0.104.0", - "com.vrmc.vrm": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRM10#v0.104.0", + "com.vrmc.vrmshaders": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRMShaders#v0.107.0", + "com.vrmc.gltf": "https://github.com/vrm-c/UniVRM.git?path=/Assets/UniGLTF#v0.107.0", + "com.vrmc.univrm": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRM#v0.107.0", + "com.vrmc.vrm": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRM10#v0.107.0", "jp.keijiro.mediapipe.blazepalm": "1.0.2", "jp.keijiro.mediapipe.handlandmark": "1.0.1", "jp.keijiro.test-assets": "1.0.1", diff --git a/VMagicMirror/Packages/packages-lock.json b/VMagicMirror/Packages/packages-lock.json index b91460f7..74953769 100644 --- a/VMagicMirror/Packages/packages-lock.json +++ b/VMagicMirror/Packages/packages-lock.json @@ -162,44 +162,44 @@ } }, "com.vrmc.gltf": { - "version": "https://github.com/vrm-c/UniVRM.git?path=/Assets/UniGLTF#v0.104.0", + "version": "https://github.com/vrm-c/UniVRM.git?path=/Assets/UniGLTF#v0.107.0", "depth": 0, "source": "git", "dependencies": { - "com.vrmc.vrmshaders": "0.104.0", + "com.vrmc.vrmshaders": "0.107.0", "com.unity.modules.animation": "1.0.0" }, - "hash": "c466d689bccd003133b13fc5ddb8ff3f53763796" + "hash": "1e8a6b35bdb545baaad88b60cc9d374c31786b2c" }, "com.vrmc.univrm": { - "version": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRM#v0.104.0", + "version": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRM#v0.107.0", "depth": 0, "source": "git", "dependencies": { - "com.vrmc.vrmshaders": "0.104.0", - "com.vrmc.gltf": "0.104.0", + "com.vrmc.vrmshaders": "0.107.0", + "com.vrmc.gltf": "0.107.0", "com.unity.ugui": "1.0.0" }, - "hash": "c466d689bccd003133b13fc5ddb8ff3f53763796" + "hash": "1e8a6b35bdb545baaad88b60cc9d374c31786b2c" }, "com.vrmc.vrm": { - "version": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRM10#v0.104.0", + "version": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRM10#v0.107.0", "depth": 0, "source": "git", "dependencies": { - "com.vrmc.vrmshaders": "0.104.0", - "com.vrmc.gltf": "0.104.0" + "com.vrmc.vrmshaders": "0.107.0", + "com.vrmc.gltf": "0.107.0" }, - "hash": "c466d689bccd003133b13fc5ddb8ff3f53763796" + "hash": "1e8a6b35bdb545baaad88b60cc9d374c31786b2c" }, "com.vrmc.vrmshaders": { - "version": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRMShaders#v0.104.0", + "version": "https://github.com/vrm-c/UniVRM.git?path=/Assets/VRMShaders#v0.107.0", "depth": 0, "source": "git", "dependencies": { "com.unity.modules.imageconversion": "1.0.0" }, - "hash": "c466d689bccd003133b13fc5ddb8ff3f53763796" + "hash": "1e8a6b35bdb545baaad88b60cc9d374c31786b2c" }, "jp.keijiro.mediapipe.blazepalm": { "version": "1.0.2", diff --git a/WPF/VMagicMirrorConfig/Model/Avatar/FaceBlendshapeNameStore.cs b/WPF/VMagicMirrorConfig/Model/Avatar/FaceBlendshapeNameStore.cs index b9899ca0..6865840a 100644 --- a/WPF/VMagicMirrorConfig/Model/Avatar/FaceBlendshapeNameStore.cs +++ b/WPF/VMagicMirrorConfig/Model/Avatar/FaceBlendshapeNameStore.cs @@ -15,7 +15,7 @@ public class FaceMotionBlendShapeNameStore public FaceMotionBlendShapeNameStore() { BlendShapeNames = new ReadOnlyObservableCollection(_blendShapeNames); - var defaultNames = LoadDefaultNames(); + var defaultNames = DefaultBlendShapeNameStore.LoadDefaultNames(); for (int i = 0; i < defaultNames.Length; i++) { _blendShapeNames.Add(defaultNames[i]); @@ -60,7 +60,7 @@ public void Refresh(string? neutralClipName, string? offsetClipName) private void RefreshInternal() { //理想の並び: デフォルトのやつ一覧、今ロードしたVRMにある名前一覧、(今ロードしたVRMにはないけど)設定で使ってる名前一覧 - var newNames = LoadDefaultNames().ToList(); + var newNames = DefaultBlendShapeNameStore.LoadDefaultNames().ToList(); int defaultSetLength = newNames.Count; foreach (var nameInModel in _avatarClipNames) { @@ -105,35 +105,5 @@ private void RefreshInternal() _blendShapeNames.RemoveAt(newNameArray.Length); } } - - private static string[] LoadDefaultNames() - { - return new string[] - { - //「なし」があるのが大事。これによって、条件に合致しても何のブレンドシェイプを起動しない!という事ができる。 - "", - "Joy", - "Angry", - "Sorrow", - "Fun", - - "A", - "I", - "U", - "E", - "O", - - "Neutral", - "Blink", - "Blink_L", - "Blink_R", - - "LookUp", - "LookDown", - "LookLeft", - "LookRight", - }; - } } - } diff --git a/WPF/VMagicMirrorConfig/Model/BlendShapeUtil/DefaultBlendShapeNameStore.cs b/WPF/VMagicMirrorConfig/Model/BlendShapeUtil/DefaultBlendShapeNameStore.cs new file mode 100644 index 00000000..be891300 --- /dev/null +++ b/WPF/VMagicMirrorConfig/Model/BlendShapeUtil/DefaultBlendShapeNameStore.cs @@ -0,0 +1,80 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Baku.VMagicMirrorConfig +{ + internal static class DefaultBlendShapeNameStore + { + //内部的なデータや設定ファイル上ではVRM 0.xの名称を使ったままであり、 + //かつUI表示 + Unityに渡すときだけVRM 1.0用の名前に読み替えるようにする。これは設定ファイルの互換性のため。 + // Joy -> Happy + // Sorrow -> Sad + // Fun -> Relaxed + // Blink_L -> BlinkLeft + // Blink_R -> BlinkRight + private static readonly Dictionary _oldKeyToNewKey = new Dictionary() + { + ["Joy"] = "Happy", + ["Sorrow"] = "Sad", + ["Fun"] = "Relaxed", + ["Blink_L"] = "BlinkLeft", + ["Blink_R"] = "BlinkRight", + ["A"] = "Aa", + ["I"] = "Ih", + ["U"] = "Ou", + ["E"] = "Ee", + ["O"] = "Oh", + }; + + private static readonly Dictionary _newKeyToOldKey; + + static DefaultBlendShapeNameStore() + { + _newKeyToOldKey = _oldKeyToNewKey.ToDictionary(p => p.Value, p => p.Key); + } + + + public static string[] LoadDefaultNames() + { + return new string[] + { + //「なし」があるのが大事。これによって、条件に合致しても何のブレンドシェイプを起動しない!という事ができる。 + "", + "Joy", + "Angry", + "Sorrow", + "Fun", + "Surprised", + + "A", + "I", + "U", + "E", + "O", + + "Neutral", + "Blink", + "Blink_L", + "Blink_R", + + "LookUp", + "LookDown", + "LookLeft", + "LookRight", + }; + } + + public static string GetVrm10KeyName(string key) + { + return _oldKeyToNewKey.TryGetValue(key, out var newName) ? newName : key; + } + + public static string GetVrm0KeyName(string key) + { + return _newKeyToOldKey.TryGetValue(key, out var oldName) ? oldName : key; + } + + public static bool ShouldRemoveFromExtraBlendShapeKeyName(string? key) + => key == "Surprised"; + } +} diff --git a/WPF/VMagicMirrorConfig/Model/ExternalTracker/ExternalTrackerRuntimeConfig.cs b/WPF/VMagicMirrorConfig/Model/ExternalTracker/ExternalTrackerRuntimeConfig.cs index 64a0723f..a562a212 100644 --- a/WPF/VMagicMirrorConfig/Model/ExternalTracker/ExternalTrackerRuntimeConfig.cs +++ b/WPF/VMagicMirrorConfig/Model/ExternalTracker/ExternalTrackerRuntimeConfig.cs @@ -89,7 +89,7 @@ public class ExternalTrackerBlendShapeNameStore public ExternalTrackerBlendShapeNameStore() { BlendShapeNames = new ReadOnlyObservableCollection(_blendShapeNames); - var defaultNames = LoadDefaultNames(); + var defaultNames = DefaultBlendShapeNameStore.LoadDefaultNames(); for (int i = 0; i < defaultNames.Length; i++) { _blendShapeNames.Add(defaultNames[i]); @@ -134,7 +134,7 @@ public void Refresh(ExternalTrackerFaceSwitchSetting currentSetting) private void RefreshInternal() { //理想の並び: デフォルトのやつ一覧、今ロードしたVRMにある名前一覧、(今ロードしたVRMにはないけど)設定で使ってる名前一覧 - var newNames = LoadDefaultNames().ToList(); + var newNames = DefaultBlendShapeNameStore.LoadDefaultNames().ToList(); int defaultSetLength = newNames.Count; foreach (var nameInModel in _avatarClipNames) { @@ -179,35 +179,5 @@ private void RefreshInternal() _blendShapeNames.RemoveAt(newNameArray.Length); } } - - private string[] LoadDefaultNames() - { - return new string[] - { - //「なし」があるのが大事。これによって、条件に合致しても何のブレンドシェイプを起動しない!という事ができる。 - "", - "Joy", - "Angry", - "Sorrow", - "Fun", - - "A", - "I", - "U", - "E", - "O", - - "Neutral", - "Blink", - "Blink_L", - "Blink_R", - - "LookUp", - "LookDown", - "LookLeft", - "LookRight", - }; - } } - } diff --git a/WPF/VMagicMirrorConfig/Model/InterProcess/Util/WordToMotionItemPreviewDataSender.cs b/WPF/VMagicMirrorConfig/Model/InterProcess/Util/WordToMotionItemPreviewDataSender.cs index 3e94c586..4246d63b 100644 --- a/WPF/VMagicMirrorConfig/Model/InterProcess/Util/WordToMotionItemPreviewDataSender.cs +++ b/WPF/VMagicMirrorConfig/Model/InterProcess/Util/WordToMotionItemPreviewDataSender.cs @@ -45,7 +45,7 @@ public void End() private void SendData(MotionRequest request) { - string content = request.ToJson(); + string content = request.ToVrm10Json(); _sender.SendMessage( MessageFactory.Instance.SendWordToMotionPreviewInfo(content) ); diff --git a/WPF/VMagicMirrorConfig/Model/MemoryMappedFileConnect/MemoryMappedFileConnect.cs b/WPF/VMagicMirrorConfig/Model/MemoryMappedFileConnect/MemoryMappedFileConnect.cs index d77dae8c..b47c9b32 100644 --- a/WPF/VMagicMirrorConfig/Model/MemoryMappedFileConnect/MemoryMappedFileConnect.cs +++ b/WPF/VMagicMirrorConfig/Model/MemoryMappedFileConnect/MemoryMappedFileConnect.cs @@ -58,8 +58,8 @@ public class MemoryMappedFileConnectServer : MemoryMappedNamedConnectBase /// public abstract class MemoryMappedNamedConnectBase { - private const long MemoryMappedFileCapacity = 131072; - private readonly byte[] _readBuffer = new byte[131072]; + private const long MemoryMappedFileCapacity = 262144; + private readonly byte[] _readBuffer = new byte[MemoryMappedFileCapacity]; //送りたいメッセージ(クエリとコマンド両方)の一覧 private readonly ConcurrentQueue _writeMessageQueue = new ConcurrentQueue(); diff --git a/WPF/VMagicMirrorConfig/Model/MessageData/MotionRequest.cs b/WPF/VMagicMirrorConfig/Model/MessageData/MotionRequest.cs index b5462cca..158db83e 100644 --- a/WPF/VMagicMirrorConfig/Model/MessageData/MotionRequest.cs +++ b/WPF/VMagicMirrorConfig/Model/MessageData/MotionRequest.cs @@ -2,12 +2,18 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; namespace Baku.VMagicMirrorConfig { //NOTE: Unity側のMotionRequestとプロパティ名を統一してます。片方だけいじらないように! + //VRM 0.x版の時代の設定ファイルと互換性を保つため、次のような挙動を取る + // - 通常のデータ引き回しの時点では、BlendShapeValuesはSurprisedクリップを含む + // - 設定ファイルからの値のI/Oをするとき、Surprisedの値はカスタムクリップ扱いで保存、ロードする + // - Unityにデータを送る段階で、VRM 0.x用のクリップ名で保持している値は読み替える + /// ビルトインモーションまたはカスタムモーション、および表情制御のリクエスト情報を表す。 public class MotionRequest { @@ -52,19 +58,79 @@ public class MotionRequest /// public List ExtraBlendShapeValues { get; set; } = new List(); - /// この要素をJSONにシリアライズしたものを取得します。 - /// - public string ToJson() + public MotionRequest ToVrm10Request() + { + //基本は値コピーだが、ブレンドシェイプ名をVRM 1.0のものに読み替えているのがポイント + return new MotionRequest() + { + MotionType = MotionType, + Word = Word, + BuiltInAnimationClipName = BuiltInAnimationClipName, + CustomMotionClipName = CustomMotionClipName, + AccessoryName = AccessoryName, + DurationWhenOnlyBlendShape = DurationWhenOnlyBlendShape, + UseBlendShape = UseBlendShape, + HoldBlendShape = HoldBlendShape, + PreferLipSync = PreferLipSync, + BlendShapeValues = BlendShapeValues.ToDictionary( + p => DefaultBlendShapeNameStore.GetVrm10KeyName(p.Key), + p => p.Value + ), + ExtraBlendShapeValues = ExtraBlendShapeValues.ToList(), + }; + } + + public MotionRequest ToSaveRequest() + { + //基本は値コピーだが、Surprisedがカスタムクリップ側の冒頭に保存されるようにしている + return new MotionRequest() + { + MotionType = MotionType, + Word = Word, + BuiltInAnimationClipName = BuiltInAnimationClipName, + CustomMotionClipName = CustomMotionClipName, + AccessoryName = AccessoryName, + DurationWhenOnlyBlendShape = DurationWhenOnlyBlendShape, + UseBlendShape = UseBlendShape, + HoldBlendShape = HoldBlendShape, + PreferLipSync = PreferLipSync, + BlendShapeValues = BlendShapeValues.Where(p => p.Key != "Surprised") + .ToDictionary(p => p.Key, p => p.Value), + ExtraBlendShapeValues = ExtraBlendShapeValues + .Where(p=> p.Name != "Surprised") + .Prepend(new BlendShapePairItem() + { + Name = "Surprised", + Value = BlendShapeValues.TryGetValue("Surprised", out var value) ? value : 0 + }) + .ToList(), + }; + } + + public string ToVrm10Json() { + var vrm10Data = ToVrm10Request(); + var serializer = new JsonSerializer(); var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { - serializer.Serialize(writer, this); + serializer.Serialize(writer, vrm10Data); } return sb.ToString(); } + //JSONから読み出したデータのカスタムクリップ領域にSurprisedクリップの値がある場合、それをビルトイン扱いして初期化する + public void InitializeSurprisedBlendShapeValue() + { + BlendShapeValues["Surprised"] = 0; + if (ExtraBlendShapeValues.FirstOrDefault(p => p.Name == "Surprised") is { } target) + { + ExtraBlendShapeValues.Remove(target); + BlendShapeValues["Surprised"] = target.Value; + } + } + /// デフォルトの簡単な設定からなる動作リクエストを生成します。 /// public static MotionRequest GetDefault() @@ -192,13 +258,32 @@ public MotionRequestCollection(MotionRequest[] requests) public MotionRequest[] Requests { get; } - public string ToJson() + public string ToJsonForSave() + { + var collection = new MotionRequestCollection( + Requests.Select(r => r.ToSaveRequest()).ToArray() + ); + + var serializer = new JsonSerializer(); + var sb = new StringBuilder(); + using (var writer = new StringWriter(sb)) + { + serializer.Serialize(writer, collection); + } + return sb.ToString(); + } + + public string ToJsonForVrm10() { + var collection = new MotionRequestCollection( + Requests.Select(r => r.ToVrm10Request()).ToArray() + ); + var serializer = new JsonSerializer(); var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { - serializer.Serialize(writer, this); + serializer.Serialize(writer, collection); } return sb.ToString(); } @@ -211,9 +296,15 @@ public static MotionRequestCollection FromJson(TextReader reader) var serializer = new JsonSerializer(); using (var jsonReader = new JsonTextReader(reader)) { - return - serializer.Deserialize(jsonReader) ?? + var result = serializer.Deserialize(jsonReader) ?? throw new InvalidOperationException(); + + foreach(var item in result.Requests) + { + item.InitializeSurprisedBlendShapeValue(); + } + + return result; } } } diff --git a/WPF/VMagicMirrorConfig/Model/SettingModel/WordToMotionSettingModel.cs b/WPF/VMagicMirrorConfig/Model/SettingModel/WordToMotionSettingModel.cs index dfa7dbd4..be604d6b 100644 --- a/WPF/VMagicMirrorConfig/Model/SettingModel/WordToMotionSettingModel.cs +++ b/WPF/VMagicMirrorConfig/Model/SettingModel/WordToMotionSettingModel.cs @@ -25,7 +25,8 @@ public WordToMotionSettingModel(IMessageSender sender, IMessageReceiver receiver PreviewDataSender = new WordToMotionItemPreviewDataSender(sender); SelectedDeviceType = new RProperty(settings.SelectedDeviceType, i => SendMessage(factory.SetDeviceTypeToStartWordToMotion(i))); - ItemsContentString = new RProperty(settings.ItemsContentString, s => SendMessage(factory.ReloadMotionRequests(s))); + ItemsContentString = new RProperty(settings.ItemsContentString); + ItemsContentStringToSync = new RProperty("", s => SendMessage(factory.ReloadMotionRequests(s))); MidiNoteMapString = new RProperty(settings.MidiNoteMapString, s => SendMessage(factory.LoadMidiNoteToMotionMap(s))); EnablePreview = new RProperty(false, b => { @@ -66,8 +67,12 @@ public override void ResetToDefault() public RProperty EnablePreview { get; } + //設定ファイルに保存するデータ一式 public RProperty ItemsContentString { get; } + //Unityに対して送りつけるデータ一式 + public RProperty ItemsContentStringToSync { get; } + public RProperty MidiNoteMapString { get; } private MotionRequestCollection _motionRequests; @@ -108,7 +113,12 @@ public void RequestSerializeItems() SaveMidiNoteMap(); } - public void SaveMotionRequests() => ItemsContentString.Value = MotionRequests.ToJson(); + public void SaveMotionRequests() + { + ItemsContentString.Value = MotionRequests.ToJsonForSave(); + ItemsContentStringToSync.Value = MotionRequests.ToJsonForVrm10(); + } + public void SaveMidiNoteMap() => MidiNoteMapString.Value = MidiNoteToMotionMap.ToJson(); public void RefreshMidiNoteMap(MidiNoteToMotionMap result) @@ -122,7 +132,7 @@ public void RefreshMidiNoteMap(MidiNoteToMotionMap result) /// /// public void Play(MotionRequest item) - => SendMessage(MessageFactory.Instance.PlayWordToMotionItem(item.ToJson())); + => SendMessage(MessageFactory.Instance.PlayWordToMotionItem(item.ToVrm10Json())); public void Play(int index) @@ -250,6 +260,8 @@ private void LoadMotionRequests() MotionRequests = MotionRequestCollection.LoadDefault(); } + //ファイルから設定をロードした直後などはSyncプロパティ側に値が入ってないので、それを詰め込む。 + ItemsContentStringToSync.Value = MotionRequests.ToJsonForVrm10(); } private void LoadMidiNoteToMotionMap() diff --git a/WPF/VMagicMirrorConfig/Resources/English.xaml b/WPF/VMagicMirrorConfig/Resources/English.xaml index 8ff6b6eb..fcc88b5e 100644 --- a/WPF/VMagicMirrorConfig/Resources/English.xaml +++ b/WPF/VMagicMirrorConfig/Resources/English.xaml @@ -244,7 +244,7 @@ Disable foreground mode, or attach item to another one. Track Face Camera Calibrate position - Default Fun Blend Value [%] + Default Relaxed Blend Value [%] Enable forward / backward motion Auto blink during face tracking Disable horizontal flip diff --git a/WPF/VMagicMirrorConfig/Resources/Japanese.xaml b/WPF/VMagicMirrorConfig/Resources/Japanese.xaml index 8cc2141a..4caed3a4 100644 --- a/WPF/VMagicMirrorConfig/Resources/Japanese.xaml +++ b/WPF/VMagicMirrorConfig/Resources/Japanese.xaml @@ -282,7 +282,7 @@ png画像やglb/gltfモデルが利用可能です。 ブレンドシェイプ - Funブレンドのデフォルト値[%] + Relaxedブレンドのデフォルト値[%] Neutralブレンドシェイプ ※Neutralブレンドシェイプは普段の表情として使用されます。  デフォルト表情をNeutralなどでカスタムしている場合に使用します。 diff --git a/WPF/VMagicMirrorConfig/VMagicMirrorConfig.csproj b/WPF/VMagicMirrorConfig/VMagicMirrorConfig.csproj index 75c49738..6d6b0703 100644 --- a/WPF/VMagicMirrorConfig/VMagicMirrorConfig.csproj +++ b/WPF/VMagicMirrorConfig/VMagicMirrorConfig.csproj @@ -1,7 +1,7 @@  WinExe - net6.0-windows + net7.0-windows true Baku.VMagicMirrorConfig win10-x86 diff --git a/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm0ToVrm1ClipNameConverter.cs b/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm0ToVrm1ClipNameConverter.cs new file mode 100644 index 00000000..e6efc2fd --- /dev/null +++ b/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm0ToVrm1ClipNameConverter.cs @@ -0,0 +1,31 @@ +using System; +using System.Globalization; +using System.Windows.Data; + +namespace Baku.VMagicMirrorConfig.View +{ + public class Vrm0ToVrm1ClipNameConverter : IValueConverter + { + //VRM0.xのクリップ名 -> VRM1.0のクリップ名 + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is not string s) + { + return Binding.DoNothing; + } + + return DefaultBlendShapeNameStore.GetVrm10KeyName(s); + } + + //VRM1.0のクリップ名 -> VRM0.xのクリップ名 + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is not string s) + { + return Binding.DoNothing; + } + + return DefaultBlendShapeNameStore.GetVrm0KeyName(s); + } + } +} diff --git a/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm1BlendShapeNameConverterBase.cs b/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm1BlendShapeNameConverterBase.cs new file mode 100644 index 00000000..e15057a0 --- /dev/null +++ b/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm1BlendShapeNameConverterBase.cs @@ -0,0 +1,27 @@ +using System; +using System.Globalization; +using System.Windows.Data; + +namespace Baku.VMagicMirrorConfig.View +{ + public abstract class Vrm1BlendShapeNameConverterBase : IMultiValueConverter + { + public abstract string FallbackStringKey { get; } + + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + if (values.Length != 2 || !(values[0] is string mainValue) || !(values[1] is string)) + { + return Binding.DoNothing; + } + + //NOTE: values[1]には言語名が入ってる想定だが、Localized.GetStringで間接的に使うので直接参照しないでよい + return string.IsNullOrEmpty(mainValue) + ? LocalizedString.GetString(FallbackStringKey) : + DefaultBlendShapeNameStore.GetVrm10KeyName(mainValue); + } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + => new object[] { Binding.DoNothing }; + } +} diff --git a/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm1BlendShapeNameOrDoNothingConverter.cs b/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm1BlendShapeNameOrDoNothingConverter.cs new file mode 100644 index 00000000..419515a7 --- /dev/null +++ b/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm1BlendShapeNameOrDoNothingConverter.cs @@ -0,0 +1,7 @@ +namespace Baku.VMagicMirrorConfig.View +{ + public class Vrm1BlendShapeNameOrDoNothingConverter : Vrm1BlendShapeNameConverterBase + { + public override string FallbackStringKey { get; } = "CommonUi_DoNothing"; + } +} diff --git a/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm1BlendShapeNameOrNoneConverter.cs b/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm1BlendShapeNameOrNoneConverter.cs new file mode 100644 index 00000000..168adf1a --- /dev/null +++ b/WPF/VMagicMirrorConfig/View/Code/Converter/Vrm1BlendShapeNameOrNoneConverter.cs @@ -0,0 +1,7 @@ +namespace Baku.VMagicMirrorConfig.View +{ + public class Vrm1BlendShapeNameOrNoneConverter : Vrm1BlendShapeNameConverterBase + { + public override string FallbackStringKey { get; } = "CommonUi_None"; + } +} diff --git a/WPF/VMagicMirrorConfig/View/ExternalTrackerParts/ExternalTrackerFaceSwitchITemplateItem.xaml b/WPF/VMagicMirrorConfig/View/ExternalTrackerParts/ExternalTrackerFaceSwitchITemplateItem.xaml index c0e8666c..b11c0a66 100644 --- a/WPF/VMagicMirrorConfig/View/ExternalTrackerParts/ExternalTrackerFaceSwitchITemplateItem.xaml +++ b/WPF/VMagicMirrorConfig/View/ExternalTrackerParts/ExternalTrackerFaceSwitchITemplateItem.xaml @@ -11,7 +11,7 @@ d:DataContext="{d:DesignInstance Type={x:Type vm:ExternalTrackerFaceSwitchItemViewModel}}" d:DesignWidth="450"> - + @@ -50,14 +50,12 @@ - + - - diff --git a/WPF/VMagicMirrorConfig/View/SettingWindowTabs/FaceSettingPanel.xaml b/WPF/VMagicMirrorConfig/View/SettingWindowTabs/FaceSettingPanel.xaml index a69be488..2b8593dd 100644 --- a/WPF/VMagicMirrorConfig/View/SettingWindowTabs/FaceSettingPanel.xaml +++ b/WPF/VMagicMirrorConfig/View/SettingWindowTabs/FaceSettingPanel.xaml @@ -18,7 +18,7 @@ - + - + @@ -525,7 +525,7 @@ - + diff --git a/WPF/VMagicMirrorConfig/View/Windows/WordToMotionItemEditWindow.xaml b/WPF/VMagicMirrorConfig/View/Windows/WordToMotionItemEditWindow.xaml index 1b40e941..0bb5f0a4 100644 --- a/WPF/VMagicMirrorConfig/View/Windows/WordToMotionItemEditWindow.xaml +++ b/WPF/VMagicMirrorConfig/View/Windows/WordToMotionItemEditWindow.xaml @@ -20,6 +20,9 @@ NonActiveWindowTitleBrush="{StaticResource PrimaryHueMidBrush}" Background="{StaticResource MaterialDesignBackground}" > + + + @@ -286,9 +289,11 @@ + VerticalAlignment="Center" + TextAlignment="Left" + Text="{Binding BlendShapeName, + Converter={StaticResource Vrm0ToVrm1ClipNameConverter}}" + /> (_model.LipSyncMicrophoneDeviceName.Value, v => - { - if (!string.IsNullOrEmpty(v)) - { - _model.LipSyncMicrophoneDeviceName.Value = v; - } - }); - CameraDeviceName = new RProperty(_model.CameraDeviceName.Value, v => - { - if (!string.IsNullOrEmpty(v)) - { - _model.CameraDeviceName.Value = v; - } - }); - ResetFaceBasicSettingCommand = new ActionCommand( () => SettingResetUtils.ResetSingleCategoryAsync(ResetFaceBasicSetting) ); @@ -58,9 +43,26 @@ FaceMotionBlendShapeNameStore blendShapeNameStore if (IsInDesignMode) { + LipSyncMicrophoneDeviceName = new RProperty(""); + CameraDeviceName = new RProperty(""); return; } + LipSyncMicrophoneDeviceName = new RProperty(_model.LipSyncMicrophoneDeviceName.Value, v => + { + if (!string.IsNullOrEmpty(v)) + { + _model.LipSyncMicrophoneDeviceName.Value = v; + } + }); + CameraDeviceName = new RProperty(_model.CameraDeviceName.Value, v => + { + if (!string.IsNullOrEmpty(v)) + { + _model.CameraDeviceName.Value = v; + } + }); + ShowInstallPathWarning = installPathChecker.HasMultiByteCharInInstallPath; _model.EyeBoneRotationScale.AddWeakEventHandler(OnEyeBoneRotationScaleChanged); _model.FaceNeutralClip.AddWeakEventHandler(OnFaceClipChanged); diff --git a/WPF/VMagicMirrorConfig/ViewModel/WordToMotion/WordToMotionItemViewModel.cs b/WPF/VMagicMirrorConfig/ViewModel/WordToMotion/WordToMotionItemViewModel.cs index 7396d1dd..4500ba30 100644 --- a/WPF/VMagicMirrorConfig/ViewModel/WordToMotion/WordToMotionItemViewModel.cs +++ b/WPF/VMagicMirrorConfig/ViewModel/WordToMotion/WordToMotionItemViewModel.cs @@ -36,7 +36,9 @@ public void CheckBlendShapeClipNames() { foreach (var name in _parent .ExtraBlendShapeClipNames - .Where(n => !_extraBlendShapeItems.Any(i => i.BlendShapeName == n)) + .Where( + n => !_extraBlendShapeItems.Any(i => i.BlendShapeName == n) && + n != "Surprised") ) { _extraBlendShapeItems.Add(new BlendShapeItemViewModel( @@ -372,12 +374,15 @@ private void InitializeBuiltInClipNames() _availableBuiltInClipNames.Add("Clap"); } + //NOTE: ここの名前セットはDefaultBlendShapeNameStoreのものと共通で、 + // 「VRM 0.x用のブレンドシェイプ名 + Surprised」で構成されている private void InitializeBlendShapeItems(WordToMotionSettingViewModel parent) { _blendShapeItems.Add(new BlendShapeItemViewModel(this, "Joy", 0)); _blendShapeItems.Add(new BlendShapeItemViewModel(this, "Angry", 0)); _blendShapeItems.Add(new BlendShapeItemViewModel(this, "Sorrow", 0)); _blendShapeItems.Add(new BlendShapeItemViewModel(this, "Fun", 0)); + _blendShapeItems.Add(new BlendShapeItemViewModel(this, "Surprised", 0)); _blendShapeItems.Add(new BlendShapeItemViewModel(this, "A", 0)); _blendShapeItems.Add(new BlendShapeItemViewModel(this, "I", 0)); @@ -395,7 +400,9 @@ private void InitializeBlendShapeItems(WordToMotionSettingViewModel parent) _blendShapeItems.Add(new BlendShapeItemViewModel(this, "LookLeft", 0)); _blendShapeItems.Add(new BlendShapeItemViewModel(this, "LookRight", 0)); - foreach (var name in parent.ExtraBlendShapeClipNames) + foreach (var name in parent.ExtraBlendShapeClipNames + .Where(v => v != "Surprised") + ) { _extraBlendShapeItems.Add(new BlendShapeItemViewModel( this, diff --git a/WPF/VMagicMirrorTest/VMagicMirrorTest.csproj b/WPF/VMagicMirrorTest/VMagicMirrorTest.csproj index 81aa4f64..76d60a8a 100644 --- a/WPF/VMagicMirrorTest/VMagicMirrorTest.csproj +++ b/WPF/VMagicMirrorTest/VMagicMirrorTest.csproj @@ -1,7 +1,7 @@ - net6.0-windows + net7.0-windows false