wip : subtitles & flash hallu
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+6698
-30
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5564aaa81c1b4d24eb35804793f8b916
|
||||
guid: abf831794caacbc4fa88f92c5ce17b78
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7b0cf15b9f21dee4d9563b5a93d3cfc3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+233
-13
@@ -1,5 +1,97 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3240856531494141158
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5953892496634016345}
|
||||
- component: {fileID: 6813584513434362232}
|
||||
- component: {fileID: 857898985169210507}
|
||||
- component: {fileID: 4841448913584480605}
|
||||
m_Layer: 0
|
||||
m_Name: HallucinationFlashTwo
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5953892496634016345
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3240856531494141158}
|
||||
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: 8294780350256436151}
|
||||
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 &6813584513434362232
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3240856531494141158}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3aa8c513a3632aa4aa3b8ca2da6ca926, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Unheimlich.Features.Hallucination.HallucinationFlash
|
||||
_image: {fileID: 4841448913584480605}
|
||||
_fadeIn: 0.05
|
||||
_hold: 0.2
|
||||
_fadeOut: 0.1
|
||||
--- !u!222 &857898985169210507
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3240856531494141158}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4841448913584480605
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3240856531494141158}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.43093073, g: 0, b: 0.509434, a: 0}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &4369225580407928194
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -32,7 +124,7 @@ RectTransform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7021944921972612920}
|
||||
- {fileID: 4043674246065667140}
|
||||
- {fileID: 8294780350256436151}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@@ -51,7 +143,7 @@ Canvas:
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 0
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PlaneDistance: 0.2
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
@@ -103,6 +195,136 @@ MonoBehaviour:
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!1 &6789321259219868148
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8294780350256436151}
|
||||
m_Layer: 0
|
||||
m_Name: FlashHallus
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8294780350256436151
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6789321259219868148}
|
||||
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: 4043674246065667140}
|
||||
- {fileID: 5953892496634016345}
|
||||
- {fileID: 3944854789609493124}
|
||||
m_Father: {fileID: 8886833518829962744}
|
||||
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!1 &8160826245413525260
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3944854789609493124}
|
||||
- component: {fileID: 3473725938729132267}
|
||||
- component: {fileID: 8140630728869724205}
|
||||
- component: {fileID: 4647244026437678797}
|
||||
m_Layer: 0
|
||||
m_Name: HallucinationFlashThree
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3944854789609493124
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8160826245413525260}
|
||||
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: 8294780350256436151}
|
||||
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 &3473725938729132267
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8160826245413525260}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3aa8c513a3632aa4aa3b8ca2da6ca926, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Unheimlich.Features.Hallucination.HallucinationFlash
|
||||
_image: {fileID: 4647244026437678797}
|
||||
_fadeIn: 0.05
|
||||
_hold: 0.2
|
||||
_fadeOut: 0.1
|
||||
--- !u!222 &8140630728869724205
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8160826245413525260}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4647244026437678797
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8160826245413525260}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.50980395, g: 0.3606034, b: 0, a: 0}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &8447621161027149062
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -116,7 +338,7 @@ GameObject:
|
||||
- component: {fileID: 8036775480842771334}
|
||||
- component: {fileID: 6197325093082392848}
|
||||
m_Layer: 0
|
||||
m_Name: HallucinationFlash
|
||||
m_Name: HallucinationFlashOne
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@@ -129,12 +351,12 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8447621161027149062}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
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: 8886833518829962744}
|
||||
m_Father: {fileID: 8294780350256436151}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@@ -153,8 +375,10 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 3aa8c513a3632aa4aa3b8ca2da6ca926, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Unheimlich.Features.Hallucination.HallucinationFlash
|
||||
_image: {fileID: 0}
|
||||
_defaultEvent: {fileID: 0}
|
||||
_image: {fileID: 6197325093082392848}
|
||||
_fadeIn: 0.05
|
||||
_hold: 0.2
|
||||
_fadeOut: 0.1
|
||||
--- !u!222 &8036775480842771334
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -176,8 +400,8 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.5283019, g: 0.021597153, b: 0.021597153, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_Color: {r: 0.5283019, g: 0.021597153, b: 0.021597153, a: 0}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
@@ -285,10 +509,6 @@ PrefabInstance:
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4718893142042823352, guid: 8d9eb1538a87d3648abb3fe58d3e4fb4, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3592ea7367272db4cb3e650549fb4a91
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e5e2669b8fe4c0d43a7b522c57d6cb0d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+169
-24
@@ -85,10 +85,10 @@ RectTransform:
|
||||
- {fileID: 7539442832499066999}
|
||||
m_Father: {fileID: 2015949941464314001}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 100, y: 100}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 51}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &7283724369255092777
|
||||
GameObject:
|
||||
@@ -107,7 +107,7 @@ GameObject:
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
m_IsActive: 0
|
||||
--- !u!224 &758297416926061702
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -195,13 +195,89 @@ RectTransform:
|
||||
m_Children:
|
||||
- {fileID: 7319637420139533510}
|
||||
- {fileID: 5038437034765625679}
|
||||
- {fileID: 2897991016890434984}
|
||||
m_Father: {fileID: 4513853938089067031}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: -860, y: 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!1 &7807458575896534655
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2897991016890434984}
|
||||
- component: {fileID: 7326819069936938483}
|
||||
m_Layer: 0
|
||||
m_Name: Subtitles
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2897991016890434984
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7807458575896534655}
|
||||
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: 7539442832499066999}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 100, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &7326819069936938483
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7807458575896534655}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5170627695bd877419928fa9ca37865d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Components.OctoWorldEvent
|
||||
_trigger: 3
|
||||
_action: 0
|
||||
_condition: 0
|
||||
_tags: []
|
||||
_targets: []
|
||||
_tolerance: 0.5
|
||||
_duration: 1
|
||||
_execution: 0
|
||||
_delay: 1
|
||||
_onTrigger:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 0}
|
||||
m_TargetAssemblyTypeName:
|
||||
m_MethodName:
|
||||
m_Mode: 1
|
||||
m_Arguments:
|
||||
m_ObjectArgument: {fileID: 0}
|
||||
m_ObjectArgumentAssemblyTypeName:
|
||||
m_IntArgument: 0
|
||||
m_FloatArgument: 0
|
||||
m_StringArgument:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
_onTriggerDelayed:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &8394717948743689443
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -213,6 +289,8 @@ GameObject:
|
||||
- component: {fileID: 5038437034765625679}
|
||||
- component: {fileID: 2607575129878109721}
|
||||
- component: {fileID: 8696521486180000959}
|
||||
- component: {fileID: 1902417551726438888}
|
||||
- component: {fileID: 3440793362475906848}
|
||||
m_Layer: 0
|
||||
m_Name: Dialogue
|
||||
m_TagString: Untagged
|
||||
@@ -234,10 +312,10 @@ RectTransform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7539442832499066999}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 781, y: -109}
|
||||
m_SizeDelta: {x: 1500, y: 50}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: -78}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2607575129878109721
|
||||
CanvasRenderer:
|
||||
@@ -269,8 +347,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: 'Bonjour ! Comment allez vous ? '
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: 9861d68f4cda1504f8e39cc1464e8bec, type: 2}
|
||||
m_sharedMaterial: {fileID: -7153799593197912463, guid: 9861d68f4cda1504f8e39cc1464e8bec, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -301,8 +379,8 @@ MonoBehaviour:
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterHorizontalScale: 1
|
||||
@@ -339,6 +417,47 @@ MonoBehaviour:
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &1902417551726438888
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8394717948743689443}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2480089bca340ef4994895faaa7b6740, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::PerLetterFontShifter
|
||||
_fonts:
|
||||
- {fileID: 11400000, guid: 9861d68f4cda1504f8e39cc1464e8bec, type: 2}
|
||||
- {fileID: 11400000, guid: 043f9a7ac0bbbe84ba999d32c075d688, type: 2}
|
||||
- {fileID: 11400000, guid: 19647d97bb8853949b67859c86da890f, type: 2}
|
||||
- {fileID: 11400000, guid: d2b009825e5fdef4197bfa70e59bf349, type: 2}
|
||||
- {fileID: 11400000, guid: d612f7901720205498d63ae1fd6b556d, type: 2}
|
||||
- {fileID: 11400000, guid: d5dd43cfa59c82841a5110cf1c54cfd6, type: 2}
|
||||
_shiftInterval: 0.5
|
||||
_minLetterDelay: 0.05
|
||||
_maxLetterDelay: 0.45
|
||||
_fontSize: 0
|
||||
_overrideColor: 0
|
||||
_textColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
--- !u!114 &3440793362475906848
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8394717948743689443}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 1023fdbb836c50f48bd4b52575ed3689, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedText
|
||||
data: {fileID: 0}
|
||||
text: {fileID: 0}
|
||||
textMeshPro: {fileID: 0}
|
||||
textMeshProUGUI: {fileID: 8696521486180000959}
|
||||
--- !u!1 &9065357664704064494
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -350,13 +469,14 @@ GameObject:
|
||||
- component: {fileID: 7319637420139533510}
|
||||
- component: {fileID: 5882626619475037183}
|
||||
- component: {fileID: 8205287516134524828}
|
||||
- component: {fileID: 9171639134918874129}
|
||||
m_Layer: 0
|
||||
m_Name: Speaker
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
m_IsActive: 0
|
||||
--- !u!224 &7319637420139533510
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -371,10 +491,10 @@ RectTransform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7539442832499066999}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 176.83795, y: -46}
|
||||
m_SizeDelta: {x: 291.6759, y: 50}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: -56}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5882626619475037183
|
||||
CanvasRenderer:
|
||||
@@ -406,8 +526,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Interlocuteur
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: 9861d68f4cda1504f8e39cc1464e8bec, type: 2}
|
||||
m_sharedMaterial: {fileID: -7153799593197912463, guid: 9861d68f4cda1504f8e39cc1464e8bec, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -438,7 +558,7 @@ MonoBehaviour:
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
@@ -476,3 +596,28 @@ MonoBehaviour:
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &9171639134918874129
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9065357664704064494}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2480089bca340ef4994895faaa7b6740, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::PerLetterFontShifter
|
||||
_fonts:
|
||||
- {fileID: 11400000, guid: 9861d68f4cda1504f8e39cc1464e8bec, type: 2}
|
||||
- {fileID: 11400000, guid: 043f9a7ac0bbbe84ba999d32c075d688, type: 2}
|
||||
- {fileID: 11400000, guid: 19647d97bb8853949b67859c86da890f, type: 2}
|
||||
- {fileID: 11400000, guid: d2b009825e5fdef4197bfa70e59bf349, type: 2}
|
||||
- {fileID: 11400000, guid: d612f7901720205498d63ae1fd6b556d, type: 2}
|
||||
- {fileID: 11400000, guid: d5dd43cfa59c82841a5110cf1c54cfd6, type: 2}
|
||||
_shiftInterval: 0.5
|
||||
_minLetterDelay: 0.05
|
||||
_maxLetterDelay: 0.45
|
||||
_fontSize: 0
|
||||
_overrideColor: 0
|
||||
_textColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
@@ -246,37 +246,6 @@ MonoBehaviour:
|
||||
m_ShadowLayerMask: 1
|
||||
m_RenderingLayers: 1
|
||||
m_ShadowRenderingLayers: 1
|
||||
--- !u!1 &646939579
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 646939580}
|
||||
m_Layer: 0
|
||||
m_Name: Test Text
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &646939580
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 646939579}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -80.76271, y: -0, z: -88.03677}
|
||||
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 &744399716
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -290,7 +259,7 @@ GameObject:
|
||||
- component: {fileID: 744399719}
|
||||
- component: {fileID: 744399718}
|
||||
m_Layer: 5
|
||||
m_Name: Text (TMP)
|
||||
m_Name: WordWithFontShifter
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@@ -308,12 +277,12 @@ RectTransform:
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1394312810}
|
||||
m_Father: {fileID: 1707232193}
|
||||
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_SizeDelta: {x: 1820, y: 980}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &744399718
|
||||
MonoBehaviour:
|
||||
@@ -533,7 +502,7 @@ RectTransform:
|
||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1394312810}
|
||||
- {fileID: 1707232193}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@@ -690,7 +659,7 @@ GameObject:
|
||||
- component: {fileID: 1394312812}
|
||||
- component: {fileID: 1394312811}
|
||||
m_Layer: 5
|
||||
m_Name: Image
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@@ -703,18 +672,17 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1394312809}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
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: 744399717}
|
||||
m_Father: {fileID: 904174085}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1707232193}
|
||||
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_SizeDelta: {x: 1820, y: 980}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1394312811
|
||||
MonoBehaviour:
|
||||
@@ -754,7 +722,7 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1394312809}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &1531450571
|
||||
--- !u!1 &1707232192
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
@@ -762,83 +730,39 @@ GameObject:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1531450574}
|
||||
- component: {fileID: 1531450573}
|
||||
- component: {fileID: 1531450572}
|
||||
m_Layer: 0
|
||||
m_Name: EventSystem
|
||||
- component: {fileID: 1707232193}
|
||||
m_Layer: 5
|
||||
m_Name: FlashWord
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &1531450572
|
||||
MonoBehaviour:
|
||||
--- !u!224 &1707232193
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1531450571}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.UI.InputSystemUIInputModule
|
||||
m_SendPointerHoverToParent: 1
|
||||
m_MoveRepeatDelay: 0.5
|
||||
m_MoveRepeatRate: 0.1
|
||||
m_XRTrackingOrigin: {fileID: 0}
|
||||
m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_DeselectOnBackgroundClick: 1
|
||||
m_PointerBehavior: 0
|
||||
m_CursorLockBehavior: 0
|
||||
m_ScrollDeltaPerTick: 6
|
||||
--- !u!114 &1531450573
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1531450571}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.EventSystem
|
||||
m_FirstSelected: {fileID: 0}
|
||||
m_sendNavigationEvents: 1
|
||||
m_DragThreshold: 10
|
||||
--- !u!4 &1531450574
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1531450571}
|
||||
serializedVersion: 2
|
||||
m_GameObject: {fileID: 1707232192}
|
||||
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_Children:
|
||||
- {fileID: 1394312810}
|
||||
- {fileID: 744399717}
|
||||
m_Father: {fileID: 904174085}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 100, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1660057539 &9223372036854775807
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Roots:
|
||||
- {fileID: 1242676834}
|
||||
- {fileID: 24656247}
|
||||
- {fileID: 646939580}
|
||||
- {fileID: 904174085}
|
||||
- {fileID: 1531450574}
|
||||
|
||||
+2056
-349
File diff suppressed because it is too large
Load Diff
@@ -6,6 +6,13 @@ using UnityEngine.UI;
|
||||
|
||||
namespace Unheimlich.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// Splits a TextMeshProUGUI string into individual per-letter child objects,
|
||||
/// then periodically reassigns a random font to each letter with a staggered delay.
|
||||
/// Whitespace is preserved as sized spacers. Font size, color, and alignment are
|
||||
/// inherited from the source TMP component by default.
|
||||
/// Call <see cref="StartShifting"/> to begin, or enable <see cref="_playOnAwake"/>.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(TextMeshProUGUI))]
|
||||
public class PerLetterFontShifter : MonoBehaviour
|
||||
{
|
||||
@@ -15,44 +22,53 @@ namespace Unheimlich.UI
|
||||
[SerializeField] private TMP_FontAsset[] _fonts;
|
||||
|
||||
[Header("Timing")]
|
||||
[SerializeField] private bool _playOnAwake = false;
|
||||
[SerializeField] private float _shiftInterval = 3f;
|
||||
[SerializeField] private float _minLetterDelay = 0.05f;
|
||||
[SerializeField] private float _maxLetterDelay = 0.25f;
|
||||
[Tooltip("Per-letter delay as a fraction of shift interval. 0 = all letters shift at once, 1 = stagger can span the full interval.")]
|
||||
[SerializeField, Range(0f, 1f)] private float _shiftRandomness = 0.3f;
|
||||
|
||||
[Header("Style")]
|
||||
[SerializeField] private float _fontSize = 36f;
|
||||
[Tooltip("Leave at 0 to inherit font size from the source TMP component.")]
|
||||
[SerializeField] private float _fontSize = 0f;
|
||||
[Tooltip("When enabled, overrides the source TMP color with the value below.")]
|
||||
[SerializeField] private bool _overrideColor = false;
|
||||
[SerializeField] private Color _textColor = Color.white;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private TextMeshProUGUI _originalTmp;
|
||||
private string _originalText;
|
||||
private TextMeshProUGUI _sourceTmp;
|
||||
private string _sourceText;
|
||||
|
||||
private float _resolvedFontSize;
|
||||
private TextAlignmentOptions _resolvedAlignment;
|
||||
|
||||
private readonly List<TextMeshProUGUI> _letterObjects = new List<TextMeshProUGUI>();
|
||||
private Coroutine _shiftLoopRoutineHandle;
|
||||
private Coroutine _shiftLoopHandle;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Unity Lifecycle Methods
|
||||
#region Unity Lifecycle
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_originalTmp = GetComponent<TextMeshProUGUI>();
|
||||
_originalText = _originalTmp.text;
|
||||
_originalTmp.enabled = false;
|
||||
}
|
||||
_sourceTmp = GetComponent<TextMeshProUGUI>();
|
||||
_sourceText = _sourceTmp.text;
|
||||
|
||||
_resolvedFontSize = (_fontSize > 0f) ? _fontSize : _sourceTmp.fontSize;
|
||||
_resolvedAlignment = _sourceTmp.alignment;
|
||||
|
||||
// Hide the original component; child letter objects take over rendering.
|
||||
_sourceTmp.enabled = false;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
BuildLetterObjects();
|
||||
_shiftLoopRoutineHandle = StartCoroutine(ShiftLoopRoutine());
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
private void Start()
|
||||
{
|
||||
if (_shiftLoopRoutineHandle != null)
|
||||
StopCoroutine(_shiftLoopRoutineHandle);
|
||||
if (_playOnAwake)
|
||||
StartShifting();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
@@ -62,40 +78,115 @@ namespace Unheimlich.UI
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Methods
|
||||
#region Public API
|
||||
|
||||
/// <summary>
|
||||
/// Replaces the displayed text and rebuilds all letter objects.
|
||||
/// </summary>
|
||||
public void SetText(string newText)
|
||||
{
|
||||
_originalText = newText;
|
||||
_sourceText = newText;
|
||||
BuildLetterObjects();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Begins the periodic font shuffle loop.
|
||||
/// </summary>
|
||||
public void StartShifting()
|
||||
{
|
||||
if (_shiftLoopHandle != null)
|
||||
return;
|
||||
|
||||
_shiftLoopHandle = StartCoroutine(ShiftLoopRoutine());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stops the periodic font shuffle loop.
|
||||
/// </summary>
|
||||
public void StopShifting()
|
||||
{
|
||||
if (_shiftLoopHandle == null)
|
||||
return;
|
||||
|
||||
StopCoroutine(_shiftLoopHandle);
|
||||
_shiftLoopHandle = null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Methods
|
||||
#region Letter Object Management
|
||||
|
||||
/// <summary>
|
||||
/// Destroys existing letter objects, then creates one child GameObject per character.
|
||||
/// Spaces become hardcoded-width spacers; newlines are skipped.
|
||||
/// Assigns an initial random font to every letter instantly so the text
|
||||
/// never appears in its default font before the first shuffle cycle.
|
||||
/// </summary>
|
||||
private void BuildLetterObjects()
|
||||
{
|
||||
DestroyLetterObjects();
|
||||
|
||||
foreach (char character in _originalText)
|
||||
foreach (char c in _sourceText)
|
||||
{
|
||||
GameObject letterGo = new GameObject($"Letter_{character}");
|
||||
letterGo.transform.SetParent(transform, false);
|
||||
if (c == '\n')
|
||||
continue;
|
||||
|
||||
TextMeshProUGUI letterTmp = letterGo.AddComponent<TextMeshProUGUI>();
|
||||
letterTmp.text = character.ToString();
|
||||
letterTmp.fontSize = _fontSize;
|
||||
letterTmp.color = _textColor;
|
||||
letterTmp.alignment = TextAlignmentOptions.Center;
|
||||
GameObject go = new GameObject($"Letter_{c}");
|
||||
go.transform.SetParent(transform, false);
|
||||
|
||||
_letterObjects.Add(letterTmp);
|
||||
TextMeshProUGUI tmp = go.AddComponent<TextMeshProUGUI>();
|
||||
tmp.fontSize = _resolvedFontSize;
|
||||
tmp.color = _overrideColor ? _textColor : _sourceTmp.color;
|
||||
tmp.alignment = _resolvedAlignment;
|
||||
|
||||
if (c == ' ')
|
||||
{
|
||||
// Space glyphs are unreliable across custom fonts; use a LayoutElement
|
||||
// with a hardcoded width derived from the resolved font size instead.
|
||||
tmp.text = "\u00A0";
|
||||
tmp.color = new Color(0f, 0f, 0f, 0f);
|
||||
|
||||
LayoutElement le = go.AddComponent<LayoutElement>();
|
||||
le.preferredWidth = _resolvedFontSize * 0.5f;
|
||||
le.preferredHeight = _resolvedFontSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp.text = c.ToString();
|
||||
|
||||
ContentSizeFitter fitter = go.AddComponent<ContentSizeFitter>();
|
||||
fitter.horizontalFit = ContentSizeFitter.FitMode.PreferredSize;
|
||||
fitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
|
||||
}
|
||||
|
||||
ArrangeLetters();
|
||||
ShuffleFonts();
|
||||
_letterObjects.Add(tmp);
|
||||
}
|
||||
|
||||
ConfigureLayoutGroup();
|
||||
AssignInitialFonts();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Assigns a random font to every letter instantly, with no stagger.
|
||||
/// Called once after build so no brusque font switch occurs on the first cycle.
|
||||
/// </summary>
|
||||
private void AssignInitialFonts()
|
||||
{
|
||||
if (_fonts == null || _fonts.Length == 0)
|
||||
return;
|
||||
|
||||
foreach (TextMeshProUGUI letter in _letterObjects)
|
||||
{
|
||||
if (letter.text == "\u00A0")
|
||||
continue;
|
||||
|
||||
letter.font = _fonts[Random.Range(0, _fonts.Length)];
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Destroys all tracked letter child objects and clears the list.
|
||||
/// </summary>
|
||||
private void DestroyLetterObjects()
|
||||
{
|
||||
foreach (TextMeshProUGUI letter in _letterObjects)
|
||||
@@ -107,30 +198,61 @@ namespace Unheimlich.UI
|
||||
_letterObjects.Clear();
|
||||
}
|
||||
|
||||
private void ArrangeLetters()
|
||||
#endregion
|
||||
|
||||
#region Layout
|
||||
|
||||
/// <summary>
|
||||
/// Ensures a HorizontalLayoutGroup is present and configured to match
|
||||
/// the alignment of the source TMP component.
|
||||
/// </summary>
|
||||
private void ConfigureLayoutGroup()
|
||||
{
|
||||
HorizontalLayoutGroup layout = gameObject.GetComponent<HorizontalLayoutGroup>();
|
||||
if (layout == null)
|
||||
layout = gameObject.AddComponent<HorizontalLayoutGroup>();
|
||||
|
||||
layout.childAlignment = TextAnchor.MiddleCenter;
|
||||
layout.childAlignment = TMPAlignmentToTextAnchor(_resolvedAlignment);
|
||||
layout.childForceExpandWidth = false;
|
||||
layout.childForceExpandHeight = false;
|
||||
layout.childControlWidth = true;
|
||||
layout.childControlHeight = true;
|
||||
layout.spacing = 0f;
|
||||
}
|
||||
|
||||
foreach (TextMeshProUGUI letter in _letterObjects)
|
||||
/// <summary>
|
||||
/// Maps a TMP TextAlignmentOptions value to the closest Unity TextAnchor equivalent.
|
||||
/// </summary>
|
||||
private static TextAnchor TMPAlignmentToTextAnchor(TextAlignmentOptions alignment)
|
||||
{
|
||||
ContentSizeFitter fitter = letter.gameObject.GetComponent<ContentSizeFitter>();
|
||||
if (fitter == null)
|
||||
fitter = letter.gameObject.AddComponent<ContentSizeFitter>();
|
||||
|
||||
fitter.horizontalFit = ContentSizeFitter.FitMode.PreferredSize;
|
||||
fitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
|
||||
}
|
||||
return alignment switch
|
||||
{
|
||||
TextAlignmentOptions.TopLeft
|
||||
or TextAlignmentOptions.Left => TextAnchor.UpperLeft,
|
||||
TextAlignmentOptions.Top => TextAnchor.UpperCenter,
|
||||
TextAlignmentOptions.TopRight => TextAnchor.UpperRight,
|
||||
TextAlignmentOptions.MidlineLeft
|
||||
or TextAlignmentOptions.BaselineLeft => TextAnchor.MiddleLeft,
|
||||
TextAlignmentOptions.Center
|
||||
or TextAlignmentOptions.Midline
|
||||
or TextAlignmentOptions.Baseline => TextAnchor.MiddleCenter,
|
||||
TextAlignmentOptions.MidlineRight
|
||||
or TextAlignmentOptions.BaselineRight => TextAnchor.MiddleRight,
|
||||
TextAlignmentOptions.BottomLeft => TextAnchor.LowerLeft,
|
||||
TextAlignmentOptions.Bottom => TextAnchor.LowerCenter,
|
||||
TextAlignmentOptions.BottomRight => TextAnchor.LowerRight,
|
||||
_ => TextAnchor.MiddleCenter,
|
||||
};
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Font Shuffling
|
||||
|
||||
/// <summary>
|
||||
/// Kicks off a staggered coroutine that assigns a new random font to each letter
|
||||
/// in a shuffled order to avoid a predictable left-to-right sweep.
|
||||
/// </summary>
|
||||
private void ShuffleFonts()
|
||||
{
|
||||
if (_fonts == null || _fonts.Length == 0)
|
||||
@@ -142,10 +264,12 @@ namespace Unheimlich.UI
|
||||
StartCoroutine(ShuffleStaggeredRoutine());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a Fisher-Yates shuffled list of indices into <see cref="_letterObjects"/>.
|
||||
/// </summary>
|
||||
private List<int> GetShuffledIndices()
|
||||
{
|
||||
List<int> indices = new List<int>();
|
||||
|
||||
List<int> indices = new List<int>(_letterObjects.Count);
|
||||
for (int i = 0; i < _letterObjects.Count; i++)
|
||||
indices.Add(i);
|
||||
|
||||
@@ -162,8 +286,14 @@ namespace Unheimlich.UI
|
||||
|
||||
#region Coroutines
|
||||
|
||||
/// <summary>
|
||||
/// Waits for <see cref="_shiftInterval"/> seconds, then triggers a new font shuffle.
|
||||
/// Runs indefinitely until <see cref="StopShifting"/> is called.
|
||||
/// </summary>
|
||||
private IEnumerator ShiftLoopRoutine()
|
||||
{
|
||||
ShuffleFonts();
|
||||
|
||||
while (true)
|
||||
{
|
||||
yield return new WaitForSeconds(_shiftInterval);
|
||||
@@ -171,20 +301,22 @@ namespace Unheimlich.UI
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Iterates over letter objects in shuffled order, assigning a random font to each
|
||||
/// with a staggered delay of <see cref="_shiftRandomness"/> * <see cref="_shiftInterval"/>.
|
||||
/// Spacer objects (non-breaking spaces) are skipped.
|
||||
/// </summary>
|
||||
private IEnumerator ShuffleStaggeredRoutine()
|
||||
{
|
||||
List<int> shuffledIndices = GetShuffledIndices();
|
||||
|
||||
foreach (int index in shuffledIndices)
|
||||
foreach (int index in GetShuffledIndices())
|
||||
{
|
||||
TextMeshProUGUI letter = _letterObjects[index];
|
||||
|
||||
if (letter.text == " " || letter.text == "\n")
|
||||
if (letter.text == "\u00A0")
|
||||
continue;
|
||||
|
||||
letter.font = _fonts[Random.Range(0, _fonts.Length)];
|
||||
|
||||
yield return new WaitForSeconds(Random.Range(_minLetterDelay, _maxLetterDelay));
|
||||
yield return new WaitForSeconds(_shiftInterval * Random.Range(0f, _shiftRandomness));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user