From 62c078aad5c7fc54f255d09dbe6fd2e45dc0b87d Mon Sep 17 00:00:00 2001 From: amamagi Date: Fri, 28 Mar 2025 18:05:42 +0900 Subject: [PATCH] add scroll view to showcase scene --- .../MToon10Showcase/MToon10Showcase.unity | 557 +++++++++++++++++- .../VRM10_Samples/MToon10Showcase/Prefab.meta | 8 + .../MToon10Showcase/Prefab/LabelText.prefab | 99 ++++ .../Prefab/LabelText.prefab.meta | 7 + .../MToon10Showcase/Runtime/CameraScroller.cs | 41 ++ .../Runtime/CameraScroller.cs.meta | 3 + .../Runtime/GraphicScrollHandler.cs | 16 + .../Runtime/GraphicScrollHandler.cs.meta | 3 + .../Runtime/MToon10ShowcaseDependencies.cs | 1 + .../Runtime/MToon10ShowcaseEntryPoint.cs | 36 +- .../MToon10Showcase Dependencies.asset | 2 + 11 files changed, 755 insertions(+), 18 deletions(-) create mode 100644 Assets/VRM10_Samples/MToon10Showcase/Prefab.meta create mode 100644 Assets/VRM10_Samples/MToon10Showcase/Prefab/LabelText.prefab create mode 100644 Assets/VRM10_Samples/MToon10Showcase/Prefab/LabelText.prefab.meta create mode 100644 Assets/VRM10_Samples/MToon10Showcase/Runtime/CameraScroller.cs create mode 100644 Assets/VRM10_Samples/MToon10Showcase/Runtime/CameraScroller.cs.meta create mode 100644 Assets/VRM10_Samples/MToon10Showcase/Runtime/GraphicScrollHandler.cs create mode 100644 Assets/VRM10_Samples/MToon10Showcase/Runtime/GraphicScrollHandler.cs.meta diff --git a/Assets/VRM10_Samples/MToon10Showcase/MToon10Showcase.unity b/Assets/VRM10_Samples/MToon10Showcase/MToon10Showcase.unity index bf62768cc..45f58df49 100644 --- a/Assets/VRM10_Samples/MToon10Showcase/MToon10Showcase.unity +++ b/Assets/VRM10_Samples/MToon10Showcase/MToon10Showcase.unity @@ -122,6 +122,67 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &118508681 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 118508682} + - component: {fileID: 118508684} + - component: {fileID: 118508683} + m_Layer: 5 + m_Name: ScrollHandler + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &118508682 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118508681} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1948350611} + 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!114 &118508683 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118508681} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b46491cc876845a4a7d3db9a355d5adc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &118508684 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118508681} + m_CullTransparentMesh: 1 --- !u!1 &203844586 GameObject: m_ObjectHideFlags: 0 @@ -240,6 +301,132 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 54.92, y: -148.071, z: -96.661} +--- !u!1 &277784020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 277784021} + - component: {fileID: 277784024} + - component: {fileID: 277784023} + - component: {fileID: 277784022} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &277784021 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 277784020} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 669277837} + m_Father: {fileID: 1948350611} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -11, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &277784022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 277784020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 345450653} + m_HandleRect: {fileID: 345450652} + m_Direction: 3 + m_Value: 0 + m_Size: 0.2 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &277784023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 277784020} + 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: 10907, 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!222 &277784024 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 277784020} + m_CullTransparentMesh: 1 --- !u!1 &345281093 GameObject: m_ObjectHideFlags: 0 @@ -276,7 +463,7 @@ MeshCollider: m_LayerOverridePriority: 0 m_IsTrigger: 0 m_ProvidesContacts: 0 - m_Enabled: 1 + m_Enabled: 0 serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 @@ -339,13 +526,124 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 345281093} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1.6, y: 1.6, z: 1.6} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!1 &345450651 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 345450652} + - component: {fileID: 345450654} + - component: {fileID: 345450653} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &345450652 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345450651} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 669277837} 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: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &345450653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345450651} + 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!222 &345450654 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345450651} + m_CullTransparentMesh: 1 +--- !u!1 &669277836 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 669277837} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &669277837 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669277836} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 345450652} + m_Father: {fileID: 277784021} + 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: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &738203505 GameObject: m_ObjectHideFlags: 0 @@ -378,6 +676,7 @@ MonoBehaviour: dependencies: {fileID: 11400000, guid: 21a44348ad7e90744a8e320392d6a0b6, type: 2} litShowcase: {fileID: 11400000, guid: eda310b3d75b2634ca76dccda495985e, type: 2} shadeShowcase: {fileID: 11400000, guid: 7f12d1836965ca247be4bbb314f94b23, type: 2} + cameraScroller: {fileID: 1644774163} --- !u!4 &738203507 Transform: m_ObjectHideFlags: 0 @@ -393,6 +692,74 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &867928052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 867928055} + - component: {fileID: 867928054} + - component: {fileID: 867928053} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &867928053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867928052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &867928054 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867928052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &867928055 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867928052} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &961739749 GameObject: m_ObjectHideFlags: 0 @@ -403,8 +770,8 @@ GameObject: m_Component: - component: {fileID: 961739753} - component: {fileID: 961739752} - - component: {fileID: 961739751} - component: {fileID: 961739750} + - component: {fileID: 961739754} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -456,14 +823,6 @@ MonoBehaviour: m_MipBias: 0 m_VarianceClampScale: 0.9 m_ContrastAdaptiveSharpening: 0 ---- !u!81 &961739751 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 961739749} - m_Enabled: 1 --- !u!20 &961739752 Camera: m_ObjectHideFlags: 0 @@ -498,8 +857,8 @@ Camera: near clip plane: 0.3 far clip plane: 1000 field of view: 60 - orthographic: 0 - orthographic size: 5 + orthographic: 1 + orthographic size: 4.5 m_Depth: -1 m_CullingMask: serializedVersion: 2 @@ -523,13 +882,178 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 961739749} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!114 &961739754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961739749} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c49b4cc203aa6414fae5c798d1d0e7d6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EventMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_MaxRayIntersections: 0 +--- !u!1 &1644774162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1644774167} + - component: {fileID: 1644774163} + m_Layer: 0 + m_Name: CameraScroller + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1644774163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1644774162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 48ff531ad559459a8b8e17e571ee0a3d, type: 3} + m_Name: + m_EditorClassIdentifier: + _scrollHandler: {fileID: 118508683} + _scrollbar: {fileID: 277784022} +--- !u!4 &1644774167 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1644774162} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 20, y: 20, z: 20} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &1948350607 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1948350611} + - component: {fileID: 1948350610} + - component: {fileID: 1948350609} + - component: {fileID: 1948350608} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1948350608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948350607} + 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 &1948350609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948350607} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1948350610 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948350607} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1948350611 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948350607} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 118508682} + - {fileID: 277784021} + m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -538,3 +1062,6 @@ SceneRoots: - {fileID: 203844589} - {fileID: 345281097} - {fileID: 738203507} + - {fileID: 867928055} + - {fileID: 1948350611} + - {fileID: 1644774167} diff --git a/Assets/VRM10_Samples/MToon10Showcase/Prefab.meta b/Assets/VRM10_Samples/MToon10Showcase/Prefab.meta new file mode 100644 index 000000000..a18369f60 --- /dev/null +++ b/Assets/VRM10_Samples/MToon10Showcase/Prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d23641d3403541a4597fe064b1acbcef +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VRM10_Samples/MToon10Showcase/Prefab/LabelText.prefab b/Assets/VRM10_Samples/MToon10Showcase/Prefab/LabelText.prefab new file mode 100644 index 000000000..d6e363e84 --- /dev/null +++ b/Assets/VRM10_Samples/MToon10Showcase/Prefab/LabelText.prefab @@ -0,0 +1,99 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5685776853168224818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1773424965246636714} + - component: {fileID: 5781709203989420732} + - component: {fileID: 1857337871431223268} + m_Layer: 0 + m_Name: LabelText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1773424965246636714 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5685776853168224818} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!23 &5781709203989420732 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5685776853168224818} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + 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!102 &1857337871431223268 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5685776853168224818} + m_Text: Hello World + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 0 + m_Alignment: 0 + m_TabSize: 4 + m_FontSize: 30 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 diff --git a/Assets/VRM10_Samples/MToon10Showcase/Prefab/LabelText.prefab.meta b/Assets/VRM10_Samples/MToon10Showcase/Prefab/LabelText.prefab.meta new file mode 100644 index 000000000..bc46253dc --- /dev/null +++ b/Assets/VRM10_Samples/MToon10Showcase/Prefab/LabelText.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 682e9acde1b2bd6408deebec0fa47919 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VRM10_Samples/MToon10Showcase/Runtime/CameraScroller.cs b/Assets/VRM10_Samples/MToon10Showcase/Runtime/CameraScroller.cs new file mode 100644 index 000000000..7c019cb80 --- /dev/null +++ b/Assets/VRM10_Samples/MToon10Showcase/Runtime/CameraScroller.cs @@ -0,0 +1,41 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace VRM10.Samples.MToon10Showcase +{ + public sealed class CameraScroller : MonoBehaviour + { + [SerializeField] private GraphicScrollHandler _scrollHandler; + [SerializeField] private Scrollbar _scrollbar; + private bool _initialized; + private Vector3 _startPosition; + private Vector3 _endPosition; + private float _scrollWeightDelta; + private float _currentWeight; + private Transform _cameraTransform; + + public void Initialize(Vector3 startPosition, Vector3 endPosition, float scrollDistance) + { + _startPosition = startPosition; + _endPosition = endPosition; + _scrollWeightDelta = scrollDistance / Vector3.Distance(startPosition, endPosition); + _currentWeight = 0.0f; + _cameraTransform = Camera.main.transform; + _cameraTransform.position = _startPosition; + _scrollbar.enabled = true; + _scrollbar.onValueChanged.AddListener(Scroll); + _scrollHandler.OnScrollAction = (eventData) => + { + var sign = Mathf.Sign(eventData.scrollDelta.y); + Scroll(_currentWeight - _scrollWeightDelta * sign); + }; + } + + private void Scroll(float weight) + { + _currentWeight = Mathf.Clamp01(weight); + _scrollbar.value = _currentWeight; + _cameraTransform.position = Vector3.Lerp(_startPosition, _endPosition, _currentWeight); + } + } +} \ No newline at end of file diff --git a/Assets/VRM10_Samples/MToon10Showcase/Runtime/CameraScroller.cs.meta b/Assets/VRM10_Samples/MToon10Showcase/Runtime/CameraScroller.cs.meta new file mode 100644 index 000000000..f7bdee703 --- /dev/null +++ b/Assets/VRM10_Samples/MToon10Showcase/Runtime/CameraScroller.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 48ff531ad559459a8b8e17e571ee0a3d +timeCreated: 1743124491 \ No newline at end of file diff --git a/Assets/VRM10_Samples/MToon10Showcase/Runtime/GraphicScrollHandler.cs b/Assets/VRM10_Samples/MToon10Showcase/Runtime/GraphicScrollHandler.cs new file mode 100644 index 000000000..e92e3e160 --- /dev/null +++ b/Assets/VRM10_Samples/MToon10Showcase/Runtime/GraphicScrollHandler.cs @@ -0,0 +1,16 @@ +using System; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace VRM10.Samples.MToon10Showcase +{ + public sealed class GraphicScrollHandler : Graphic , IScrollHandler + { + public Action OnScrollAction { get; set; } + + public void OnScroll(PointerEventData eventData) + { + OnScrollAction?.Invoke(eventData); + } + } +} \ No newline at end of file diff --git a/Assets/VRM10_Samples/MToon10Showcase/Runtime/GraphicScrollHandler.cs.meta b/Assets/VRM10_Samples/MToon10Showcase/Runtime/GraphicScrollHandler.cs.meta new file mode 100644 index 000000000..48732ab14 --- /dev/null +++ b/Assets/VRM10_Samples/MToon10Showcase/Runtime/GraphicScrollHandler.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b46491cc876845a4a7d3db9a355d5adc +timeCreated: 1743145606 \ No newline at end of file diff --git a/Assets/VRM10_Samples/MToon10Showcase/Runtime/MToon10ShowcaseDependencies.cs b/Assets/VRM10_Samples/MToon10Showcase/Runtime/MToon10ShowcaseDependencies.cs index 7a58ddfcb..cbd49b117 100644 --- a/Assets/VRM10_Samples/MToon10Showcase/Runtime/MToon10ShowcaseDependencies.cs +++ b/Assets/VRM10_Samples/MToon10Showcase/Runtime/MToon10ShowcaseDependencies.cs @@ -12,5 +12,6 @@ namespace VRM10.Samples.MToon10Showcase public Texture2D shadeCheckerTexture; public Shader mtoon10Shader; + public GameObject labelTextPrefab; } } \ No newline at end of file diff --git a/Assets/VRM10_Samples/MToon10Showcase/Runtime/MToon10ShowcaseEntryPoint.cs b/Assets/VRM10_Samples/MToon10Showcase/Runtime/MToon10ShowcaseEntryPoint.cs index 5b0bf473c..07ecf1c6b 100644 --- a/Assets/VRM10_Samples/MToon10Showcase/Runtime/MToon10ShowcaseEntryPoint.cs +++ b/Assets/VRM10_Samples/MToon10Showcase/Runtime/MToon10ShowcaseEntryPoint.cs @@ -12,6 +12,18 @@ namespace VRM10.Samples.MToon10Showcase [SerializeField] private MToon10ShowcaseDependencies dependencies; [SerializeField] private LitShowcase litShowcase; [SerializeField] private ShadeShowcase shadeShowcase; + [SerializeField] private CameraScroller cameraScroller; + + private int _currentShowcaseIndex = 0; + + + private static readonly int Columns = 4; + + private Vector3 _nextOrigin = new(-2.0f, 1.0f, 2.0f); + + private static readonly float SphereRadius = 0.3f; + private static readonly float SphereSpacing = 0.2f; + private static readonly float LabelSpacing = 0.1f; private void Start() { @@ -25,24 +37,42 @@ namespace VRM10.Samples.MToon10Showcase context.ShadeColorFactorSrgb = entry.shadeColor; context.ShadeColorTexture = entry.shadeTexture; }); + + cameraScroller.Initialize(new Vector3(0.0f, 5.0f, 0.0f), new Vector3(0.0f, 5.0f, -5.0f), 0.1f); } - private Transform CreateShowcase(T[] entries, Material baseMaterial, Action setup) where T : class + private Transform CreateShowcase(T[] entries, Material baseMaterial, Action setup) + where T : class { const int columnCount = 4; var root = new GameObject(typeof(T).Name); + root.transform.position = _nextOrigin; + + var label = Instantiate(dependencies.labelTextPrefab, root.transform); + label.GetComponent().text = typeof(T).Name; + const float LabelHeight = 0.4f; + + var gridOrigin = new Vector3(SphereRadius, 0.0f, -(LabelHeight + LabelSpacing + SphereRadius)); + var gridSpacing = SphereRadius * 2 + SphereSpacing; for (var idx = 0; idx < entries.Length; idx++) { var obj = GameObject.CreatePrimitive(PrimitiveType.Sphere); obj.transform.SetParent(root.transform); - obj.transform.localPosition = new Vector3(idx % columnCount, 0.5f, idx / columnCount); - obj.transform.localScale = new Vector3(0.6f, 0.6f, 0.6f); + var x = idx % columnCount * gridSpacing + gridOrigin.x; + var z = -idx / columnCount * gridSpacing + gridOrigin.z; + obj.transform.localPosition = new Vector3(x, 0.0f, z); + var sphereScale = SphereRadius * 2; + obj.transform.localScale = new Vector3(sphereScale, sphereScale, sphereScale); var mat = new Material(baseMaterial); obj.GetComponent().sharedMaterial = mat; setup(entries[idx], new MToon10Context(mat)); } + var rows = entries.Length / columnCount + (entries.Length % columnCount == 0 ? 0 : 1); + var showcaseHeight = LabelHeight + LabelSpacing + gridSpacing * rows; + _nextOrigin -= new Vector3(0.0f, 0.0f, showcaseHeight); + return root.transform; } } diff --git a/Assets/VRM10_Samples/MToon10Showcase/Settings/MToon10Showcase Dependencies.asset b/Assets/VRM10_Samples/MToon10Showcase/Settings/MToon10Showcase Dependencies.asset index 653ce8166..f61d64e7f 100644 --- a/Assets/VRM10_Samples/MToon10Showcase/Settings/MToon10Showcase Dependencies.asset +++ b/Assets/VRM10_Samples/MToon10Showcase/Settings/MToon10Showcase Dependencies.asset @@ -16,3 +16,5 @@ MonoBehaviour: litCheckerTexture: {fileID: 2800000, guid: 1de801c8b8e0d6544b5ebb56ea8bfe60, type: 3} shadeCheckerTexture: {fileID: 2800000, guid: 8d6a11ae5e99a5b47b59746810a26b46, type: 3} mtoon10Shader: {fileID: 4800000, guid: 0781c64b7f2a1604ea6aa7e252080372, type: 3} + labelTextPrefab: {fileID: 5685776853168224818, guid: 682e9acde1b2bd6408deebec0fa47919, + type: 3}