增加配置文件

This commit is contained in:
SnowShow 2025-05-08 13:38:55 +08:00
parent 45e4618d05
commit 2352e69081
1612 changed files with 684160 additions and 644 deletions

View File

@ -0,0 +1,61 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 16
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 18bd840b706853d4a934ec3199f63a41, type: 3}
m_Name: Animancer Settings
m_EditorClassIdentifier:
_Data:
- rid: 1102212210127012099
- rid: 1102212210127012100
- rid: 1102212210127012101
- rid: 1102212210127012102
- rid: 1102212210127012103
- rid: 1102212210127012104
references:
version: 2
RefIds:
- rid: 1102212210127012099
type: {class: AnimancerComponentPreviewSettings, ns: Animancer.Editor.Previews, asm: Kybernetik.Animancer.Editor}
data:
_RepaintRate: 30
- rid: 1102212210127012100
type: {class: AnimancerGraphControls, ns: Animancer.Editor, asm: Kybernetik.Animancer.Editor}
data:
_FrameStep: 0.02
- rid: 1102212210127012101
type: {class: TransitionPreviewSettings, ns: Animancer.Editor.Previews, asm: Kybernetik.Animancer.Editor}
data:
_AutoClose: 1
_SceneLighting: 0
_ShowSkybox: 0
_FrameStep: 0.02
_SceneEnvironment: {fileID: 0}
_Models: []
- rid: 1102212210127012102
type: {class: SerializableEventSequenceDrawerSettings, ns: Animancer.Editor, asm: Kybernetik.Animancer.Editor}
data:
_HideEventCallbacks: 0
- rid: 1102212210127012103
type: {class: AnimationTimeAttributeSettings, ns: Animancer.Units.Editor, asm: Kybernetik.Animancer.Editor}
data:
showApproximations: 1
showNormalized: 1
showSeconds: 1
showFrames: 1
- rid: 1102212210127012104
type: {class: GenerateSpriteAnimationsSettings, ns: Animancer.Editor.Tools, asm: Kybernetik.Animancer.Editor}
data:
_FrameRate: 12
_HierarchyPath:
_TargetType:
_QualifiedName: UnityEngine.SpriteRenderer, UnityEngine.CoreModule, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
_PropertyName: m_Sprite

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6bd895ef003a7dd42b1212005d9de2ab
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 38f70f293f649324b99d4d7f1f9bede0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,113 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2dd819b1a17000747b98d533a289c5eb, type: 3}
m_Name: shelfConfig_1
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects:
- {fileID: 7400000, guid: c005c0711278dbd4eafdb92b99794612, type: 2}
- {fileID: 7400000, guid: c7c24aeb0ca291d4583b5e28baf58f80, type: 2}
- {fileID: 7400000, guid: e9fa085935da61b4ba9a30d5b095cb45, type: 2}
- {fileID: 7400000, guid: 35f948453d152a04986763f636b3c194, type: 2}
- {fileID: 7400000, guid: b5ae0aa7adc17f54988962e81404e636, type: 2}
- {fileID: 7400000, guid: d933409f8eec3814bad938a7aad0ab37, type: 2}
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: shelfAnimDatas
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[GameLogic.ShelfRowAnimData,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 2
- Name: $v
Entry: 7
Data: 2|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 10
Data: 0
- Name: shrink
Entry: 10
Data: 1
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 1
- Name: $v
Entry: 7
Data: 3|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 10
Data: 2
- Name: shrink
Entry: 10
Data: 3
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 4
- Name: $v
Entry: 7
Data: 4|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 10
Data: 4
- Name: shrink
Entry: 10
Data: 5
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
groups: 010000000300000004000000

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cab58bc1ec41bb7448d685f50bb5708b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,107 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2dd819b1a17000747b98d533a289c5eb, type: 3}
m_Name: shelfConfig_2
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: shelfAnimDatas
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[GameLogic.ShelfRowAnimData,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 6
- Name: $v
Entry: 7
Data: 2|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 5
- Name: $v
Entry: 7
Data: 3|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 7
- Name: $v
Entry: 7
Data: 4|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
groups: 050000000600000007000000

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 33bc2183695eea945a4d58fcb117937e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,107 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2dd819b1a17000747b98d533a289c5eb, type: 3}
m_Name: shelfConfig_3
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: shelfAnimDatas
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[GameLogic.ShelfRowAnimData,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 11
- Name: $v
Entry: 7
Data: 2|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 9
- Name: $v
Entry: 7
Data: 3|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 12
- Name: $v
Entry: 7
Data: 4|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
groups: 090000000b0000000c000000

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bddc52252ed26b8409ddb979e7c6d277
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,128 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2dd819b1a17000747b98d533a289c5eb, type: 3}
m_Name: shelfConfig_4
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: shelfAnimDatas
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[GameLogic.ShelfRowAnimData,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 4
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 13
- Name: $v
Entry: 7
Data: 2|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 15
- Name: $v
Entry: 7
Data: 3|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 14
- Name: $v
Entry: 7
Data: 4|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 16
- Name: $v
Entry: 7
Data: 5|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
groups: 0d0000000e0000000f00000010000000

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9b9c33b937c2c70488884d364858a4d3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,107 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2dd819b1a17000747b98d533a289c5eb, type: 3}
m_Name: shelfConfig_5
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: shelfAnimDatas
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[GameLogic.ShelfRowAnimData,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 19
- Name: $v
Entry: 7
Data: 2|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 17
- Name: $v
Entry: 7
Data: 3|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 20
- Name: $v
Entry: 7
Data: 4|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
groups: 110000001300000014000000

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 73f70759e8ade1645a982f72ffe7ea7b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,107 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2dd819b1a17000747b98d533a289c5eb, type: 3}
m_Name: shelfConfig_6
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: shelfAnimDatas
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[GameLogic.ShelfRowAnimData,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 22
- Name: $v
Entry: 7
Data: 2|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 21
- Name: $v
Entry: 7
Data: 3|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 23
- Name: $v
Entry: 7
Data: 4|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
groups: 150000001600000017000000

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: fa210a939f5b7104ba4413a72638e695
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,107 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2dd819b1a17000747b98d533a289c5eb, type: 3}
m_Name: shelfConfig_7
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: shelfAnimDatas
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[GameLogic.ShelfRowAnimData,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 27
- Name: $v
Entry: 7
Data: 2|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 25
- Name: $v
Entry: 7
Data: 3|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 28
- Name: $v
Entry: 7
Data: 4|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
groups: 190000001b0000001c000000

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7a9b8a706eab1c74f8f26c28448f41c9
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,107 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2dd819b1a17000747b98d533a289c5eb, type: 3}
m_Name: shelfConfig_8
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: shelfAnimDatas
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[GameLogic.ShelfRowAnimData,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 3
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 30
- Name: $v
Entry: 7
Data: 2|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 29
- Name: $v
Entry: 7
Data: 3|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 31
- Name: $v
Entry: 7
Data: 4|GameLogic.ShelfRowAnimData, Assembly-CSharp
- Name: stretch
Entry: 6
Data:
- Name: shrink
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
groups: 1d0000001e0000001f000000

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 803573dde1fe883479b2384da9193dbf
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,24 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7a686a47eee2fa44cb0a34b5d86e4d5e, type: 3}
m_Name: ShelfMachineBehaviour
m_EditorClassIdentifier:
_serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"selectionMode":1,"intCase":{},"enumCase":{"_type":"System.Enum","_name":"shelfToolActionType","_targetVariableID":"046106d6-ba37-46e3-8cc2-cbaac14b6e2b"},"_position":{"x":234.3504,"y":94.13937},"$type":"NodeCanvas.BehaviourTrees.Switch","$id":"0"},{"_position":{"x":-63.01494,"y":227.9567},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"1"},{"_position":{"x":268.3969,"y":265.9767},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"2"},{"repeaterMode":1,"repeatTimes":{"_value":1},"_position":{"x":-45.46437,"y":382.2221},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"3"},{"_condition":{"method":{"_baseInfo":"GameLogic.ShelfMachineToolActor|InitLoadPositionComplete|System.Boolean","_paramsInfo":""},"parameters":[],"checkValue":{"_type":"System.Boolean","_value":{"$content":false,"$type":"System.Boolean"}},"$type":"NodeCanvas.Tasks.Conditions.CheckFunction_Multiplatform"},"_position":{"x":-131.8135,"y":472.9961},"$type":"NodeCanvas.BehaviourTrees.ConditionNode","$id":"4"}],"connections":[{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{}},"derivedData":{"$type":"NodeCanvas.BehaviourTrees.BehaviourTree+DerivedSerializationData"}}'
_objectReferences: []
_graphSource:
_version: 3.32
_category:
_comments:
_translation: {x: 267, y: -174}
_zoomFactor: 0.9961413
_haltSerialization: 0
_externalSerializationFile: {fileID: 0}

View File

@ -1,26 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7a686a47eee2fa44cb0a34b5d86e4d5e, type: 3}
m_Name: ShelfMachineBehaviour
m_EditorClassIdentifier:
_serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"selectionMode":1,"intCase":{},"enumCase":{"_type":"System.Enum","_name":""},"_position":{"x":564.0,"y":122.0},"$type":"NodeCanvas.BehaviourTrees.Switch"}],"connections":[],"canvasGroups":[],"localBlackboard":{"_variables":{"Enum
Case":{"_name":"Enum Case","_id":"765c30f0-31a8-432d-8a9e-1a9dbf4d0337","$type":"NodeCanvas.Framework.Variable`1[[System.Enum,
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}}},"derivedData":{"repeat":true,"$type":"NodeCanvas.BehaviourTrees.BehaviourTree+DerivedSerializationData"}}'
_objectReferences: []
_graphSource:
_version: 3.32
_category:
_comments:
_translation: {x: 0, y: 0}
_zoomFactor: 1
_haltSerialization: 0
_externalSerializationFile: {fileID: 0}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +0,0 @@
using Sirenix.OdinInspector;
using UnityEngine;
public enum ShelfActionType
{
[LabelText("ÎÞ")]None,
[LabelText("×°»õ")]Load,
[LabelText("ж»õ")]UnLoad
}

View File

@ -0,0 +1,12 @@
using Sirenix.OdinInspector;
using UnityEngine;
namespace GameLogic
{
public enum ShelfToolActionType
{
[LabelText("ÎÞ")] None,
[LabelText("×°»õ")] Load,
[LabelText("ж»õ")] UnLoad
}
}

View File

@ -1,7 +1,29 @@
using System;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
public class Actor : MonoBehaviour namespace GameLogic
{ {
[LabelText("标识id")]public int _id = 0; public class Actor : MonoBehaviour
{
[LabelText("标识id")]public int _id = 0;
#region
protected virtual void OnLoad(){}
protected virtual void OnUpdate(){}
protected virtual void OnActorDestroy(){}
private void Awake()
{
OnLoad();
}
private void Update()
{
}
#endregion
}
} }

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -6,85 +7,102 @@ using Cysharp.Threading.Tasks;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
public class ActorMgr : Singleton<ActorMgr> namespace GameLogic
{ {
[ShowInInspector,LabelText("所有货物")]private Dictionary<string,ContainerInfo> _containerInfos = new Dictionary<string,ContainerInfo>(); public class ActorMgr : Singleton<ActorMgr>
[ShowInInspector,LabelText("所有货架")]private List<ShelfActor> _shelfActors = new List<ShelfActor>(); {
[ShowInInspector, LabelText("所有货物")]
private Dictionary<string, ContainerInfo> _containerInfos = new Dictionary<string, ContainerInfo>();
protected override void OnLoad() [ShowInInspector, LabelText("所有货架")] private List<ShelfActor> _shelfActors = new List<ShelfActor>();
{
base.OnLoad();
InitData().Forget();
}
private async UniTaskVoid InitData()
{
await UniTask.Yield();
await InitShelf();
await InitContainer();
}
private async UniTask InitShelf()
{
var shelfs = GameObject.FindObjectsByType<ShelfActor>(FindObjectsSortMode.None);
_shelfActors = shelfs.ToList();
}
/// <summary> protected override void OnLoad()
/// 生成容器 {
/// </summary> base.OnLoad();
private async UniTask InitContainer() InitData().Forget();
{ }
await UniTask.Yield();
List<GameObject> result = new List<GameObject>();
// 正则表达式:匹配
Regex regex = new Regex("^\\d{2}-\\d{2}-\\d{2}$");
foreach (GameObject obj in GameObject.FindObjectsByType<GameObject>(FindObjectsSortMode.InstanceID))
{
// 1. 检查名称是否匹配正则表达式
if (regex.IsMatch(obj.name))
{
var groups = obj.name.Split('-');
if (groups.Length != 3) break;
int row = int.Parse(groups[0]);
int column = int.Parse(groups[1]);
int layer = int.Parse(groups[2]);
var containerInfo = ContainerFactory.CreateInfo(obj, GetShelfBySort(row),row,column,layer);
_containerInfos.Add(obj.name,containerInfo);
}
}
}
private async UniTaskVoid InitData()
{
await UniTask.Yield();
await InitShelf();
await InitContainer();
}
#region private async UniTask InitShelf()
/// <summary> {
/// 根据排号 获取 相应的货架 var shelfs = GameObject.FindObjectsByType<ShelfActor>(FindObjectsSortMode.None);
/// </summary> _shelfActors = shelfs.ToList();
/// <param name="sortId"></param> }
/// <returns></returns>
private ShelfActor GetShelfBySort(int sortId)
{
foreach (ShelfActor shelfActor in _shelfActors)
{
if (shelfActor.IsContainGroup(sortId))
{
return shelfActor;
}
}
return null; protected override void OnUpdate()
} {
base.OnUpdate();
#endregion if (Input.GetKeyDown(KeyCode.R))
{
try
{
Debug.LogWarning("取货03-01-02");
var co = _containerInfos["03-01-02"];
co.shelf.LoadTest(co);
}
catch (Exception e)
{
Debug.LogWarning("货物不存在");
throw;
}
}
}
/// <summary>
/// 生成容器
/// </summary>
private async UniTask InitContainer()
{
await UniTask.Yield();
List<GameObject> result = new List<GameObject>();
// 正则表达式:匹配
Regex regex = new Regex("^\\d{2}-\\d{2}-\\d{2}$");
foreach (GameObject obj in GameObject.FindObjectsByType<GameObject>(FindObjectsSortMode.InstanceID))
{
// 1. 检查名称是否匹配正则表达式
if (regex.IsMatch(obj.name))
{
var groups = obj.name.Split('-');
if (groups.Length != 3) break;
int row = int.Parse(groups[0]);
int column = int.Parse(groups[1]);
int layer = int.Parse(groups[2]);
var containerInfo = ContainerFactory.CreateInfo(obj, GetShelfBySort(row), row, column, layer);
_containerInfos.Add(obj.name, containerInfo);
}
}
}
}
#region
/// <summary>
/// 根据排号 获取 相应的货架
/// </summary>
/// <param name="sortId"></param>
/// <returns></returns>
private ShelfActor GetShelfBySort(int sortId)
{
foreach (ShelfActor shelfActor in _shelfActors)
{
if (shelfActor.IsContainGroup(sortId))
{
return shelfActor;
}
}
return null;
}
#endregion
}
}

View File

@ -2,25 +2,84 @@ using System.Collections.Generic;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
public class ShelfActor : Actor namespace GameLogic
{ {
public class ShelfActor : Actor
[LabelText("货物所属工具组"),ShowInInspector] public List<int> _group = new List<int>();
public void LoadContainer()
{ {
[LabelText("配置文件"),ShowInInspector] public So_ShelfConfig _shelfConfig;
[LabelText("货物所属工具组"),ShowInInspector] public Dictionary<string,Transform> _stations = new Dictionary<string, Transform>();
[ShowInInspector]private ContainerInfo _currentContainerInfo = null;
private ShelfMachineToolActor _shelfMachineToolActor;
protected override void OnLoad()
{
base.OnLoad();
_shelfConfig = Resources.Load<So_ShelfConfig>(AssetLocationSetting.SoSelfConfig + _id);
_shelfMachineToolActor = GetComponentInChildren<ShelfMachineToolActor>();
InitStations();
}
/// <summary>
/// 初始化装取货站台数据
/// </summary>
private void InitStations()
{
var stations = GameObject.FindGameObjectsWithTag(TagSetting.ShelfStation);
Debug.Log(stations.Length);
foreach (var stationGo in stations)
{
var stationData = stationGo.name.Split('-');
int row = int.Parse(stationData[0]);
int column = int.Parse(stationData[1]);
int layer = int.Parse(stationData[2]);
if (!IsContainGroup(row)) continue;
_stations.Add(stationGo.name,stationGo.transform);
}
}
/// <summary>
/// 取货
/// </summary>
public void LoadContainer(string station,ContainerInfo container)
{
}
/// <summary>
/// 装货
/// </summary>
public void LoadTest(ContainerInfo container)
{
Debug.LogWarning("取货成功");
_currentContainerInfo = container;
Transform station = null;
foreach (var stationT in _stations.Values)
{
var containerPrefab = Resources.Load<GameObject>(AssetLocationSetting.ContainerPath);
GameObject go = Instantiate(containerPrefab);
go.SetTransformNoScale(stationT);
station = stationT;
}
_shelfMachineToolActor.Load(station,container);
}
/// <summary>
/// 判断这个货物是否包含这个组内
/// </summary>
/// <param name="group"></param>
/// <returns></returns>
public bool IsContainGroup(int group)
{
return _shelfConfig.groups.Contains(group);
}
} }
/// <summary>
/// 判断这个货物是否包含这个组内
/// </summary>
/// <param name="group"></param>
/// <returns></returns>
public bool IsContainGroup(int group)
{
return _group.Contains(group);
}
} }

View File

@ -0,0 +1,72 @@
using GameLogic;
using NodeCanvas.BehaviourTrees;
using PrimeTween;
using Sirenix.OdinInspector;
using UnityEngine;
namespace GameLogic
{
public class ShelfMachineToolActor : Actor
{
[ShowInInspector,ReadOnly]private BehaviourTreeOwner _behaviourTreeOwner;
[ShowInInspector,ReadOnly]public ShelfToolActionType _actionType = ShelfToolActionType.None;
[ShowInInspector,ReadOnly] public float _moveSpeed = 5;
[ShowInInspector,ReadOnly] public float _moveSeconds;
[LabelText("子工具舞台")]private Transform _caroparent;
private Transform _station;
private ContainerInfo _container;
[Tooltip("加载参数")]
[ShowInInspector,BoxGroup("Load")]public bool _isInitLoadPositionComplete = false;
protected override void OnLoad()
{
base.OnLoad();
_behaviourTreeOwner = GetComponent<BehaviourTreeOwner>();
_caroparent = transform.Find("Caro-parent").Find("Cargo");
}
#region
/// <summary>
/// 装货
/// </summary>
public void Load(Transform station,ContainerInfo containerInfo)
{
_actionType = ShelfToolActionType.Load;
_station = station;
_container = containerInfo;
_behaviourTreeOwner.StartBehaviour();
}
public bool InitLoadPositionComplete()
{
_isInitLoadPositionComplete = false;
CalculateSpeedSecond(Vector3.Distance(transform.position, _station.position));
Tween.PositionX(transform, _station.position.x, _moveSeconds,Ease.Linear).OnComplete(()=>_isInitLoadPositionComplete=true);
Tween.PositionY(_caroparent, _station.position.y+0.14f, _moveSeconds, Ease.Linear);
return _isInitLoadPositionComplete;
}
#endregion
private void CalculateSpeedSecond(float distance)
{
_moveSeconds = distance / _moveSpeed;
}
/// <summary>
/// 取货
/// </summary>
public void UnLoad()
{
_actionType = ShelfToolActionType.UnLoad;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a0e58b47bf55898428028fa90be72aa2

View File

@ -1,20 +1,16 @@
 using Sirenix.OdinInspector;
using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
namespace GameLogic
[System.Serializable]
public class ContainerInfo
{ {
[LabelText("货物")]public GameObject container; [System.Serializable]
[LabelText("货架")] public ShelfActor shelf; public class ContainerInfo
{
[LabelText("货物")] public GameObject container;
[LabelText("货架")] public ShelfActor shelf;
[LabelText("货架排")]public int shelfRow; [LabelText("货架排")] public int shelfRow;
[LabelText("货架列")]public int shelColumn; [LabelText("货架列")] public int shelColumn;
[LabelText("货架层")]public int shelfLayer; [LabelText("货架层")] public int shelfLayer;
}
} }

View File

@ -0,0 +1,19 @@
using Sirenix.OdinInspector;
using UnityEngine;
namespace GameLogic
{
[System.Serializable]
public class ShelfRowAnimData
{
/// <summary>
/// 伸动画
/// </summary>
[LabelText("伸动画")] public AnimationClip stretch;
/// <summary>
/// 缩动画
/// </summary>
[LabelText("缩动画")] public AnimationClip shrink ;
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e17fdddd9422427ba7bdbb7c49c96fb1
timeCreated: 1746680862

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: db135584c06f406d8e113c3363ca229f
timeCreated: 1746668246

View File

@ -0,0 +1,28 @@
using UnityEngine;
namespace GameLogic
{
public static class GameObjectExtension
{
public static void SetPosition(this GameObject self, Vector3 position)
{
self.transform.position = position;
}
public static void SetPosition(this GameObject self, Transform transform)
{
self.transform.position = transform.position;
}
public static void SetTransformNoScale(this GameObject self, Transform transform)
{
self.transform.position = transform.position;
self.transform.rotation = transform.rotation;
}
public static void SetTransform(this GameObject self, Transform transform)
{
self.transform.position = transform.position;
self.transform.rotation = transform.rotation;
self.transform.localScale = transform.localScale;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b598db33ceb24c38aaba8bf6c2d8b5fe
timeCreated: 1746668261

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 436600838c80455bad0101cdb79344ba
timeCreated: 1746664720

View File

@ -0,0 +1,9 @@
namespace GameLogic
{
public static class AssetLocationSetting
{
public static readonly string ContainerPath = "YCLZT";
public static readonly string SoSelfConfig = "So/Shelf/shelfConfig_";
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 6a48acd0bb5e4b7bafc551658911f6cc
timeCreated: 1746667972

View File

@ -0,0 +1,7 @@
namespace GameLogic
{
public static class TagSetting
{
public static readonly string ShelfStation = "ShelfStation";
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 71a6c10d17b44e109791ed532986b5d0
timeCreated: 1746664730

View File

@ -1,17 +1,20 @@
 using System;
using System;
using UnityEngine; using UnityEngine;
public static class ContainerFactory namespace GameLogic
{ {
public static ContainerInfo CreateInfo(GameObject container,ShelfActor shelf,int shelfRow,int shelColumn,int shelfLayer) public static class ContainerFactory
{ {
var containerInfo = Activator.CreateInstance<ContainerInfo>(); public static ContainerInfo CreateInfo(GameObject container, ShelfActor shelf, int shelfRow, int shelColumn,
containerInfo.container = container; int shelfLayer)
containerInfo.shelf = shelf; {
containerInfo.shelfRow = shelfRow; var containerInfo = Activator.CreateInstance<ContainerInfo>();
containerInfo.shelColumn = shelColumn; containerInfo.container = container;
containerInfo.shelfLayer = shelfLayer; containerInfo.shelf = shelf;
return containerInfo; containerInfo.shelfRow = shelfRow;
containerInfo.shelColumn = shelColumn;
containerInfo.shelfLayer = shelfLayer;
return containerInfo;
}
} }
} }

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 38a9b33e115c0124bafea9389ff3ed38
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,18 @@
using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine;
namespace GameLogic
{
[CreateAssetMenu(fileName = "shelfConfig_", menuName = "数字孪生/ShelfConfig")]
public class So_ShelfConfig : SerializedScriptableObject
{
[LabelText("货物所属工具组"),ShowInInspector] public List<int> groups = new List<int>();
[LabelText("伸缩动画"),ShowInInspector]public Dictionary<int,ShelfRowAnimData> shelfAnimDatas = new Dictionary<int, ShelfRowAnimData>();
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 2dd819b1a17000747b98d533a289c5eb

View File

@ -334,4 +334,11 @@ AnimationClip:
m_EulerEditorCurves: [] m_EulerEditorCurves: []
m_HasGenericRootTransform: 0 m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0 m_HasMotionFloatCurves: 0
m_Events: [] m_Events:
- time: 1
functionName:
data:
objectReferenceParameter: {fileID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: da2e19a1c5f8b4e2ca7c1785ea338b2e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e6cc44d08e8de4cf7878638624e59a94
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 13170347bc506405f88d3a87bd0982b3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Demo.unity
uploadId: 752333

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 15054139658a5445689224c71f805b10
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Demo_URP.unity
uploadId: 752333

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4788bd8dfc445485781b23a4cf21188b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,34 @@
#if PRIME_TWEEN_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public abstract class Clickable : MonoBehaviour {
public virtual void OnClick() {}
}
public abstract class Animatable : Clickable {
public abstract Sequence Animate(bool toEndValue);
}
#if UNITY_EDITOR
[UnityEditor.CustomEditor(typeof(Clickable), true), UnityEditor.CanEditMultipleObjects]
internal class InspectorWithButton : UnityEditor.Editor {
GUIStyle boldButtonStyle;
public override void OnInspectorGUI() {
DrawDefaultInspector();
GUILayout.Space(8);
if (boldButtonStyle == null) {
boldButtonStyle = new GUIStyle(GUI.skin.button) { fontStyle = FontStyle.Bold };
}
if (GUILayout.Button("Play Animation", boldButtonStyle)) {
foreach (var t in targets) {
(t as Clickable).OnClick();
}
}
}
}
#endif
}
#endif

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: f631a276db10467c9860e2814855df25
timeCreated: 1695283968
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/Animatable.cs
uploadId: 752333

View File

@ -0,0 +1,29 @@
#if PRIME_TWEEN_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class Baggage : Animatable {
[SerializeField] Transform animationAnchor;
Sequence sequence;
public override void OnClick() {
PlayFlipAnimation();
}
public override Sequence Animate(bool _) {
return PlayFlipAnimation();
}
Sequence PlayFlipAnimation() {
if (!sequence.isAlive) {
const float jumpDuration = 0.3f;
sequence = Tween.LocalPositionZ(animationAnchor, 0.2f, jumpDuration)
.Chain(Tween.LocalEulerAngles(animationAnchor, Vector3.zero, new Vector3(0, 360, 0), 0.9f, Ease.InOutBack))
.Chain(Tween.LocalPositionZ(animationAnchor, 0, jumpDuration));
}
return sequence;
}
}
}
#endif

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 27b542649ab4a463aa343c437387783e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/Baggage.cs
uploadId: 752333

View File

@ -0,0 +1,57 @@
#if PRIME_TWEEN_INSTALLED && UNITY_UGUI_INSTALLED
using PrimeTween;
using UnityEngine;
using UnityEngine.EventSystems;
namespace PrimeTweenDemo {
public class CameraController : Clickable {
[SerializeField] HighlightedElementController highlightedElementController;
[SerializeField] SwipeTutorial swipeTutorial;
[SerializeField] Camera mainCamera;
[SerializeField, Range(0f, 1f)] float cameraShakeStrength = 0.4f;
float currentAngle;
Vector2? inputBeginPos;
bool isAnimating;
float curRotationSpeed;
void OnEnable() {
currentAngle = transform.localEulerAngles.y;
isAnimating = true;
Tween.Custom(this, 0, 5, 2, (target, val) => target.curRotationSpeed = val);
}
void Update() {
if (isAnimating) {
currentAngle += curRotationSpeed * Time.deltaTime;
transform.localEulerAngles = new Vector3(0f, currentAngle);
}
if (highlightedElementController.current == null && InputController.GetDown() && !EventSystem.current.IsPointerOverGameObject()) {
inputBeginPos = InputController.screenPosition;
}
if (InputController.GetUp()) {
inputBeginPos = null;
}
if (inputBeginPos.HasValue) {
var deltaMove = InputController.screenPosition - inputBeginPos.Value;
if (Mathf.Abs(deltaMove.x) / Screen.width > 0.05f) {
isAnimating = false;
inputBeginPos = null;
currentAngle += Mathf.Sign(deltaMove.x) * 45f;
Tween.LocalRotation(transform, new Vector3(0f, currentAngle), 1.5f, Ease.OutCubic);
swipeTutorial.Hide();
}
}
}
public override void OnClick() => ShakeCamera();
public void ShakeCamera() {
Shake();
}
internal Sequence Shake(float startDelay = 0) {
return Tween.ShakeCamera(mainCamera, cameraShakeStrength, startDelay: startDelay);
}
}
}
#endif

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 3f2f29997e7148b98e1d84f3de1011bc
timeCreated: 1682326446
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/CameraController.cs
uploadId: 752333

View File

@ -0,0 +1,57 @@
#if PRIME_TWEEN_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class CameraProjectionMatrixAnimation : Clickable {
[SerializeField] Camera mainCamera;
float interpolationFactor;
bool isOrthographic;
Tween tween;
public override void OnClick() => AnimateCameraProjection();
public void AnimateCameraProjection() {
isOrthographic = !isOrthographic;
tween.Stop();
tween = Tween.Custom(this, interpolationFactor, isOrthographic ? 1 : 0, 0.6f, ease: Ease.InOutSine, onValueChange: (target, t) => {
target.InterpolateProjectionMatrix(t);
})
.OnComplete(this, target => {
target.mainCamera.orthographic = target.isOrthographic;
target.mainCamera.ResetProjectionMatrix();
});
}
void InterpolateProjectionMatrix(float _interpolationFactor) {
interpolationFactor = _interpolationFactor;
uint width = (uint)Screen.width;
uint height = (uint)Screen.height;
#if UNITY_EDITOR && UNITY_2022_2_OR_NEWER
if (!Application.isPlaying) {
UnityEditor.PlayModeWindow.GetRenderingResolution(out width, out height);
}
#endif
float aspect = (float)width / height;
float orthographicSize = mainCamera.orthographicSize;
var perspectiveMatrix = Matrix4x4.Perspective(mainCamera.fieldOfView, aspect, mainCamera.nearClipPlane, mainCamera.farClipPlane);
var orthoMatrix = Matrix4x4.Ortho(-orthographicSize * aspect, orthographicSize * aspect, -orthographicSize, orthographicSize, mainCamera.nearClipPlane, mainCamera.farClipPlane);
Matrix4x4 projectionMatrix = default;
for (int i = 0; i < 16; i++) {
projectionMatrix[i] = Mathf.Lerp(perspectiveMatrix[i], orthoMatrix[i], _interpolationFactor);
}
mainCamera.projectionMatrix = projectionMatrix;
#if UNITY_EDITOR
if (!Application.isPlaying) {
UnityEditor.SceneView.RepaintAll();
}
#endif
}
public bool IsAnimating => tween.isAlive;
}
}
#endif

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 900e84e1426b4fc8a386a58aaee3b4ba
timeCreated: 1685260544
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/CameraProjectionMatrixAnimation.cs
uploadId: 752333

View File

@ -0,0 +1,132 @@
#if PRIME_TWEEN_INSTALLED && UNITY_UGUI_INSTALLED
using PrimeTween;
using UnityEngine.UI;
#endif
using UnityEngine;
namespace PrimeTweenDemo {
public class Demo : MonoBehaviour {
#if PRIME_TWEEN_INSTALLED && UNITY_UGUI_INSTALLED
[SerializeField] AnimateAllType animateAllType; enum AnimateAllType { Sequence, Async, Coroutine }
[SerializeField] Slider sequenceTimelineSlider;
[SerializeField] Text pausedLabel;
[SerializeField] Button animateAllPartsButton;
[SerializeField] TypewriterAnimatorExample typewriterAnimatorExample;
[SerializeField] Animatable[] animatables;
[SerializeField] Wheels wheels;
[SerializeField, Range(0.5f, 5f)] float timeScale = 1;
bool isAnimatingWithCoroutineOrAsync;
public Sequence animateAllSequence;
void Awake() {
PrimeTweenConfig.SetTweensCapacity(100);
}
void OnEnable() {
sequenceTimelineSlider.fillRect.gameObject.SetActive(false);
sequenceTimelineSlider.onValueChanged.AddListener(SequenceTimelineSliderChanged);
}
void OnDisable() => sequenceTimelineSlider.onValueChanged.RemoveListener(SequenceTimelineSliderChanged);
void SequenceTimelineSliderChanged(float sliderValue) {
if (!notifySliderChanged) {
return;
}
if (!animateAllSequence.isAlive) {
wheels.OnClick();
}
animateAllSequence.isPaused = true;
animateAllSequence.progressTotal = sliderValue;
}
bool notifySliderChanged = true;
void UpdateSlider() {
var isSliderVisible = animateAllType == AnimateAllType.Sequence && !isAnimatingWithCoroutineOrAsync;
sequenceTimelineSlider.gameObject.SetActive(isSliderVisible);
if (!isSliderVisible) {
return;
}
pausedLabel.gameObject.SetActive(animateAllSequence.isAlive && animateAllSequence.isPaused);
var isSequenceAlive = animateAllSequence.isAlive;
sequenceTimelineSlider.handleRect.gameObject.SetActive(isSequenceAlive);
if (isSequenceAlive) {
notifySliderChanged = false;
sequenceTimelineSlider.value = animateAllSequence.progressTotal; // Unity 2018 doesn't have SetValueWithoutNotify(), so use notifySliderChanged instead
notifySliderChanged = true;
}
}
void Update() {
Time.timeScale = timeScale;
animateAllPartsButton.GetComponent<Image>().enabled = !isAnimatingWithCoroutineOrAsync;
animateAllPartsButton.GetComponentInChildren<Text>().enabled = !isAnimatingWithCoroutineOrAsync;
UpdateSlider();
}
public void AnimateAll(bool toEndValue) {
if (isAnimatingWithCoroutineOrAsync) {
return;
}
switch (animateAllType) {
case AnimateAllType.Sequence:
AnimateAllSequence(toEndValue);
break;
case AnimateAllType.Async:
AnimateAllAsync(toEndValue);
break;
case AnimateAllType.Coroutine:
StartCoroutine(AnimateAllCoroutine(toEndValue));
break;
}
}
/// Tweens and sequences can be grouped with and chained to other tweens and sequences.
/// The advantage of using this method instead of <see cref="AnimateAllAsync"/> and <see cref="AnimateAllCoroutine"/> is the ability to stop/complete/pause the combined sequence.
/// Also, this method doesn't generate garbage related to starting a coroutine or awaiting an async method.
void AnimateAllSequence(bool toEndValue) {
if (animateAllSequence.isAlive) {
animateAllSequence.isPaused = !animateAllSequence.isPaused;
return;
}
animateAllSequence = Sequence.Create();
#if TEXT_MESH_PRO_INSTALLED
animateAllSequence.Group(typewriterAnimatorExample.Animate());
#endif
float delay = 0f;
foreach (var animatable in animatables) {
animateAllSequence.Insert(delay, animatable.Animate(toEndValue));
delay += 0.6f;
}
}
/// Tweens and sequences can be awaited in async methods.
async void AnimateAllAsync(bool toEndValue) {
isAnimatingWithCoroutineOrAsync = true;
foreach (var animatable in animatables) {
await animatable.Animate(toEndValue);
}
isAnimatingWithCoroutineOrAsync = false;
}
/// Tweens and sequences can also be used in coroutines with the help of ToYieldInstruction() method.
System.Collections.IEnumerator AnimateAllCoroutine(bool toEndValue) {
isAnimatingWithCoroutineOrAsync = true;
foreach (var animatable in animatables) {
yield return animatable.Animate(toEndValue).ToYieldInstruction();
}
isAnimatingWithCoroutineOrAsync = false;
}
#else // PRIME_TWEEN_INSTALLED
void Awake() {
Debug.LogError("Please install PrimeTween via 'Assets/Plugins/PrimeTween/PrimeTweenInstaller'.");
#if !UNITY_2019_1_OR_NEWER
Debug.LogError("And add the 'PRIME_TWEEN_INSTALLED' define to the 'Project Settings/Player/Scripting Define Symbols' to run the Demo in Unity 2018.");
#endif
}
#endif
}
}

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 945298e218f9841b08c8270c494cb200
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/Demo.cs
uploadId: 752333

View File

@ -0,0 +1,35 @@
#if PRIME_TWEEN_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class DirectionalLightController : MonoBehaviour {
[SerializeField] Light directionalLight;
[SerializeField] Camera mainCamera;
[SerializeField] Color startColor;
[SerializeField] Color endColor;
float angleX;
float angleY;
void OnEnable() {
// This overload is simpler, but allocates small amount of garbage because 'this' reference is captured in a closure.
// It ok to use it once in a while but for hot code paths consider using the overload that accepts 'target' as first parameter.
var xRotationSettings = new TweenSettings<float>(45, 10, 10, Ease.Linear, -1, CycleMode.Yoyo);
Tween.Custom(xRotationSettings, newX => angleX = newX);
// This overload is more verbose, but doesn't allocate garbage.
var yRotationSettings = new TweenSettings<float>(45, 405, 20, Ease.Linear, -1);
Tween.Custom(this, yRotationSettings, (target, newY) => target.angleY = newY);
var colorSettings = new TweenSettings<Color>(startColor, endColor, 10, Ease.InCirc, -1, CycleMode.Rewind);
Tween.LightColor(directionalLight, colorSettings);
Tween.CameraBackgroundColor(mainCamera, colorSettings);
Tween.Custom(colorSettings, color => RenderSettings.fogColor = color);
}
void Update() {
transform.localEulerAngles = new Vector3(angleX, angleY);
}
}
}
#endif

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: db622a6d0e0fa4b68852ef1a7fc60dba
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/DirectionalLightController.cs
uploadId: 752333

View File

@ -0,0 +1,29 @@
#if PRIME_TWEEN_INSTALLED && UNITY_UGUI_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class Door : Animatable {
[SerializeField] CameraController cameraController;
[SerializeField] Transform animationAnchor;
bool isClosed;
public override void OnClick() {
Animate(!isClosed);
}
public override Sequence Animate(bool _isClosed) {
if (isClosed == _isClosed) {
return Sequence.Create();
}
isClosed = _isClosed;
var rotationTween = Tween.LocalRotation(animationAnchor, _isClosed ? new Vector3(0, -90) : Vector3.zero, 0.7f, Ease.InOutElastic);
var sequence = Sequence.Create(rotationTween);
if (_isClosed) {
sequence.Group(cameraController.Shake(0.5f));
}
return sequence;
}
}
}
#endif

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 4efa7d4d94464bb0b3e6ea597eb13637
timeCreated: 1682159642
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/Door.cs
uploadId: 752333

View File

@ -0,0 +1,25 @@
#if PRIME_TWEEN_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class Headlights : Animatable {
[SerializeField] AnimationCurve ease;
[SerializeField] Light[] lights;
bool isOn;
public override void OnClick() {
Animate(!isOn);
}
public override Sequence Animate(bool _isOn) {
isOn = _isOn;
var sequence = Sequence.Create();
foreach (var _light in lights) {
sequence.Group(Tween.LightIntensity(_light, _isOn ? 0.7f : 0, 0.8f, ease));
}
return sequence;
}
}
}
#endif

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 7bc81275df8d244a1a7568f9443b5e93
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/Headlights.cs
uploadId: 752333

View File

@ -0,0 +1,17 @@
#if PRIME_TWEEN_INSTALLED
using UnityEngine;
namespace PrimeTweenDemo {
public class HighlightableElement : MonoBehaviour {
[SerializeField] public Transform highlightAnchor;
public MeshRenderer[] models { get; private set; }
void OnEnable() {
models = GetComponentsInChildren<MeshRenderer>();
foreach (var mr in models) {
_ = mr.material; // copy shared material
}
}
}
}
#endif

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 5fbd7d6a5982d440282a82998473a306
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/HighlightableElement.cs
uploadId: 752333

View File

@ -0,0 +1,67 @@
#if PRIME_TWEEN_INSTALLED
using JetBrains.Annotations;
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class HighlightedElementController : MonoBehaviour {
[SerializeField] Camera mainCamera;
[SerializeField] CameraProjectionMatrixAnimation cameraProjectionMatrixAnimation;
[CanBeNull] public HighlightableElement current { get; private set; }
void Awake() {
#if UNITY_2019_1_OR_NEWER && !PHYSICS_MODULE_INSTALLED
Debug.LogError("Please install the package needed for Physics.Raycast(): 'Package Manager/Packages/Built-in/Physics' (com.unity.modules.physics).");
#endif
}
void Update() {
if (cameraProjectionMatrixAnimation.IsAnimating) {
return;
}
if (InputController.touchSupported && !InputController.Get()) {
SetCurrentHighlighted(null);
return;
}
var ray = mainCamera.ScreenPointToRay(InputController.screenPosition);
var highlightableElement = RaycastHighlightableElement(ray);
SetCurrentHighlighted(highlightableElement);
if (current != null && InputController.GetDown()) {
current.GetComponent<Animatable>().OnClick();
}
}
[CanBeNull]
static HighlightableElement RaycastHighlightableElement(Ray ray) {
#if !UNITY_2019_1_OR_NEWER || PHYSICS_MODULE_INSTALLED
// If you're seeing a compilation error on the next line, please install the package needed for Physics.Raycast(): 'Package Manager/Packages/Built-in/Physics' (com.unity.modules.physics).
return Physics.Raycast(ray, out var hit) ? hit.collider.GetComponentInParent<HighlightableElement>() : null;
#else
return null;
#endif
}
void SetCurrentHighlighted([CanBeNull] HighlightableElement newHighlighted) {
if (newHighlighted != current) {
if (current != null) {
AnimateHighlightedElement(current, false);
}
current = newHighlighted;
if (newHighlighted != null) {
AnimateHighlightedElement(newHighlighted, true);
}
}
}
static readonly int emissionColorPropId = Shader.PropertyToID("_EmissionColor");
static void AnimateHighlightedElement([NotNull] HighlightableElement highlightable, bool isHighlighted) {
Tween.LocalPositionZ(highlightable.highlightAnchor, isHighlighted ? 0.08f : 0, 0.3f);
foreach (var model in highlightable.models) {
Tween.MaterialColor(model.material, emissionColorPropId, isHighlighted ? Color.white * 0.25f : Color.black, 0.2f, Ease.OutQuad);
}
}
}
}
#endif

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 9e831710f8fb47e4a09c640d573d1358
timeCreated: 1682327543
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/HighlightedElementController.cs
uploadId: 752333

View File

@ -0,0 +1,114 @@
using UnityEngine;
#if INPUT_SYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.EnhancedTouch;
using UnityEngine.InputSystem.UI;
using TouchPhase = UnityEngine.InputSystem.TouchPhase;
using Touch = UnityEngine.InputSystem.EnhancedTouch.Touch;
#endif
namespace PrimeTweenDemo {
public class InputController : MonoBehaviour {
void Awake() {
if (isNewInputSystemEnabled && !isLegacyInputManagerEnabled) {
gameObject.SetActive(false);
#if INPUT_SYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM
var inputModule = gameObject.AddComponent<InputSystemUIInputModule>();
inputModule.pointerBehavior = UIPointerBehavior.AllPointersAsIs;
EnhancedTouchSupport.Enable();
#endif
gameObject.SetActive(true);
} else {
#if UNITY_UGUI_INSTALLED
gameObject.AddComponent<UnityEngine.EventSystems.StandaloneInputModule>();
#endif
}
}
static bool isNewInputSystemEnabled {
get {
#if INPUT_SYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM
return true;
#else
return false;
#endif
}
}
static bool isLegacyInputManagerEnabled {
get {
#if ENABLE_LEGACY_INPUT_MANAGER
return true;
#else
return false;
#endif
}
}
public static bool touchSupported {
get {
#if INPUT_SYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM
if (isNewInputSystemEnabled) {
return Touchscreen.current != null;
}
#endif
return Input.touchSupported;
}
}
public static bool GetDown() {
#if INPUT_SYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM
if (Mouse.current != null) {
return Mouse.current.leftButton.wasPressedThisFrame;
}
if (isNewInputSystemEnabled) {
return Touch.activeTouches.Count > 0 && Touch.activeTouches[0].phase == TouchPhase.Began;
}
#endif
return Input.GetMouseButtonDown(0);
}
public static bool Get() {
#if INPUT_SYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM
if (isNewInputSystemEnabled) {
if (Mouse.current != null) {
return Mouse.current.leftButton.isPressed;
}
if (Touch.activeTouches.Count == 0) {
return false;
}
var phase = Touch.activeTouches[0].phase;
return phase == TouchPhase.Stationary || phase == TouchPhase.Moved;
}
#endif
return Input.GetMouseButtonDown(0);
}
public static bool GetUp() {
#if INPUT_SYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM
if (isNewInputSystemEnabled) {
if (Mouse.current != null) {
return Mouse.current.leftButton.wasReleasedThisFrame;
}
return Touch.activeTouches.Count > 0 && Touch.activeTouches[0].phase == TouchPhase.Ended;
}
#endif
return Input.GetMouseButtonUp(0);
}
public static Vector2 screenPosition {
get {
#if INPUT_SYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM
if (isNewInputSystemEnabled) {
if (Mouse.current != null) {
return Mouse.current.position.ReadValue();
}
var activeTouches = Touch.activeTouches;
return activeTouches.Count > 0 ? activeTouches[0].screenPosition : Vector2.zero;
}
#endif
return Input.mousePosition;
}
}
}
}

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: ea1502cb33ab4d4ca1fedbdde163c980
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/InputController.cs
uploadId: 752333

View File

@ -0,0 +1,23 @@
#if PRIME_TWEEN_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class JumpAnimation : Clickable {
[SerializeField] Transform target;
Sequence sequence;
public override void OnClick() => PlayAnimation();
public void PlayAnimation() {
if (!sequence.isAlive) {
const float jumpDuration = 0.3f;
sequence = Tween.Scale(target, new Vector3(1.1f, 0.8f, 1.1f), 0.15f, Ease.OutQuad, 2, CycleMode.Yoyo)
.Chain(Tween.LocalPositionY(target, 1, jumpDuration))
.Chain(Tween.LocalEulerAngles(target, Vector3.zero, new Vector3(0, 360), 1.5f, Ease.InOutBack))
.Chain(Tween.LocalPositionY(target, 0, jumpDuration));
}
}
}
}
#endif

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 453932c77a72487599d5103bcde610da
timeCreated: 1685366944
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/JumpAnimation.cs
uploadId: 752333

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8add66110a942479c9b69ed4eb7e777e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,67 @@
#if PRIME_TWEEN_INSTALLED && UNITY_UGUI_INSTALLED
#if UNITY_EDITOR && UNITY_2019_1_OR_NEWER
using UnityEngine.Profiling;
#endif
using PrimeTween;
using UnityEngine;
using UnityEngine.UI;
namespace PrimeTweenDemo {
/// <summary>
/// PrimeTween uses static delegates (lambdas with no external captures) to play animations.
/// The first time a particular animation is played, C# runtime caches the delegate for this animation, and the GC.Alloc is shown in Profiler.
/// Such allocations are not technically 'garbage' because they are not subject to garbage collection.
/// All subsequent calls will use the cached delegate and will never allocate again.
///
/// To replicate '0B' heap allocations shown in the promo video:
/// Disable the 'Project Settings/Editor/Enter Play Mode Settings/Reload Domain' setting.
/// Enable Profiler with Deep Profile.
/// Run the Demo and play all animations at least once. This will cache the aforementioned static delegates.
/// Restart the Demo scene and observe that PrimeTween doesn't allocate heap memory after static delegates warm-up.
/// </summary>
public class DebugInfo : MonoBehaviour {
#pragma warning disable 0414
[SerializeField] MeasureMemoryAllocations measureMemoryAllocations;
[SerializeField] Text tweensCountText;
[SerializeField] Text gcAllocText;
#pragma warning restore 0414
#if UNITY_EDITOR && UNITY_2019_1_OR_NEWER
long curTweensCount = -1;
int? curGCAlloc;
void Start() {
gcAllocText.text = string.Empty;
if (shouldDisable()) {
gameObject.SetActive(false);
}
if (Profiler.enabled && !UnityEditorInternal.ProfilerDriver.deepProfiling) {
Debug.LogWarning("Please enable 'Deep Profile' for more accurate memory allocation measurements.");
}
}
static bool shouldDisable() {
if (!Application.isEditor) {
return true;
}
if (UnityEditor.EditorApplication.isPaused) {
return false; // Profiler.enabled returns false if scene is started paused in Unity 2021.3.26
}
return !Profiler.enabled;
}
void Update() {
var newTweensCount = PrimeTweenManager.Instance.lastId;
if (curTweensCount != newTweensCount) {
curTweensCount = newTweensCount;
tweensCountText.text = $"Animations: {newTweensCount}";
}
var newGCAlloc = measureMemoryAllocations.gcAllocTotal;
if (newGCAlloc.HasValue && curGCAlloc != newGCAlloc.Value) {
curGCAlloc = newGCAlloc.Value;
gcAllocText.text = $"Heap allocations: {UnityEditor.EditorUtility.FormatBytes(newGCAlloc.Value)}";
}
}
#endif
}
}
#endif

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: c0ef97c778caf4b70aea23911ded98ab
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/MeasureAllocations/DebugInfo.cs
uploadId: 752333

View File

@ -0,0 +1,152 @@
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR && UNITY_2019_1_OR_NEWER
using System.Linq;
using UnityEditor;
using UnityEditor.Profiling;
using UnityEditorInternal;
using UnityEngine.Profiling;
#endif
namespace PrimeTweenDemo {
public class MeasureMemoryAllocations : MonoBehaviour {
#pragma warning disable 0414
[SerializeField] bool logAllocations;
[SerializeField] bool logFiltered;
[SerializeField] bool logIgnored;
[SerializeField] List<string> filterAllocations = new List<string>();
[SerializeField] List<string> ignoreAllocations = new List<string>();
#pragma warning restore 0414
#if UNITY_EDITOR && UNITY_2019_1_OR_NEWER
public int? gcAllocTotal { get; private set; }
readonly Stack<int> stack = new Stack<int>();
readonly List<int> childrenBuffer = new List<int>();
readonly List<int> fullIdPathBuffer = new List<int>();
readonly List<int[]> ignoredPaths = new List<int[]>();
readonly List<int[]> filteredPaths = new List<int[]>();
int lastProcessedFrame = -1;
void Awake() {
filterAllocations.Add("PrimeTween.Runtime");
filterAllocations.Add("PrimeTweenDemo");
}
void OnEnable() {
ProfilerDriver.ClearAllFrames();
}
void Update() {
if (!Profiler.enabled) {
return;
}
var startFrame = Mathf.Max(lastProcessedFrame + 1, ProfilerDriver.firstFrameIndex);
for (int i = startFrame; i <= ProfilerDriver.lastFrameIndex; i++) {
var gcAlloc = calcGCAllocInFrame(i);
if (!gcAlloc.HasValue) {
break;
}
lastProcessedFrame = i;
if (gcAllocTotal.HasValue) {
gcAllocTotal += gcAlloc.Value;
} else {
gcAllocTotal = gcAlloc.Value;
}
}
}
int? calcGCAllocInFrame(int frameIndex) {
int result = 0;
const HierarchyFrameDataView.ViewModes viewMode = HierarchyFrameDataView.ViewModes.MergeSamplesWithTheSameName | HierarchyFrameDataView.ViewModes.HideEditorOnlySamples;
using (var data = ProfilerDriver.GetHierarchyFrameDataView(frameIndex, 0, viewMode, HierarchyFrameDataView.columnGcMemory, false)) {
if (!data.valid) {
return null;
}
stack.Clear();
stack.Push(data.GetRootItemID());
while (stack.Count > 0) {
var current = stack.Pop();
UnityEngine.Assertions.Assert.IsTrue(data.HasItemChildren(current));
data.GetItemChildren(current, childrenBuffer);
foreach (var childId in childrenBuffer) {
var gcAlloc = (int)data.GetItemColumnDataAsSingle(childId, HierarchyFrameDataView.columnGcMemory);
if (gcAlloc == 0) {
continue;
}
if (data.HasItemChildren(childId)) {
stack.Push(childId);
continue;
}
data.GetItemMarkerIDPath(childId, fullIdPathBuffer);
if (ContainsSequence(ignoredPaths, fullIdPathBuffer)) {
continue;
}
if (!ContainsSequence(filteredPaths, fullIdPathBuffer)) {
if (shouldFilter()) {
filteredPaths.Add(fullIdPathBuffer.ToArray());
} else {
ignoredPaths.Add(fullIdPathBuffer.ToArray());
continue;
}
bool shouldFilter() {
if (filterAllocations.Count == 0) {
return true;
}
var itemPath = data.GetItemPath(childId);
foreach (var filter in filterAllocations) {
if (itemPath.Contains(filter) && !ignoreAllocations.Any(itemPath.Contains)) {
if (logFiltered) {
print($"FILTER {itemPath}");
}
return true;
}
}
if (logIgnored) {
print($"IGNORE {itemPath}");
}
return false;
}
}
if (logAllocations) {
print($"GC Alloc in frame {frameIndex}: {EditorUtility.FormatBytes(gcAlloc)}\n" +
$"Path: {data.GetItemPath(childId)}\n");
}
result += gcAlloc;
}
}
}
return result;
}
static bool ContainsSequence(List<int[]> arrays, List<int> list) {
foreach (var arr in arrays) {
if (SequenceEqual(arr, list)) {
return true;
}
}
return false;
// Unity 2019.4.40 doesn't support static local methods
// ReSharper disable once LocalFunctionCanBeMadeStatic
bool SequenceEqual(int[] arr, List<int> _list) {
if (arr.Length != _list.Count) {
return false;
}
for (var i = 0; i < arr.Length; i++) {
if (arr[i] != _list[i]) {
return false;
}
}
return true;
}
}
#else
void Awake() {
if (Application.isEditor) {
Debug.LogWarning($"{nameof(MeasureMemoryAllocations)} is only supported in Unity 2019.1 or newer.", this);
} else {
gameObject.SetActive(false);
}
}
#endif
}
}

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 6af581ca2a164600b2d47b0f7f7d5570
timeCreated: 1686221280
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/MeasureAllocations/MeasureMemoryAllocations.cs
uploadId: 752333

View File

@ -0,0 +1,27 @@
{
"name": "PrimeTween.Debug",
"rootNamespace": "",
"references": [
"PrimeTween.Runtime"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [
{
"name": "com.kyrylokuzyk.primetween",
"expression": "1.0.0",
"define": "PRIME_TWEEN_INSTALLED"
},
{
"name": "com.unity.ugui",
"expression": "1.0.0",
"define": "UNITY_UGUI_INSTALLED"
}
],
"noEngineReferences": false
}

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: bd26724a735bb4282b7fbdef4681eb5f
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/MeasureAllocations/PrimeTween.Debug.asmdef
uploadId: 752333

View File

@ -0,0 +1,49 @@
{
"name": "PrimeTween.Demo",
"rootNamespace": "",
"references": [
"PrimeTween.Runtime",
"Unity.TextMeshPro",
"Unity.InputSystem"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [
{
"name": "com.unity.modules.physics",
"expression": "1.0.0",
"define": "PHYSICS_MODULE_INSTALLED"
},
{
"name": "com.unity.ugui",
"expression": "1.0.0",
"define": "UNITY_UGUI_INSTALLED"
},
{
"name": "com.kyrylokuzyk.primetween",
"expression": "1.0.0",
"define": "PRIME_TWEEN_INSTALLED"
},
{
"name": "com.unity.textmeshpro",
"expression": "1.0.0",
"define": "TEXT_MESH_PRO_INSTALLED"
},
{
"name": "com.unity.inputsystem",
"expression": "1.0.0",
"define": "INPUT_SYSTEM_INSTALLED"
},
{
"name": "com.unity.ugui",
"expression": "2.0.0",
"define": "TEXT_MESH_PRO_INSTALLED"
}
],
"noEngineReferences": false
}

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 85ffa6ed6408b405d94d60bf1dce1057
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/PrimeTween.Demo.asmdef
uploadId: 752333

View File

@ -0,0 +1,29 @@
#if PRIME_TWEEN_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class Road : Animatable {
[SerializeField] MeshRenderer roadModel;
[SerializeField] AnimationCurve ease;
float currentSpeed;
void Awake() {
_ = roadModel.material; // copy shared material
}
public override Sequence Animate(bool isAnimating) {
var currentSpeedTween = Tween.Custom(this, currentSpeed, isAnimating ? 0.3f : 0, 1, (_this, val) => _this.currentSpeed = val);
var sequence = Sequence.Create(currentSpeedTween);
if (isAnimating) {
sequence.Group(Tween.LocalPositionY(transform, 0, -0.5f, 0.7f, ease));
}
return sequence;
}
void Update() {
roadModel.material.mainTextureOffset += new Vector2(-1f, 1f) * currentSpeed * Time.deltaTime;
}
}
}
#endif

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: a4e192d6601c4753961099a3db72b66f
timeCreated: 1682262719
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/Road.cs
uploadId: 752333

View File

@ -0,0 +1,34 @@
#if PRIME_TWEEN_INSTALLED && UNITY_UGUI_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class SlidingDoor : Animatable {
[SerializeField] Demo demo;
[SerializeField] Transform animationAnchor;
[SerializeField] Vector3 openedPos, midPos, closedPos;
bool isClosed;
Sequence sequence;
public override void OnClick() {
if (!demo.animateAllSequence.isAlive) {
Animate(!isClosed);
}
}
public override Sequence Animate(bool _isClosed) {
if (isClosed == _isClosed) {
return Sequence.Create();
}
isClosed = _isClosed;
if (sequence.isAlive) {
sequence.Stop();
}
var tweenSettings = new TweenSettings(0.4f, Ease.OutBack, endDelay: 0.1f);
sequence = Tween.LocalPosition(animationAnchor, midPos, tweenSettings)
.Chain(Tween.LocalPosition(animationAnchor, _isClosed ? closedPos : openedPos, tweenSettings));
return sequence;
}
}
}
#endif

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: c42977785d1b549d59c346556945e0c5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/SlidingDoor.cs
uploadId: 752333

View File

@ -0,0 +1,19 @@
#if PRIME_TWEEN_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class SqueezeAnimation : Clickable {
[SerializeField] Transform target;
Tween tween;
public override void OnClick() => PlayAnimation();
public void PlayAnimation() {
if (!tween.isAlive) {
tween = Tween.Scale(target, new Vector3(1.15f, 0.9f, 1.15f), 0.2f, Ease.OutSine, 2, CycleMode.Yoyo);
}
}
}
}
#endif

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 613ad9fe5121a4b02b556b6b16cad710
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/SqueezeAnimation.cs
uploadId: 752333

View File

@ -0,0 +1,25 @@
#if PRIME_TWEEN_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class SwipeTutorial : MonoBehaviour {
Tween tween;
void OnEnable() {
#if !UNITY_2019_1_OR_NEWER || UNITY_UGUI_INSTALLED
tween = Tween.Alpha(GetComponent<UnityEngine.UI.Text>(), 1, 0, 1, Ease.InOutSine, -1, CycleMode.Yoyo);
#else
Debug.LogError("Please install the package and re-open the Demo scene: 'Package Manager/Packages/Unity Registry/Unity UI' (com.unity.ugui).");
#endif
}
public void Hide() {
if (tween.isAlive) {
// Stop cycling the animation when it reaches the 'endValue' (0)
tween.SetRemainingCycles(true);
}
}
}
}
#endif

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: d20b7aac1e6a4f1dbdbe52c7ca1ad4b4
timeCreated: 1685344395
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/SwipeTutorial.cs
uploadId: 752333

View File

@ -0,0 +1,155 @@
#if PRIME_TWEEN_INSTALLED
#if TEXT_MESH_PRO_INSTALLED
using TMPro;
#endif
using JetBrains.Annotations;
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
[PublicAPI]
public class TypewriterAnimatorExample : MonoBehaviour {
enum AnimationType { Simple, WithPunctuations, ByWords }
[SerializeField] AnimationType animationType = AnimationType.WithPunctuations;
[SerializeField] float charsPerSecond = 40f;
[SerializeField] int pauseAfterPunctuation = 20;
#if TEXT_MESH_PRO_INSTALLED
TextMeshProUGUI text;
void Awake() {
text = gameObject.AddComponent<TextMeshProUGUI>();
text.maxVisibleCharacters = 0;
text.alignment = TextAlignmentOptions.TopLeft;
text.fontSize = 12;
text.color = Color.black * 0.8f;
text.text = "This text is <color=orange>animated</color> with <b>zero allocations</b>, see <i>'TypewriterAnimatorExample'</i> script for more details.\n\n" +
"PrimeTween rocks!";
}
public Tween Animate() {
if (!Application.isPlaying) {
// 'text' is created in Awake(), so this animation can't be played in Edit mode
PrimeTweenConfig.warnZeroDuration = false;
var emptyTween = Tween.Delay(0f);
PrimeTweenConfig.warnZeroDuration = true;
return emptyTween;
}
switch (animationType) {
case AnimationType.Simple:
return TypewriterAnimationSimple();
case AnimationType.WithPunctuations:
return TypewriterAnimationWithPunctuations();
case AnimationType.ByWords:
return TypewriterAnimationByWords();
default:
throw new System.Exception();
}
}
/// <summary>A simple typewriter animation that uses built-in <see cref="Tween.TextMaxVisibleCharacters()"/> animation method.</summary>
public Tween TypewriterAnimationSimple() {
text.ForceMeshUpdate();
int characterCount = text.textInfo.characterCount;
float duration = characterCount / charsPerSecond;
return Tween.TextMaxVisibleCharacters(text, 0, characterCount, duration, Ease.Linear);
}
#region TypewriterAnimationWithPunctuations
/// <summary>Typewriter animation which inserts pauses after punctuation marks.</summary>
public Tween TypewriterAnimationWithPunctuations() {
text.ForceMeshUpdate();
RemapWithPunctuations(text, int.MaxValue, out int remappedCount, out _);
float duration = remappedCount / charsPerSecond;
return Tween.Custom(this, 0f, remappedCount, duration, (t, x) => t.UpdateMaxVisibleCharsWithPunctuation(x), Ease.Linear);
}
void UpdateMaxVisibleCharsWithPunctuation(float progress) {
int remappedEndIndex = Mathf.RoundToInt(progress);
RemapWithPunctuations(text, remappedEndIndex, out _, out int visibleCharsCount);
if (text.maxVisibleCharacters != visibleCharsCount) {
text.maxVisibleCharacters = visibleCharsCount;
// play keyboard typing sound here if needed
}
}
void RemapWithPunctuations([NotNull] TMP_Text text, int remappedEndIndex, out int remappedCount, out int visibleCharsCount) {
remappedCount = 0;
visibleCharsCount = 0;
int count = text.textInfo.characterCount;
var characterInfos = text.textInfo.characterInfo;
for (int i = 0; i < count; i++) {
if (remappedCount >= remappedEndIndex) {
break;
}
remappedCount++;
visibleCharsCount++;
if (IsPunctuationChar(characterInfos[i].character)) {
int nextIndex = i + 1;
if (nextIndex != count && !IsPunctuationChar(characterInfos[nextIndex].character)) {
// add pause after the last subsequent punctuation character
remappedCount += Mathf.Max(0, pauseAfterPunctuation);
}
}
}
bool IsPunctuationChar(char c) {
return ".,:;!?".IndexOf(c) != -1;
}
}
#endregion
#region TypewriterAnimationByWords
/// <summary>Typewriter animation that shows text word by word.</summary>
public Tween TypewriterAnimationByWords() {
text.ForceMeshUpdate();
RemapWords(text, int.MaxValue, out int numWords, out _);
float duration = text.textInfo.characterCount / charsPerSecond;
return Tween.Custom(this, 0f, numWords, duration, (t, x) => t.UpdateVisibleWords(x), Ease.Linear);
}
void UpdateVisibleWords(float progress) {
int curWordIndex = Mathf.RoundToInt(progress);
RemapWords(text, curWordIndex, out _, out int visibleCharsCount);
if (text.maxVisibleCharacters != visibleCharsCount) {
text.maxVisibleCharacters = visibleCharsCount;
// play keyboard typing sound here if needed
}
}
static void RemapWords([NotNull] TMP_Text text, int remappedEndIndex, out int remappedCount, out int visibleCharsCount) {
visibleCharsCount = 0;
int count = text.textInfo.characterCount;
if (count == 0) {
remappedCount = 0;
return;
}
remappedCount = 1;
var characterInfos = text.textInfo.characterInfo;
for (int i = 0; i < count; i++) {
if (remappedCount >= remappedEndIndex) {
return;
}
remappedCount++;
if (IsWordSeparatorChar(characterInfos[i].character)) {
int nextIndex = i + 1;
if (nextIndex == count || !IsWordSeparatorChar(characterInfos[nextIndex].character)) {
remappedCount++;
visibleCharsCount = nextIndex;
}
}
}
visibleCharsCount = count;
bool IsWordSeparatorChar(char ch) {
return " \n".IndexOf(ch) != -1;
}
}
#endregion
#else
void Awake() {
Debug.LogWarning("Please install TextMeshPro 'com.unity.textmeshpro' to enable TypewriterAnimatorExample.", this);
}
#endif
}
}
#endif

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: f62b6e70f1114e5d867a36459e0352bf
timeCreated: 1702471534
AssetOrigin:
serializedVersion: 1
productId: 252960
packageName: "PrimeTween \xB7 High-Performance Animations and Sequences"
packageVersion: 1.3.1
assetPath: Assets/Plugins/PrimeTween/Demo/Scripts/TypewriterAnimatorExample.cs
uploadId: 752333

View File

@ -0,0 +1,38 @@
#if PRIME_TWEEN_INSTALLED && UNITY_UGUI_INSTALLED
using PrimeTween;
using UnityEngine;
namespace PrimeTweenDemo {
public class Wheels : Animatable {
[SerializeField] Demo demo;
[SerializeField] Transform[] wheels;
bool isAnimating;
Sequence sequence;
public override void OnClick() {
demo.AnimateAll(!isAnimating);
}
public override Sequence Animate(bool _isAnimating) {
isAnimating = _isAnimating;
// Spinning wheels is an infinite animation, and we should not return it as result of this method.
// Instead, we should wrap the SpinWheelsInfinitely() call inside the empty Sequence. This way, the SpinWheelsInfinitely() call can be grouped and chained with other tweens and sequences.
return Sequence.Create().ChainCallback(this, target => target.SpinWheelsInfinitely());
}
void SpinWheelsInfinitely() {
if (isAnimating) {
sequence.Complete();
sequence = Sequence.Create(-1);
foreach (var wheel in wheels) {
sequence.Group(Tween.LocalEulerAngles(wheel, Vector3.zero, new Vector3(360, 0), 1, Ease.Linear));
}
} else {
if (sequence.isAlive) {
sequence.SetRemainingCycles(0);
}
}
}
}
}
#endif

Some files were not shown because too many files have changed in this diff Show More