update CCK to 3.10, fixing unity 2021 crash :)
This commit is contained in:
parent
48a978fa2a
commit
d11e0fb3a9
492 changed files with 2165204 additions and 437687 deletions
|
@ -30,7 +30,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 0
|
||||
--- !u!1102 &-8575928686238360318
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -120,7 +120,7 @@ AnimatorTransition:
|
|||
serializedVersion: 1
|
||||
--- !u!1107 &-7905436042452569650
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -187,6 +187,19 @@ AnimatorStateTransition:
|
|||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!114 &-7535938694678565488
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: 1f35791917ec48529cb942ba2598bbd0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
localOnly: 1
|
||||
--- !u!1101 &-7383988135307241380
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
|
@ -376,7 +389,7 @@ BlendTree:
|
|||
m_BlendType: 0
|
||||
--- !u!1102 &-5848515141677793121
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -418,7 +431,7 @@ AnimatorTransition:
|
|||
serializedVersion: 1
|
||||
--- !u!1102 &-5762917097003648310
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -520,7 +533,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &-5212312055549061658
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -574,7 +587,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 0
|
||||
--- !u!1102 &-4176217532650029860
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -626,7 +639,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &-3776061064005231071
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -855,7 +868,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &-2971020236880558411
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -906,7 +919,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 0
|
||||
--- !u!1102 &-2744220122251862720
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -932,7 +945,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1102 &-2555942240256739116
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1054,7 +1067,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 0
|
||||
--- !u!1102 &-2040588628575872751
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1137,7 +1150,7 @@ AnimatorTransition:
|
|||
serializedVersion: 1
|
||||
--- !u!1102 &-1341855943854154521
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1165,7 +1178,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1107 &-1203605686602934362
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1268,7 +1281,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 0
|
||||
--- !u!1102 &-156729428921104499
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1295,7 +1308,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1102 &-154334537757261262
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1455,6 +1468,12 @@ AnimatorController:
|
|||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 9100000}
|
||||
- m_Name: Swimming
|
||||
m_Type: 4
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 9100000}
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Locomotion/Emotes
|
||||
|
@ -1506,8 +1525,8 @@ AnimatorController:
|
|||
m_Controller: {fileID: 9100000}
|
||||
--- !u!1102 &118869319419621521
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
m_ObjectHideFlags: 3
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
|
@ -1516,11 +1535,13 @@ AnimatorState:
|
|||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: -5678050809346966151}
|
||||
- {fileID: 3572767232398706147}
|
||||
- {fileID: -4066033034121896055}
|
||||
- {fileID: -3229292603251348601}
|
||||
- {fileID: 3946938254716387303}
|
||||
- {fileID: -3166696995532593217}
|
||||
m_StateMachineBehaviours: []
|
||||
m_StateMachineBehaviours:
|
||||
- {fileID: -7535938694678565488}
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
|
@ -1530,14 +1551,14 @@ AnimatorState:
|
|||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 8274211649648042503}
|
||||
m_Tag:
|
||||
m_Tag: Meow
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &233270830039035002
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1580,7 +1601,7 @@ AnimatorTransition:
|
|||
serializedVersion: 1
|
||||
--- !u!1102 &658084820387618928
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1675,7 +1696,7 @@ AnimatorTransition:
|
|||
serializedVersion: 1
|
||||
--- !u!1102 &2304538748422170667
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1701,7 +1722,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1102 &2602977761055071538
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1772,7 +1793,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 0
|
||||
--- !u!1107 &2767261357366282130
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1902,7 +1923,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &3276707479722396692
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1928,6 +1949,86 @@ AnimatorState:
|
|||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!206 &3459846366197424467
|
||||
BlendTree:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Blend Tree
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 9443328bbbc27d4419103ed80d187900, type: 2}
|
||||
m_Threshold: 0
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 8cffe7215c0af9844b722e669686a1a6, type: 2}
|
||||
m_Threshold: 0.25
|
||||
m_Position: {x: 0, y: 1}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: ef045d2be395dc44ab7528bf08f37175, type: 2}
|
||||
m_Threshold: 0.5
|
||||
m_Position: {x: 0, y: -1}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: e2eff4c689493704ca692934da7e2ca8, type: 2}
|
||||
m_Threshold: 0.75
|
||||
m_Position: {x: 1, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: c7250af75e246de4496f44e795f27879, type: 2}
|
||||
m_Threshold: 1
|
||||
m_Position: {x: -1, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
m_BlendParameter: MovementX
|
||||
m_BlendParameterY: MovementY
|
||||
m_MinThreshold: 0
|
||||
m_MaxThreshold: 1
|
||||
m_UseAutomaticThresholds: 1
|
||||
m_NormalizedBlendValues: 0
|
||||
m_BlendType: 2
|
||||
--- !u!1101 &3572767232398706147
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name:
|
||||
m_Conditions:
|
||||
- m_ConditionMode: 1
|
||||
m_ConditionEvent: Swimming
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: 5012013125621388658}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0.25
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0.9160632
|
||||
m_HasExitTime: 0
|
||||
m_HasFixedDuration: 1
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1101 &3946938254716387303
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
|
@ -1955,7 +2056,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &3994638550199382609
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -1982,7 +2083,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1102 &4271106711531402262
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2008,7 +2109,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1102 &4456696623592799809
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2076,6 +2177,33 @@ AnimatorStateTransition:
|
|||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &5012013125621388658
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Swimming
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: 6540986091921151125}
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 20600000, guid: e515756f6fe01514ca3d7b4199f2550f, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1101 &5126567008601290482
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
|
@ -2100,7 +2228,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &5223277037249214187
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2153,7 +2281,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &5438168600987299438
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2179,7 +2307,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1102 &5442494540355277550
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2309,7 +2437,7 @@ BlendTree:
|
|||
m_BlendType: 0
|
||||
--- !u!1107 &5867070248606979536
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2340,6 +2468,9 @@ AnimatorStateMachine:
|
|||
- serializedVersion: 1
|
||||
m_State: {fileID: -2040588628575872751}
|
||||
m_Position: {x: 300, y: -100, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 5012013125621388658}
|
||||
m_Position: {x: 600, y: 200, z: 0}
|
||||
m_ChildStateMachines:
|
||||
- serializedVersion: 1
|
||||
m_StateMachine: {fileID: 2767261357366282130}
|
||||
|
@ -2382,9 +2513,34 @@ AnimatorStateTransition:
|
|||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 0
|
||||
--- !u!1101 &6540986091921151125
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name:
|
||||
m_Conditions:
|
||||
- m_ConditionMode: 2
|
||||
m_ConditionEvent: Swimming
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: 118869319419621521}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0.25
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0.75
|
||||
m_HasExitTime: 0
|
||||
m_HasFixedDuration: 1
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &6865703643883630721
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2410,7 +2566,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1102 &7219575405050605370
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2436,7 +2592,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1102 &7224059104922430493
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2464,7 +2620,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!1102 &7237957086147707558
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2556,7 +2712,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &8150364249973559019
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2582,7 +2738,7 @@ AnimatorState:
|
|||
m_TimeParameter:
|
||||
--- !u!206 &8274211649648042503
|
||||
BlendTree:
|
||||
m_ObjectHideFlags: 3
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
|
@ -2750,7 +2906,7 @@ AnimatorTransition:
|
|||
serializedVersion: 1
|
||||
--- !u!1107 &8638921101301456094
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
@ -2822,7 +2978,7 @@ AnimatorStateTransition:
|
|||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &9047566740659613346
|
||||
AnimatorState:
|
||||
serializedVersion: 5
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
50908
Assets/ABI.CCK/Animations/Legacy/Emote1_Legacy.anim
Executable file
50908
Assets/ABI.CCK/Animations/Legacy/Emote1_Legacy.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Legacy/Emote1_Legacy.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Legacy/Emote1_Legacy.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ac64d31da463e8c45a3637dec9d88b75
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
23764
Assets/ABI.CCK/Animations/Legacy/Emote2_Legacy.anim
Executable file
23764
Assets/ABI.CCK/Animations/Legacy/Emote2_Legacy.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Legacy/Emote2_Legacy.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Legacy/Emote2_Legacy.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b41e727fdda450847a7bd604e26f05ed
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
130481
Assets/ABI.CCK/Animations/Legacy/Emote3_Legacy.anim
Executable file
130481
Assets/ABI.CCK/Animations/Legacy/Emote3_Legacy.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Legacy/Emote3_Legacy.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Legacy/Emote3_Legacy.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1169f6eb555b9f444b752fd9f6e0c0c4
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
107351
Assets/ABI.CCK/Animations/Legacy/Emote4_Legacy.anim
Executable file
107351
Assets/ABI.CCK/Animations/Legacy/Emote4_Legacy.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Legacy/Emote4_Legacy.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Legacy/Emote4_Legacy.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 85cb3c8a43a51034395ad0b3b72c93bd
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
45125
Assets/ABI.CCK/Animations/Legacy/Emote5_Legacy.anim
Executable file
45125
Assets/ABI.CCK/Animations/Legacy/Emote5_Legacy.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Legacy/Emote5_Legacy.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Legacy/Emote5_Legacy.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4626925fdd949d94c8cb017a4c4b9714
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
63737
Assets/ABI.CCK/Animations/Legacy/Emote6_Legacy.anim
Executable file
63737
Assets/ABI.CCK/Animations/Legacy/Emote6_Legacy.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Legacy/Emote6_Legacy.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Legacy/Emote6_Legacy.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 91877201d94a38048a1a6a9d15503077
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
29848
Assets/ABI.CCK/Animations/Legacy/Emote7_Legacy.anim
Executable file
29848
Assets/ABI.CCK/Animations/Legacy/Emote7_Legacy.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Legacy/Emote7_Legacy.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Legacy/Emote7_Legacy.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0d1ff7954da93814bacbe18a6307a838
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
199655
Assets/ABI.CCK/Animations/Legacy/Emote8_Legacy.anim
Executable file
199655
Assets/ABI.CCK/Animations/Legacy/Emote8_Legacy.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Legacy/Emote8_Legacy.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Legacy/Emote8_Legacy.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8b7afbaccc6d45f408572bde752fb716
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8684
Assets/ABI.CCK/Animations/Legacy/LocCrouchIdle_Legacy.anim
Executable file
8684
Assets/ABI.CCK/Animations/Legacy/LocCrouchIdle_Legacy.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Legacy/LocCrouchIdle_Legacy.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Legacy/LocCrouchIdle_Legacy.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5fda0726fe0b0fe48b9323b47a672b1b
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load diff
567053
Assets/ABI.CCK/Animations/LocSwimmingBackward.anim
Executable file
567053
Assets/ABI.CCK/Animations/LocSwimmingBackward.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/LocSwimmingBackward.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/LocSwimmingBackward.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ef045d2be395dc44ab7528bf08f37175
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
128951
Assets/ABI.CCK/Animations/LocSwimmingForward.anim
Executable file
128951
Assets/ABI.CCK/Animations/LocSwimmingForward.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/LocSwimmingForward.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/LocSwimmingForward.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8cffe7215c0af9844b722e669686a1a6
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
58697
Assets/ABI.CCK/Animations/LocSwimmingIdle.anim
Executable file
58697
Assets/ABI.CCK/Animations/LocSwimmingIdle.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/LocSwimmingIdle.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/LocSwimmingIdle.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9443328bbbc27d4419103ed80d187900
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
74537
Assets/ABI.CCK/Animations/LocSwimmingStrafeLeft.anim
Executable file
74537
Assets/ABI.CCK/Animations/LocSwimmingStrafeLeft.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/LocSwimmingStrafeLeft.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/LocSwimmingStrafeLeft.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c7250af75e246de4496f44e795f27879
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
74537
Assets/ABI.CCK/Animations/LocSwimmingStrafeRight.anim
Executable file
74537
Assets/ABI.CCK/Animations/LocSwimmingStrafeRight.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/LocSwimmingStrafeRight.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/LocSwimmingStrafeRight.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e2eff4c689493704ca692934da7e2ca8
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Assets/ABI.CCK/Animations/Swimming.meta
Executable file
8
Assets/ABI.CCK/Animations/Swimming.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c67e70d6b74adc84c8571e63545f2857
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
35585
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Backward.anim
Executable file
35585
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Backward.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Backward.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Backward.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2ce7de4873aefd54a949c4faabfcd8a0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
42533
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_BackwardAlt.anim
Executable file
42533
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_BackwardAlt.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_BackwardAlt.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_BackwardAlt.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a9fa2a16f779be049ae0a06d493e6ce7
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
34055
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Forward.anim
Executable file
34055
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Forward.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Forward.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Forward.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 344665d8c78a94d40a35e231a5459128
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
34001
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_ForwardAlt.anim
Executable file
34001
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_ForwardAlt.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_ForwardAlt.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_ForwardAlt.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: db8de2d0eda23614a84d4949c832dbe4
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
39239
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_ForwardPaddle.anim
Executable file
39239
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_ForwardPaddle.anim
Executable file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: efb214a0b138b444eaaf88143c430556
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
34577
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_ForwardPaddleAlt.anim
Executable file
34577
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_ForwardPaddleAlt.anim
Executable file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5f1d7c7970b33d540bc01533807775de
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
40400
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Idle.anim
Executable file
40400
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Idle.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Idle.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_Idle.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: debb7e0b92d911d41a79009885df927d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36098
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_IdleAlt.anim
Executable file
36098
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_IdleAlt.anim
Executable file
File diff suppressed because it is too large
Load diff
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_IdleAlt.anim.meta
Executable file
8
Assets/ABI.CCK/Animations/Swimming/LocSwim_Surface_IdleAlt.anim.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 90995ac9d7280ea4fae3bf7df5fdc146
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
73
Assets/ABI.CCK/Animations/Swimming/LocSwimmingTree.asset
Executable file
73
Assets/ABI.CCK/Animations/Swimming/LocSwimmingTree.asset
Executable file
|
@ -0,0 +1,73 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!206 &20600000
|
||||
BlendTree:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: LocSwimmingTree
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 344665d8c78a94d40a35e231a5459128, type: 2}
|
||||
m_Threshold: 0.049019612
|
||||
m_Position: {x: 0, y: 1}
|
||||
m_TimeScale: 2
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementZ
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: efb214a0b138b444eaaf88143c430556, type: 2}
|
||||
m_Threshold: 0.05294118
|
||||
m_Position: {x: 0, y: 0.5}
|
||||
m_TimeScale: 3
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: debb7e0b92d911d41a79009885df927d, type: 2}
|
||||
m_Threshold: 0.056862753
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementZ
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 2ce7de4873aefd54a949c4faabfcd8a0, type: 2}
|
||||
m_Threshold: 0.06078432
|
||||
m_Position: {x: 0, y: -1}
|
||||
m_TimeScale: 3
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: ef045d2be395dc44ab7528bf08f37175, type: 2}
|
||||
m_Threshold: 0.06470589
|
||||
m_Position: {x: 0, y: -0.5}
|
||||
m_TimeScale: -1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: c7250af75e246de4496f44e795f27879, type: 2}
|
||||
m_Threshold: 0.06862746
|
||||
m_Position: {x: -1, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: e2eff4c689493704ca692934da7e2ca8, type: 2}
|
||||
m_Threshold: 0.07254903
|
||||
m_Position: {x: 1, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: MovementX
|
||||
m_Mirror: 0
|
||||
m_BlendParameter: MovementX
|
||||
m_BlendParameterY: MovementY
|
||||
m_MinThreshold: 0.049019612
|
||||
m_MaxThreshold: 0.07254903
|
||||
m_UseAutomaticThresholds: 1
|
||||
m_NormalizedBlendValues: 0
|
||||
m_BlendType: 2
|
8
Assets/ABI.CCK/Animations/Swimming/LocSwimmingTree.asset.meta
Executable file
8
Assets/ABI.CCK/Animations/Swimming/LocSwimmingTree.asset.meta
Executable file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e515756f6fe01514ca3d7b4199f2550f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 20600000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -3,11 +3,14 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class AnimatorDriver : StateMachineBehaviour
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class AnimatorDriver : StateMachineBehaviour, ICCK_Component
|
||||
{
|
||||
public List<AnimatorDriverTask> EnterTasks = new List<AnimatorDriverTask>();
|
||||
public List<AnimatorDriverTask> ExitTasks = new List<AnimatorDriverTask>();
|
||||
|
||||
public bool localOnly = false;
|
||||
|
||||
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
|
||||
{
|
||||
foreach (var task in EnterTasks)
|
||||
|
@ -124,10 +127,10 @@ namespace ABI.CCK.Components
|
|||
valB = bValue;
|
||||
break;
|
||||
case SourceType.Random:
|
||||
valB = Random.Range(bValue, aMax);
|
||||
valB = Random.Range(bValue, bMax);
|
||||
break;
|
||||
case SourceType.Parameter:
|
||||
switch (aParamType)
|
||||
switch (bParamType)
|
||||
{
|
||||
default:
|
||||
valB = 0f;
|
||||
|
@ -201,7 +204,7 @@ namespace ABI.CCK.Components
|
|||
animator.SetFloat(targetName, res);
|
||||
break;
|
||||
case ParameterType.Int:
|
||||
animator.SetInteger(targetName, (int) res);
|
||||
animator.SetInteger(targetName, Mathf.RoundToInt(res));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
126
Assets/ABI.CCK/Components/BodyControl.cs
Executable file
126
Assets/ABI.CCK/Components/BodyControl.cs
Executable file
|
@ -0,0 +1,126 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class BodyControl : StateMachineBehaviour, ICCK_Component
|
||||
{
|
||||
#region UnityEvents
|
||||
|
||||
// Events for third party components to hook into
|
||||
public static readonly UnityEvent<Animator, BodyControl> OnInitialized = new();
|
||||
public static readonly UnityEvent<Animator, BodyControlTask> OnExecuteEnterTask = new();
|
||||
public static readonly UnityEvent<Animator, BodyControlTask> OnExecuteExitTask = new();
|
||||
|
||||
#endregion
|
||||
|
||||
public List<BodyControlTask> EnterTasks = new();
|
||||
public List<BodyControlTask> ExitTasks = new();
|
||||
|
||||
private bool _initialized;
|
||||
|
||||
#region Unity Events
|
||||
|
||||
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
|
||||
{
|
||||
if (!_initialized) Initialize(animator);
|
||||
foreach (BodyControlTask task in EnterTasks)
|
||||
{
|
||||
task.Execute(animator);
|
||||
OnExecuteEnterTask.Invoke(animator, task);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
|
||||
{
|
||||
if (!_initialized) Initialize(animator);
|
||||
foreach (BodyControlTask task in ExitTasks)
|
||||
{
|
||||
task.Execute(animator);
|
||||
OnExecuteExitTask.Invoke(animator, task);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private void Initialize(Animator animator)
|
||||
{
|
||||
_initialized = true;
|
||||
OnInitialized.Invoke(animator, this);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Editor Methods
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
var seenTargets = new HashSet<BodyControlTask.BodyMask>();
|
||||
|
||||
for (int i = EnterTasks.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (!seenTargets.Add(EnterTasks[i].target))
|
||||
EnterTasks.RemoveAt(i);
|
||||
}
|
||||
seenTargets.Clear();
|
||||
|
||||
for (int i = ExitTasks.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (!seenTargets.Add(ExitTasks[i].target))
|
||||
ExitTasks.RemoveAt(i);
|
||||
}
|
||||
seenTargets.Clear();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class BodyControlTask
|
||||
{
|
||||
public enum BodyMask
|
||||
{
|
||||
Head,
|
||||
Pelvis,
|
||||
LeftArm,
|
||||
RightArm,
|
||||
LeftLeg,
|
||||
RightLeg,
|
||||
Locomotion,
|
||||
// TODO: Add FingerTracking masks when GS is ready
|
||||
}
|
||||
|
||||
public BodyMask target = BodyMask.Head;
|
||||
[Range(0f, 1f)] public float targetWeight = 1f;
|
||||
public float transitionDuration = 0f;
|
||||
|
||||
// Type
|
||||
public bool isBlend = false;
|
||||
|
||||
public void Execute(Animator animator)
|
||||
{
|
||||
// switch (target)
|
||||
// {
|
||||
// case BodyMask.Head:
|
||||
// break;
|
||||
// case BodyMask.Pelvis:
|
||||
// break;
|
||||
// case BodyMask.LeftArm:
|
||||
// break;
|
||||
// case BodyMask.RightArm:
|
||||
// break;
|
||||
// case BodyMask.LeftLeg:
|
||||
// break;
|
||||
// case BodyMask.RightLeg:
|
||||
// break;
|
||||
// case BodyMask.Locomotion:
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
11
Assets/ABI.CCK/Components/BodyControl.cs.meta
Executable file
11
Assets/ABI.CCK/Components/BodyControl.cs.meta
Executable file
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 28af9fcbea0c32d4baddcf00cc581d7f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {fileID: 2800000, guid: 8d4eaf52fbae23548874e96ac0d52276, type: 3}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -2,12 +2,13 @@
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRAction : MonoBehaviour
|
||||
[AddComponentMenu("")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class CVRAction : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
[Header("Meta")]
|
||||
public string actionName;
|
||||
[Header("Objects")]
|
||||
public GameObject[] actionObjects;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,20 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
[AddComponentMenu("")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/pointer/")]
|
||||
public class CVRAdvancedAvatarSettingsPointer : CVRPointer
|
||||
{
|
||||
private void OnDrawGizmos()
|
||||
{
|
||||
if (isActiveAndEnabled)
|
||||
{
|
||||
Gizmos.color = Color.cyan;
|
||||
Matrix4x4 rotationMatrix = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one);
|
||||
Gizmos.matrix = rotationMatrix;
|
||||
Gizmos.DrawSphere(Vector3.zero, 0.015f);
|
||||
}
|
||||
if (!isActiveAndEnabled)
|
||||
return;
|
||||
|
||||
Gizmos.color = Color.cyan;
|
||||
Matrix4x4 rotationMatrix = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one);
|
||||
Gizmos.matrix = rotationMatrix;
|
||||
Gizmos.DrawSphere(Vector3.zero, 0.015f);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,28 +1,29 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRAdvancedAvatarSettingsTrigger : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Advanced Avatar Trigger")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/aas-trigger/")]
|
||||
[DisallowMultipleComponent]
|
||||
public class CVRAdvancedAvatarSettingsTrigger : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public Vector3 areaSize = new Vector3(0.05f, 0.05f, 0.05f);
|
||||
public Vector3 areaOffset = Vector3.zero;
|
||||
public string settingName;
|
||||
public float settingValue = 0;
|
||||
public float settingValue;
|
||||
|
||||
public bool useAdvancedTrigger = false;
|
||||
public bool useAdvancedTrigger;
|
||||
public bool isLocalInteractable = true;
|
||||
public bool isNetworkInteractable = true;
|
||||
[SerializeField]
|
||||
public List<CVRPointer> allowedPointer = new List<CVRPointer>();
|
||||
public bool allowParticleInteraction;
|
||||
|
||||
public string[] allowedTypes = new string[0];
|
||||
public bool allowParticleInteraction = false;
|
||||
[SerializeField] public List<CVRPointer> allowedPointer = new List<CVRPointer>();
|
||||
public string[] allowedTypes = Array.Empty<string>();
|
||||
|
||||
public List<CVRAdvancedAvatarSettingsTriggerTask> enterTasks = new List<CVRAdvancedAvatarSettingsTriggerTask>();
|
||||
public List<CVRAdvancedAvatarSettingsTriggerTask> exitTasks = new List<CVRAdvancedAvatarSettingsTriggerTask>();
|
||||
|
||||
public List<CVRAdvancedAvatarSettingsTriggerTaskStay> stayTasks = new List<CVRAdvancedAvatarSettingsTriggerTaskStay>();
|
||||
|
||||
public enum SampleDirection
|
||||
|
@ -39,156 +40,171 @@ namespace ABI.CCK.Components
|
|||
|
||||
public void Trigger()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void EnterTrigger()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void ExitTrigger()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void StayTrigger(float percent = 0f)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
if (isActiveAndEnabled)
|
||||
if (!isActiveAndEnabled)
|
||||
return;
|
||||
|
||||
Gizmos.color = Color.cyan;
|
||||
Matrix4x4 rotationMatrix = Matrix4x4.TRS(transform.position, transform.rotation, transform.lossyScale);
|
||||
Gizmos.matrix = rotationMatrix;
|
||||
|
||||
Collider collider = gameObject.GetComponent<Collider>();
|
||||
if (collider == null)
|
||||
{
|
||||
Gizmos.color = Color.cyan;
|
||||
Matrix4x4 rotationMatrix = Matrix4x4.TRS(transform.position, transform.rotation, transform.lossyScale);
|
||||
Gizmos.matrix = rotationMatrix;
|
||||
Gizmos.DrawCube(areaOffset, areaSize);
|
||||
|
||||
Vector3 bounds = new Vector3(areaSize.x * 0.5f, areaSize.y * 0.5f, areaSize.z * 0.5f);
|
||||
|
||||
if (stayTasks.Count > 0)
|
||||
if (OnlyHasDistanceTask())
|
||||
{
|
||||
Gizmos.DrawWireCube(areaOffset, areaSize);
|
||||
Gizmos.DrawSphere(Vector3.zero, areaSize.x);
|
||||
Gizmos.DrawWireSphere(Vector3.zero, areaSize.x);
|
||||
}
|
||||
else
|
||||
{
|
||||
Gizmos.DrawCube(areaOffset, areaSize);
|
||||
}
|
||||
}
|
||||
|
||||
switch (sampleDirection)
|
||||
{
|
||||
case SampleDirection.XPositive:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.XNegative:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.YPositive:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.YNegative:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, -bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, -bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, -bounds.y, 0f) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, -bounds.y, 0f) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.ZPositive:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.ZNegative:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, -bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, -bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, -bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, -bounds.z) + areaOffset
|
||||
);
|
||||
break;
|
||||
}
|
||||
Vector3 bounds = new Vector3(areaSize.x * 0.5f, areaSize.y * 0.5f, areaSize.z * 0.5f);
|
||||
|
||||
if (stayTasks.Count > 0 && !OnlyHasDistanceTask())
|
||||
{
|
||||
Gizmos.DrawWireCube(areaOffset, areaSize);
|
||||
|
||||
switch (sampleDirection)
|
||||
{
|
||||
case SampleDirection.XPositive:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.XNegative:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.YPositive:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, bounds.y, 0f) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.YNegative:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, -bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, -bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, -bounds.y, 0f) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, -bounds.y, 0f) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.ZPositive:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, -bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, bounds.z) + areaOffset
|
||||
);
|
||||
break;
|
||||
case SampleDirection.ZNegative:
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, -bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(0f, bounds.y, -bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, -bounds.z) + areaOffset
|
||||
);
|
||||
Gizmos.DrawLine(
|
||||
new Vector3(-bounds.x, -bounds.y, bounds.z) + areaOffset,
|
||||
new Vector3(-bounds.x, 0f, -bounds.z) + areaOffset
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool OnlyHasDistanceTask()
|
||||
{
|
||||
return enterTasks.Count == 0 && exitTasks.Count == 0 && stayTasks.Count > 0 && stayTasks.FindAll(x =>
|
||||
x.updateMethod != CVRAdvancedAvatarSettingsTriggerTaskStay.UpdateMethod.SetFromDistance).Count == 0;
|
||||
}
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
[Serializable]
|
||||
public class CVRAdvancedAvatarSettingsTriggerTask
|
||||
{
|
||||
public string settingName;
|
||||
|
@ -204,10 +220,10 @@ namespace ABI.CCK.Components
|
|||
Toggle = 4
|
||||
}
|
||||
|
||||
public CVRAdvancedAvatarSettingsTriggerTask.UpdateMethod updateMethod = UpdateMethod.Override;
|
||||
public UpdateMethod updateMethod = UpdateMethod.Override;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
[Serializable]
|
||||
public class CVRAdvancedAvatarSettingsTriggerTaskStay
|
||||
{
|
||||
public string settingName;
|
||||
|
@ -219,8 +235,9 @@ namespace ABI.CCK.Components
|
|||
SetFromPosition = 1,
|
||||
Add = 2,
|
||||
Subtract = 3,
|
||||
SetFromDistance = 4
|
||||
}
|
||||
|
||||
public CVRAdvancedAvatarSettingsTriggerTaskStay.UpdateMethod updateMethod = UpdateMethod.SetFromPosition;
|
||||
public UpdateMethod updateMethod = UpdateMethod.SetFromPosition;
|
||||
}
|
||||
}
|
|
@ -1,26 +1,15 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRAdvancedAvatarSettingsTriggerHelper : MonoBehaviour
|
||||
[AddComponentMenu("")] // hidden from the Add Component menu
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/aas-trigger-helper/")]
|
||||
public class CVRAdvancedAvatarSettingsTriggerHelper : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public List<CVRAdvancedAvatarSettingsTrigger> triggers = new List<CVRAdvancedAvatarSettingsTrigger>();
|
||||
|
||||
public void onEnter(int i)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void onExit(int i)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void onStay(int i)
|
||||
{
|
||||
|
||||
}
|
||||
//public List<CVRAdvancedAvatarSettingsTrigger> triggers = new List<CVRAdvancedAvatarSettingsTrigger>();
|
||||
// public void onEnter(int i) { }
|
||||
// public void onExit(int i) { }
|
||||
// public void onStay(int i) { }
|
||||
}
|
||||
}
|
|
@ -1,9 +1,12 @@
|
|||
using System.Collections.Generic;
|
||||
using ABI.CCK.Scripts;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRAnimatorDriver : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Animator Driver")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/animator-driver/")]
|
||||
public class CVRAnimatorDriver : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public float animatorParameter01;
|
||||
public float animatorParameter02;
|
||||
|
@ -22,25 +25,22 @@ namespace ABI.CCK.Components
|
|||
public float animatorParameter15;
|
||||
public float animatorParameter16;
|
||||
|
||||
[HideInInspector]
|
||||
public List<Animator> animators = new List<Animator>();
|
||||
[HideInInspector]
|
||||
public List<string> animatorParameters = new List<string>();
|
||||
[HideInInspector]
|
||||
public List<int> animatorParameterType = new List<int>();
|
||||
public List<Animator> animators = new();
|
||||
public List<string> animatorParameters = new();
|
||||
public List<int> animatorParameterType = new(); // why do we store these? we could cache on start
|
||||
|
||||
private void OnDidApplyAnimationProperties()
|
||||
{
|
||||
if (animators.Count >= 1) ApplyAnimatorChange(animators[ 0], animatorParameters[ 0], animatorParameterType[ 0], animatorParameter01);
|
||||
if (animators.Count >= 2) ApplyAnimatorChange(animators[ 1], animatorParameters[ 1], animatorParameterType[ 1], animatorParameter02);
|
||||
if (animators.Count >= 3) ApplyAnimatorChange(animators[ 2], animatorParameters[ 2], animatorParameterType[ 2], animatorParameter03);
|
||||
if (animators.Count >= 4) ApplyAnimatorChange(animators[ 3], animatorParameters[ 3], animatorParameterType[ 3], animatorParameter04);
|
||||
if (animators.Count >= 5) ApplyAnimatorChange(animators[ 4], animatorParameters[ 4], animatorParameterType[ 4], animatorParameter05);
|
||||
if (animators.Count >= 6) ApplyAnimatorChange(animators[ 5], animatorParameters[ 5], animatorParameterType[ 5], animatorParameter06);
|
||||
if (animators.Count >= 7) ApplyAnimatorChange(animators[ 6], animatorParameters[ 6], animatorParameterType[ 6], animatorParameter07);
|
||||
if (animators.Count >= 8) ApplyAnimatorChange(animators[ 7], animatorParameters[ 7], animatorParameterType[ 7], animatorParameter08);
|
||||
if (animators.Count >= 9) ApplyAnimatorChange(animators[ 8], animatorParameters[ 8], animatorParameterType[ 8], animatorParameter09);
|
||||
if (animators.Count >= 10) ApplyAnimatorChange(animators[ 9], animatorParameters[ 9], animatorParameterType[ 9], animatorParameter10);
|
||||
if (animators.Count >= 1) ApplyAnimatorChange(animators[0], animatorParameters[0], animatorParameterType[0], animatorParameter01);
|
||||
if (animators.Count >= 2) ApplyAnimatorChange(animators[1], animatorParameters[1], animatorParameterType[1], animatorParameter02);
|
||||
if (animators.Count >= 3) ApplyAnimatorChange(animators[2], animatorParameters[2], animatorParameterType[2], animatorParameter03);
|
||||
if (animators.Count >= 4) ApplyAnimatorChange(animators[3], animatorParameters[3], animatorParameterType[3], animatorParameter04);
|
||||
if (animators.Count >= 5) ApplyAnimatorChange(animators[4], animatorParameters[4], animatorParameterType[4], animatorParameter05);
|
||||
if (animators.Count >= 6) ApplyAnimatorChange(animators[5], animatorParameters[5], animatorParameterType[5], animatorParameter06);
|
||||
if (animators.Count >= 7) ApplyAnimatorChange(animators[6], animatorParameters[6], animatorParameterType[6], animatorParameter07);
|
||||
if (animators.Count >= 8) ApplyAnimatorChange(animators[7], animatorParameters[7], animatorParameterType[7], animatorParameter08);
|
||||
if (animators.Count >= 9) ApplyAnimatorChange(animators[8], animatorParameters[8], animatorParameterType[8], animatorParameter09);
|
||||
if (animators.Count >= 10) ApplyAnimatorChange(animators[9], animatorParameters[9], animatorParameterType[9], animatorParameter10);
|
||||
if (animators.Count >= 11) ApplyAnimatorChange(animators[10], animatorParameters[10], animatorParameterType[10], animatorParameter11);
|
||||
if (animators.Count >= 12) ApplyAnimatorChange(animators[11], animatorParameters[11], animatorParameterType[11], animatorParameter12);
|
||||
if (animators.Count >= 13) ApplyAnimatorChange(animators[12], animatorParameters[12], animatorParameterType[12], animatorParameter13);
|
||||
|
@ -49,24 +49,71 @@ namespace ABI.CCK.Components
|
|||
if (animators.Count >= 16) ApplyAnimatorChange(animators[15], animatorParameters[15], animatorParameterType[15], animatorParameter16);
|
||||
}
|
||||
|
||||
private void ApplyAnimatorChange(Animator animator, string parameterName, int parameterType, float parameterValue)
|
||||
private void ApplyAnimatorChange(Animator animator, string parameterName, int parameterType,
|
||||
float parameterValue)
|
||||
{
|
||||
if (parameterName != "-none-")
|
||||
if (parameterName == CVRCommon.NONE_OR_EMPTY)
|
||||
return;
|
||||
|
||||
switch (parameterType)
|
||||
{
|
||||
switch (parameterType)
|
||||
case 0:
|
||||
animator.SetFloat(parameterName, parameterValue);
|
||||
break;
|
||||
case 1:
|
||||
animator.SetInteger(parameterName, Mathf.RoundToInt(parameterValue));
|
||||
break;
|
||||
case 2:
|
||||
animator.SetBool(parameterName, parameterValue > 0.5f);
|
||||
break;
|
||||
case 3:
|
||||
if (parameterValue > 0.5f) animator.SetTrigger(parameterName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
if (animators.Count > 16) // cap at 16
|
||||
animators.RemoveRange(16, animators.Count - 16);
|
||||
|
||||
// keep the list count in sync by adding/removing elements as needed
|
||||
|
||||
if (animatorParameters.Count > animators.Count)
|
||||
animatorParameters.RemoveRange(animators.Count, animatorParameters.Count - animators.Count);
|
||||
else while (animatorParameters.Count < animators.Count) animatorParameters.Add(CVRCommon.NONE_OR_EMPTY);
|
||||
|
||||
if (animatorParameterType.Count > animators.Count)
|
||||
animatorParameterType.RemoveRange(animators.Count, animatorParameterType.Count - animators.Count);
|
||||
else while (animatorParameterType.Count < animators.Count) animatorParameterType.Add(-1); // -1 is invalid
|
||||
|
||||
// update the parameter type list
|
||||
for (int i = 0; i < animators.Count; i++)
|
||||
{
|
||||
Animator animator = animators[i];
|
||||
string parameterName = animatorParameters[i];
|
||||
|
||||
if (animator == null || parameterName == CVRCommon.NONE_OR_EMPTY)
|
||||
{
|
||||
case 0:
|
||||
animator.SetFloat(parameterName, parameterValue);
|
||||
break;
|
||||
case 1:
|
||||
animator.SetInteger(parameterName, (int) parameterValue);
|
||||
break;
|
||||
case 2:
|
||||
animator.SetBool(parameterName, parameterValue > 0.5f);
|
||||
break;
|
||||
case 3:
|
||||
if (parameterValue > 0.5f) animator.SetTrigger(parameterName);
|
||||
break;
|
||||
animatorParameterType[i] = -1;
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (AnimatorControllerParameter parameter in animator.parameters)
|
||||
{
|
||||
if (parameter.name != parameterName) continue;
|
||||
|
||||
// 0 = float, 1 = int, 2 = bool, 3 = trigger
|
||||
animatorParameterType[i] = parameter.type switch
|
||||
{
|
||||
AnimatorControllerParameterType.Float => 0,
|
||||
AnimatorControllerParameterType.Int => 1,
|
||||
AnimatorControllerParameterType.Bool => 2,
|
||||
AnimatorControllerParameterType.Trigger => 3,
|
||||
_ => -1 // invalid
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
using System;
|
||||
using ABI.CCK.Scripts;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRAssetInfo : MonoBehaviour
|
||||
[AddComponentMenu("")]
|
||||
[DisallowMultipleComponent]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/asset-info/")]
|
||||
public class CVRAssetInfo : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public enum AssetType
|
||||
{
|
||||
|
@ -14,11 +15,30 @@ namespace ABI.CCK.Components
|
|||
Spawnable = 3
|
||||
}
|
||||
|
||||
|
||||
public AssetType type;
|
||||
public string objectId;
|
||||
|
||||
[HideInInspector]
|
||||
public string randomNum;
|
||||
|
||||
[HideInInspector]
|
||||
public string unityVersion;
|
||||
|
||||
[HideInInspector]
|
||||
public string cckVersion;
|
||||
|
||||
// just to make sure
|
||||
private void OnValidate() => Reset();
|
||||
private void Reset()
|
||||
{
|
||||
unityVersion = Application.unityVersion;
|
||||
cckVersion = $"{CVRCommon.CCK_VERSION_NUMBER}:{CVRCommon.CCK_BUILD_NUMBER}";
|
||||
if (TryGetComponent(out CVRAvatar _))
|
||||
type = AssetType.Avatar;
|
||||
if (TryGetComponent(out CVRWorld _))
|
||||
type = AssetType.World;
|
||||
if (TryGetComponent(out CVRSpawnable _))
|
||||
type = AssetType.Spawnable;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,9 @@ using UnityEngine.Events;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRAttachment : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Attachment")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/attachment/")]
|
||||
public class CVRAttachment : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
[System.Flags]
|
||||
public enum AttachmentType
|
||||
|
|
|
@ -1,74 +1,95 @@
|
|||
using System.Collections.Generic;
|
||||
using JetBrains.Annotations;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRAudioDriver : MonoBehaviour
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/audio-driver/")]
|
||||
public class CVRAudioDriver : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public AudioSource audioSource;
|
||||
|
||||
[SerializeField]
|
||||
public List<AudioClip> audioClips = new List<AudioClip>();
|
||||
public int selectedAudioClip = 0;
|
||||
public int selectedAudioClip;
|
||||
public bool playOnSwitch = true;
|
||||
|
||||
private int _selectedAudioClip = 0;
|
||||
private int _selectedAudioClip;
|
||||
|
||||
private void OnDidApplyAnimationProperties()
|
||||
#region Unity Events
|
||||
|
||||
private void OnValidate() => CheckAndUpdateAudioClip(); // Editor testing
|
||||
private void OnDidApplyAnimationProperties() => CheckAndUpdateAudioClip();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Methods
|
||||
|
||||
[PublicAPI]
|
||||
public void PlaySound(int index)
|
||||
=> SetAndMaybePlay(index);
|
||||
|
||||
[PublicAPI]
|
||||
public void PlaySound()
|
||||
{
|
||||
if (audioSource != null && audioSource.isActiveAndEnabled)
|
||||
audioSource.Play();
|
||||
}
|
||||
|
||||
[PublicAPI]
|
||||
public void PlayNext()
|
||||
{
|
||||
if (_selectedAudioClip + 1 >= audioClips.Count)
|
||||
PlaySound(0);
|
||||
else
|
||||
PlaySound(_selectedAudioClip + 1);
|
||||
}
|
||||
|
||||
[PublicAPI]
|
||||
public void PlayPrev()
|
||||
{
|
||||
if (_selectedAudioClip == 0)
|
||||
PlaySound(audioClips.Count - 1);
|
||||
else
|
||||
PlaySound(_selectedAudioClip - 1);
|
||||
}
|
||||
|
||||
[PublicAPI]
|
||||
public void SelectRandomSound()
|
||||
=> SetAndMaybePlay(Random.Range(0, audioClips.Count));
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private void CheckAndUpdateAudioClip()
|
||||
{
|
||||
if (selectedAudioClip != _selectedAudioClip)
|
||||
{
|
||||
if(SetAudioClip(selectedAudioClip) && playOnSwitch) PlaySound();
|
||||
}
|
||||
SetAndMaybePlay(selectedAudioClip);
|
||||
}
|
||||
|
||||
private void SetAndMaybePlay(int index)
|
||||
{
|
||||
if (SetAudioClip(index) && playOnSwitch)
|
||||
PlaySound();
|
||||
}
|
||||
|
||||
private bool SetAudioClip(int index)
|
||||
{
|
||||
if (index < audioClips.Count)
|
||||
{
|
||||
if (audioClips[index] != null && audioSource != null)
|
||||
{
|
||||
audioSource.clip = audioClips[index];
|
||||
_selectedAudioClip = selectedAudioClip;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
_selectedAudioClip = index;
|
||||
|
||||
return false;
|
||||
if (index >= audioClips.Count
|
||||
|| index < 0)
|
||||
return false;
|
||||
|
||||
if (audioClips[index] == null
|
||||
|| audioSource == null)
|
||||
return false;
|
||||
|
||||
audioSource.clip = audioClips[index];
|
||||
return true;
|
||||
}
|
||||
|
||||
public void PlaySound(int index)
|
||||
{
|
||||
if (SetAudioClip(index)) PlaySound();
|
||||
}
|
||||
public void PlaySound()
|
||||
{
|
||||
if (audioSource != null) audioSource.Play();
|
||||
}
|
||||
public void PlayNext()
|
||||
{
|
||||
if (_selectedAudioClip + 1 >= audioClips.Count)
|
||||
{
|
||||
PlaySound(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
PlaySound(_selectedAudioClip + 1);
|
||||
}
|
||||
}
|
||||
public void PlayPrev()
|
||||
{
|
||||
if (_selectedAudioClip == 0)
|
||||
{
|
||||
PlaySound(audioClips.Count - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
PlaySound(_selectedAudioClip - 1);
|
||||
}
|
||||
}
|
||||
public void SelectRandomSound()
|
||||
{
|
||||
if (SetAudioClip(Random.Range(0, audioClips.Count)) && playOnSwitch) PlaySound();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -3,7 +3,9 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRAudioMaterialParser : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Audio Material Parser")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/audio-material-parser/")]
|
||||
public class CVRAudioMaterialParser : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public bool useSeparateAudioSources = false;
|
||||
|
||||
|
|
|
@ -1,58 +1,224 @@
|
|||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using ABI.CCK.Scripts;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Animations;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
[RequireComponent(typeof(CVRAssetInfo))]
|
||||
[RequireComponent(typeof(Animator))]
|
||||
[ExecuteInEditMode]
|
||||
public class CVRAvatar : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Avatar")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/avatar/")]
|
||||
[RequireComponent(typeof(Animator))]
|
||||
public class CVRAvatar : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public enum CVRAvatarVoiceParent
|
||||
#region Editor Methods
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
Head = 0,
|
||||
LeftHand = 2,
|
||||
RightHand = 3,
|
||||
Hips = 4
|
||||
if (GetComponent<CVRAssetInfo>() != null) return;
|
||||
CVRAssetInfo info = gameObject.AddComponent<CVRAssetInfo>();
|
||||
info.type = CVRAssetInfo.AssetType.Avatar;
|
||||
}
|
||||
|
||||
[Space] [Header("General avatar settings")] [Space]
|
||||
#endregion
|
||||
|
||||
#region CVRAvatarEnums
|
||||
|
||||
public enum CVRAvatarVoiceParent { Head = 0, LeftHand = 2, RightHand = 3, Hips = 4 }
|
||||
public enum CVRAvatarVisemeMode { Visemes = 0, SingleBlendshape = 1, JawBone = 2 }
|
||||
|
||||
#endregion
|
||||
|
||||
#region General Avatar Settings
|
||||
//[Space] [Header("General Avatar Settings")] [Space]
|
||||
|
||||
public Vector3 viewPosition = new Vector3(0, 0.1f, 0);
|
||||
public Vector3 voicePosition = new Vector3(0, 0.1f, 0);
|
||||
public Vector3 voicePosition = new Vector3(0, 0.15f, 0);
|
||||
public CVRAvatarVoiceParent voiceParent = CVRAvatarVoiceParent.Head;
|
||||
public bool useEyeMovement = true;
|
||||
public bool useBlinkBlendshapes;
|
||||
public bool useVisemeLipsync;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Avatar Customization
|
||||
//[Space] [Header("Avatar Customization")] [Space]
|
||||
|
||||
public AnimatorOverrideController overrides;
|
||||
public SkinnedMeshRenderer bodyMesh;
|
||||
|
||||
public string[] blinkBlendshape = new string[4];
|
||||
/// <summary>
|
||||
/// Interval to change targets for the eye movement in seconds
|
||||
/// </summary>
|
||||
[SerializeField] public Vector2 eyeMovementInterval = new(5f, 10f);
|
||||
|
||||
public enum CVRAvatarVisemeMode
|
||||
#endregion
|
||||
|
||||
#region Eye Look Settings
|
||||
|
||||
/// <summary>
|
||||
/// Whether to use Eye Movement or not
|
||||
/// </summary>
|
||||
[SerializeField] public bool useEyeMovement = true;
|
||||
|
||||
/// <summary>
|
||||
/// Structure holding the detailed information for the eye movement
|
||||
/// </summary>
|
||||
[SerializeField] public EyeMovementInfo eyeMovementInfo = new EyeMovementInfo();
|
||||
|
||||
// Limits for the eye movement interval
|
||||
[NonSerialized] public const float EyeMovementMinIntervalLimit = 1f;
|
||||
[NonSerialized] public const float EyeMovementMaxIntervalLimit = 30f;
|
||||
|
||||
// Limits for the eye angles (uses the same as the default eye muscle values in unity)
|
||||
[NonSerialized] public const float DefaultEyeAngleLimitDown = -10;
|
||||
[NonSerialized] public const float DefaultEyeAngleLimitUp = 15;
|
||||
[NonSerialized] public const float DefaultEyeAngleLimitIn = -20;
|
||||
[NonSerialized] public const float DefaultEyeAngleLimitOut = 20;
|
||||
|
||||
// Limits for the eye angles when we need uniform limits (useful for the blend shape type)
|
||||
[NonSerialized] public const float DefaultUniformAngleLimit = 25;
|
||||
|
||||
[Serializable] public enum CVRAvatarEyeLookMode
|
||||
{
|
||||
Visemes = 0,
|
||||
SingleBlendshape = 1,
|
||||
JawBone = 2
|
||||
/// <summary>
|
||||
/// Eye movement muscle setup
|
||||
/// </summary>
|
||||
Muscle = 0,
|
||||
/// <summary>
|
||||
/// Disabled eye movement setup
|
||||
/// </summary>
|
||||
None = 1,
|
||||
/// <summary>
|
||||
/// Eye movement transforms setup
|
||||
/// </summary>
|
||||
Transform = 2,
|
||||
/// <summary>
|
||||
/// Eye movement blendshape setup
|
||||
/// </summary>
|
||||
Blendshape = 3,
|
||||
}
|
||||
|
||||
[Serializable] public struct EyeMovementInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Type of eye movement. It will dictate which fields will be used.
|
||||
/// </summary>
|
||||
[SerializeField] [NotKeyable] public CVRAvatarEyeLookMode type;
|
||||
|
||||
/// <summary>
|
||||
/// Relevant to: Transforms and Blendshapes
|
||||
/// Eyes info for the eyes, not all fields will be used
|
||||
/// </summary>
|
||||
[SerializeReference] public EyeMovementInfoEye[] eyes;
|
||||
}
|
||||
|
||||
[Serializable] public class EyeMovementInfoEye
|
||||
{
|
||||
/// <summary>
|
||||
/// Relevant to: Transforms and Blendshapes
|
||||
/// Whether the eye is Left or not (this is only used to manage the in/out limit direction)
|
||||
/// </summary>
|
||||
[SerializeField] public bool isLeft;
|
||||
|
||||
/// <summary>
|
||||
/// Transforms - Transform of the eye bone
|
||||
/// Blendshapes - Transform where the eye should be
|
||||
/// </summary>
|
||||
[SerializeField] [NotKeyable] public Transform eyeTransform;
|
||||
|
||||
/// <summary>
|
||||
/// Blendshapes - Skinned mesh renderer for the renderer that has the blendshapes to be driven
|
||||
/// </summary>
|
||||
[SerializeField] [NotKeyable] public SkinnedMeshRenderer eyeSkinnedMeshRenderer;
|
||||
|
||||
/// <summary>
|
||||
/// Transforms - Angle limits for the transforms in degrees
|
||||
/// Blendshapes - Min/Max angle limits for which the blendshapes should be set to 100
|
||||
/// </summary>
|
||||
[SerializeField] public float eyeAngleLimitDown;
|
||||
[SerializeField] public float eyeAngleLimitUp;
|
||||
[SerializeField] public float eyeAngleLimitIn;
|
||||
[SerializeField] public float eyeAngleLimitOut;
|
||||
|
||||
/// <summary>
|
||||
/// Blendshapes - Blenshapes to be used for the blendshape eye movement
|
||||
/// </summary>
|
||||
[SerializeField] [NotKeyable] public string eyeBlendShapeUp;
|
||||
[SerializeField] [NotKeyable] public string eyeBlendShapeDown;
|
||||
[SerializeField] [NotKeyable] public string eyeBlendShapeIn;
|
||||
[SerializeField] [NotKeyable] public string eyeBlendShapeOut;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Eye Blink Settings
|
||||
|
||||
/// <summary>
|
||||
/// Whether to use blendshapes to blink or not
|
||||
/// </summary>
|
||||
[SerializeField] public bool useBlinkBlendshapes;
|
||||
|
||||
/// <summary>
|
||||
/// Which blendshapes to use when blinking (they're all used at the same time)
|
||||
/// </summary>
|
||||
[SerializeField] public string[] blinkBlendshape = new string[4];
|
||||
|
||||
/// <summary>
|
||||
/// Time interval between blinks in seconds.
|
||||
/// </summary>
|
||||
[SerializeField] public Vector2 blinkGap = new(3.0f, 8.0f);
|
||||
[NonSerialized] public const float BlinkMinGapLimit = 0.1f;
|
||||
[NonSerialized] public const float BlinkMaxGapLimit = 30f;
|
||||
|
||||
/// <summary>
|
||||
/// Duration of the blink in seconds.
|
||||
/// </summary>
|
||||
[SerializeField] public Vector2 blinkDuration = new(0.25f, 0.35f);
|
||||
[NonSerialized] public const float BlinkMinDurationLimit = 0.1f;
|
||||
[NonSerialized] public const float BlinkMaxDurationLimit = 3f;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Lip Sync Settings
|
||||
//[Space] [Header("Lip Sync Settings")] [Space]
|
||||
|
||||
public bool useVisemeLipsync;
|
||||
public CVRAvatarVisemeMode visemeMode = CVRAvatarVisemeMode.Visemes;
|
||||
|
||||
public int visemeSmoothing = 50;
|
||||
|
||||
[Range(1, 100)] public int visemeSmoothing = 50;
|
||||
public string[] visemeBlendshapes = new string[15];
|
||||
|
||||
[Space] [Header("Avatar customization")] [Space]
|
||||
public AnimatorOverrideController overrides;
|
||||
#endregion
|
||||
|
||||
public bool enableAdvancedTagging = false;
|
||||
#region First Person Render Settings (Deprecated)
|
||||
#if UNITY_EDITOR // This is a deprecated feature, so lets not included in builds
|
||||
[NotKeyable] public bool enableCustomFPR;
|
||||
public List<CVRAvatarFPREntry> fprSettingsList;
|
||||
#endif
|
||||
#endregion
|
||||
|
||||
#region Advanced Tagging
|
||||
//[Space] [Header("Advanced Tagging")] [Space]
|
||||
|
||||
[NotKeyable]
|
||||
public bool enableAdvancedTagging;
|
||||
public List<CVRAvatarAdvancedTaggingEntry> advancedTaggingList = new List<CVRAvatarAdvancedTaggingEntry>();
|
||||
|
||||
public bool avatarUsesAdvancedSettings = false;
|
||||
public CVRAdvancedAvatarSettings avatarSettings = null;
|
||||
#endregion
|
||||
|
||||
void OnDrawGizmosSelected()
|
||||
#region Advanced Settings
|
||||
//[Space] [Header("Advanced Settings")] [Space]
|
||||
|
||||
[NotKeyable]
|
||||
public bool avatarUsesAdvancedSettings;
|
||||
public CVRAdvancedAvatarSettings avatarSettings;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Unity Methods
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
var scale = transform.localScale;
|
||||
Vector3 scale = transform.localScale;
|
||||
scale.x = 1 / scale.x;
|
||||
scale.y = 1 / scale.y;
|
||||
scale.z = 1 / scale.z;
|
||||
|
@ -64,17 +230,127 @@ namespace ABI.CCK.Components
|
|||
Gizmos.DrawSphere(transform.TransformPoint(Vector3.Scale(voicePosition, scale)), 0.01f);
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
#endregion
|
||||
|
||||
#region Parameter Sync Usage
|
||||
#if UNITY_EDITOR
|
||||
|
||||
public (int, int) GetParameterSyncUsage()
|
||||
{
|
||||
CVRAssetInfo info = gameObject.GetComponent<CVRAssetInfo>();
|
||||
info.type = CVRAssetInfo.AssetType.Avatar;
|
||||
if (avatarSettings?.settings == null)
|
||||
return (0, 0);
|
||||
|
||||
var animatorParameterNames = new HashSet<string>();
|
||||
int syncedValuesOverrides = 0, syncedBooleansOverrides = 0;
|
||||
int syncedValuesAASAutoGen = 0, syncedBooleansAASAutoGen = 0;
|
||||
|
||||
// Count override controller (real count)
|
||||
if (overrides != null && overrides.runtimeAnimatorController != null)
|
||||
{
|
||||
foreach (AnimatorControllerParameter parameter in CVRCommon.GetParametersFromController(
|
||||
overrides.runtimeAnimatorController, CVRCommon.NonCoreFilter, CVRCommon.NonLocalFilter))
|
||||
{
|
||||
if (!animatorParameterNames.Add(parameter.name))
|
||||
continue;
|
||||
|
||||
if (parameter.type == AnimatorControllerParameterType.Bool)
|
||||
syncedBooleansOverrides++;
|
||||
else if (parameter.type != AnimatorControllerParameterType.Trigger)
|
||||
syncedValuesOverrides++;
|
||||
}
|
||||
}
|
||||
|
||||
animatorParameterNames.Clear();
|
||||
|
||||
// Count baseController (part of autogen)
|
||||
if (avatarSettings.baseController != null)
|
||||
{
|
||||
foreach (AnimatorControllerParameter parameter in CVRCommon.GetParametersFromController(
|
||||
avatarSettings.baseController, CVRCommon.NonCoreFilter, CVRCommon.NonLocalFilter))
|
||||
{
|
||||
if (!animatorParameterNames.Add(parameter.name))
|
||||
continue;
|
||||
|
||||
if (parameter.type == AnimatorControllerParameterType.Bool)
|
||||
syncedBooleansAASAutoGen++;
|
||||
else if (parameter.type != AnimatorControllerParameterType.Trigger)
|
||||
syncedValuesAASAutoGen++;
|
||||
}
|
||||
}
|
||||
|
||||
// Count menu entries (part of autogen, not real)
|
||||
foreach (CVRAdvancedSettingsEntry entry in avatarSettings.settings)
|
||||
{
|
||||
if (IsValidParameter(entry.machineName) && animatorParameterNames.Add(entry.machineName))
|
||||
{
|
||||
switch (entry.type)
|
||||
{
|
||||
case CVRAdvancedSettingsEntry.SettingsType.Toggle:
|
||||
if (entry.setting.usedType == CVRAdvancesAvatarSettingBase.ParameterType.Bool)
|
||||
syncedBooleansAASAutoGen += 1;
|
||||
else
|
||||
syncedValuesAASAutoGen += 1;
|
||||
break;
|
||||
case CVRAdvancedSettingsEntry.SettingsType.Color:
|
||||
IncrementSyncValuesForEntry(entry, animatorParameterNames, ref syncedValuesAASAutoGen, "-r", "-g", "-b");
|
||||
break;
|
||||
case CVRAdvancedSettingsEntry.SettingsType.Joystick2D:
|
||||
case CVRAdvancedSettingsEntry.SettingsType.InputVector2:
|
||||
IncrementSyncValuesForEntry(entry, animatorParameterNames, ref syncedValuesAASAutoGen, "-x", "-y");
|
||||
break;
|
||||
case CVRAdvancedSettingsEntry.SettingsType.Joystick3D:
|
||||
case CVRAdvancedSettingsEntry.SettingsType.InputVector3:
|
||||
IncrementSyncValuesForEntry(entry, animatorParameterNames, ref syncedValuesAASAutoGen, "-x", "-y", "-z");
|
||||
break;
|
||||
case CVRAdvancedSettingsEntry.SettingsType.Slider:
|
||||
case CVRAdvancedSettingsEntry.SettingsType.InputSingle:
|
||||
case CVRAdvancedSettingsEntry.SettingsType.Dropdown:
|
||||
default:
|
||||
syncedValuesAASAutoGen += 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int realUsage = syncedValuesOverrides * 32 + Mathf.CeilToInt(syncedBooleansOverrides / 8f) * 8;
|
||||
int autogenUsage = syncedValuesAASAutoGen * 32 + Mathf.CeilToInt(syncedBooleansAASAutoGen / 8f) * 8;
|
||||
|
||||
return (realUsage, autogenUsage);
|
||||
}
|
||||
|
||||
private static bool IsValidParameter(string parameterName)
|
||||
{
|
||||
return !string.IsNullOrEmpty(parameterName) && !CVRCommon.CoreParameters.Contains(parameterName) &&
|
||||
!parameterName.StartsWith(CVRCommon.LOCAL_PARAMETER_PREFIX);
|
||||
}
|
||||
|
||||
private static void IncrementSyncValuesForEntry(CVRAdvancedSettingsEntry entry, HashSet<string> animatorParameters, ref int syncedValues, params string[] suffixes)
|
||||
{
|
||||
int newSyncedValues = suffixes.Count(suffix => animatorParameters.Add(entry.machineName + suffix));
|
||||
syncedValues += newSyncedValues;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endregion
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
#region First Person Render Class
|
||||
|
||||
[Serializable]
|
||||
public class CVRAvatarFPREntry
|
||||
{
|
||||
public bool visibility = true;
|
||||
public Transform transform;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Advanced Tagging Class
|
||||
|
||||
[Serializable]
|
||||
public class CVRAvatarAdvancedTaggingEntry
|
||||
{
|
||||
[Flags]
|
||||
public enum Tags
|
||||
{
|
||||
LoudAudio = 1,
|
||||
|
@ -88,10 +364,10 @@ namespace ABI.CCK.Components
|
|||
Nudity = 256,
|
||||
Horror = 512
|
||||
}
|
||||
|
||||
public Tags tags = 0;
|
||||
|
||||
public GameObject gameObject;
|
||||
public GameObject fallbackGameObject;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
|
@ -1,11 +1,17 @@
|
|||
using UnityEngine;
|
||||
using System;
|
||||
using JetBrains.Annotations;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRAvatarPickupMarker : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Avatar Pickup Marker")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class CVRAvatarPickupMarker : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public string avatarGuid;
|
||||
|
||||
#region Unity Events
|
||||
|
||||
private void OnDrawGizmos()
|
||||
{
|
||||
Gizmos.color = Color.magenta;
|
||||
|
@ -23,5 +29,23 @@ namespace ABI.CCK.Components
|
|||
Gizmos.matrix = rotationMatrix;
|
||||
Gizmos.DrawWireSphere(new Vector3(0, 1.11f, 0), 0.31f);
|
||||
}
|
||||
|
||||
#endregion Unity Events
|
||||
|
||||
#region Public Methods
|
||||
|
||||
[PublicAPI]
|
||||
public void ShowAvatarDetailsPage()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[PublicAPI]
|
||||
public void ChangeAvatar()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
}
|
||||
}
|
54
Assets/ABI.CCK/Components/CVRBaseLuaBehaviour.cs
Executable file
54
Assets/ABI.CCK/Components/CVRBaseLuaBehaviour.cs
Executable file
|
@ -0,0 +1,54 @@
|
|||
using System;
|
||||
using ABI.CCK.Components.ScriptableObjects;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Animations;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Common things that both CVRLuaClientBehaviour, and CVRLuaServerBehaviour use.
|
||||
///
|
||||
/// ********************************
|
||||
/// * Do not use if you're a user. *
|
||||
/// ********************************
|
||||
///
|
||||
/// Use CVRLuaClientBehaviour if you're making a client-side script.
|
||||
/// - or -
|
||||
/// Use CVRLuaServerBehaviour if you're making a server-side script.
|
||||
/// </summary>
|
||||
public abstract class CVRBaseLuaBehaviour : MonoBehaviour
|
||||
{
|
||||
public string ScriptName => asset == null ? string.Empty : asset.name;
|
||||
public string ScriptText => asset == null ? string.Empty : asset.m_ScriptText;
|
||||
public string ScriptPath => asset == null ? string.Empty : asset.m_ScriptPath;
|
||||
|
||||
/// <summary>
|
||||
/// Whether a script is only supposed to run locally or not.
|
||||
/// Avatars: The script only runs on the avatar's wearer client
|
||||
/// Props: The script only runs on prop spawner's client
|
||||
/// World: Ignores this setting for now
|
||||
/// </summary>
|
||||
[SerializeField] [NotKeyable]
|
||||
public bool localOnly = true;
|
||||
|
||||
/// <summary>
|
||||
/// The actual text-asset that we get the content of the script from.
|
||||
/// </summary>
|
||||
public CVRLuaScript asset;
|
||||
|
||||
/// <summary>
|
||||
/// A thing in the scene we want to link to this script.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public struct BoundObject
|
||||
{
|
||||
public string name;
|
||||
public UnityEngine.Object boundThing;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A list of things in the scene we want to link to this script.
|
||||
/// </summary>
|
||||
public BoundObject[] boundObjects;
|
||||
}
|
||||
}
|
11
Assets/ABI.CCK/Components/CVRBaseLuaBehaviour.cs.meta
Executable file
11
Assets/ABI.CCK/Components/CVRBaseLuaBehaviour.cs.meta
Executable file
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: de2e0e3526ad8ea45a48ed7a7b5a7b5c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -1,9 +1,68 @@
|
|||
using UnityEngine;
|
||||
|
||||
[AddComponentMenu("ChilloutVR/CVR Blitter")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/blitter/")]
|
||||
public class CVRBlitter : MonoBehaviour
|
||||
{
|
||||
[SerializeField] RenderTexture originTexture = null;
|
||||
[SerializeField] RenderTexture destinationTexture = null;
|
||||
[SerializeField] Material blitMaterial = null;
|
||||
public RenderTexture originTexture;
|
||||
public RenderTexture destinationTexture;
|
||||
public Material blitMaterial;
|
||||
|
||||
public bool clearEveryFrame;
|
||||
|
||||
private bool _isInitialized;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_isInitialized = true;
|
||||
OnEnable();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (!_isInitialized) return;
|
||||
Camera.onPreRender += MyOnPreRender;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
Camera.onPreRender -= MyOnPreRender;
|
||||
}
|
||||
|
||||
private void MyOnPreRender(Camera cam)
|
||||
{
|
||||
if (!enabled)
|
||||
return;
|
||||
|
||||
// Don't blit unless it's the main camera
|
||||
if (cam != Camera.main)
|
||||
return;
|
||||
|
||||
if (originTexture == null
|
||||
|| destinationTexture == null
|
||||
|| blitMaterial == null)
|
||||
{
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (clearEveryFrame)
|
||||
{
|
||||
RenderTexture rt = RenderTexture.active;
|
||||
RenderTexture.active = destinationTexture;
|
||||
GL.Clear(true, true, Color.clear);
|
||||
RenderTexture.active = rt;
|
||||
}
|
||||
|
||||
if (originTexture == destinationTexture)
|
||||
{
|
||||
RenderTexture temp = RenderTexture.GetTemporary(destinationTexture.descriptor);
|
||||
Graphics.Blit(originTexture, temp, blitMaterial);
|
||||
Graphics.CopyTexture(temp, destinationTexture);
|
||||
RenderTexture.ReleaseTemporary(temp);
|
||||
return;
|
||||
}
|
||||
|
||||
Graphics.Blit(originTexture, destinationTexture, blitMaterial);
|
||||
}
|
||||
}
|
|
@ -1,19 +1,15 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRBuilderSpawnable : MonoBehaviour
|
||||
[AddComponentMenu("")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class CVRBuilderSpawnable : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
private void Reset()
|
||||
{
|
||||
if (GetComponent<CVRSpawnable>() != null)
|
||||
{
|
||||
Invoke("DestroyThis", 0);
|
||||
}
|
||||
}
|
||||
void DestroyThis() {
|
||||
DestroyImmediate(this);
|
||||
DestroyImmediate(this);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,7 +3,9 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRCameraHelper : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Camera Helper")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class CVRCameraHelper : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public Camera cam;
|
||||
public bool setAsMirroringCamera;
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.PlayerLoop;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRCustomRenderTextureUpdater : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Custom Render Texture Updater")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/custom-render-texture-updater/")]
|
||||
public class CVRCustomRenderTextureUpdater : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public CustomRenderTexture customRenderTexture;
|
||||
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRDescription : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Description")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class CVRDescription : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public string description;
|
||||
public string url;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
using System.ComponentModel;
|
||||
using UnityEngine;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
[ExecuteInEditMode]
|
||||
[AddComponentMenu("Scripts/CVR Distance Constraint")]
|
||||
public class CVRDistanceConstrain : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Distance Constraint")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class CVRDistanceConstrain : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public Transform target;
|
||||
public float minDistance = 0;
|
||||
|
|
|
@ -4,7 +4,9 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRDistanceLod : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Distance Lod")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/distance-lod/")]
|
||||
public class CVRDistanceLod : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public bool distance3D = false;
|
||||
public List<CVRDistanceLodGroup> Groups = new List<CVRDistanceLodGroup>();
|
||||
|
|
|
@ -3,7 +3,9 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRFaceTracking : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Face Tracking")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/face-tracking/")]
|
||||
public class CVRFaceTracking : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public bool UseFacialTracking = true;
|
||||
public float BlendShapeStrength = 100f;
|
||||
|
@ -41,8 +43,11 @@ namespace ABI.CCK.Components
|
|||
}
|
||||
}
|
||||
|
||||
public void FindVisemes()
|
||||
public void AutoSelectFaceTrackingShapes()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
UnityEditor.Undo.RecordObject(this, "CVR Auto Select Face Tracking");
|
||||
#endif
|
||||
for (int i = 0; i < FaceBlendShapeNames.Length; i++)
|
||||
{
|
||||
for (int j = 0; j < BlendShapeNames.Count; ++j)
|
||||
|
|
|
@ -2,10 +2,14 @@
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
[AddComponentMenu("ChilloutVR/CVR GI Material Updater")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/gi-material-updater/")]
|
||||
[RequireComponent(typeof(Renderer))]
|
||||
public class CVRGIMaterialUpdater : MonoBehaviour
|
||||
public class CVRGIMaterialUpdater : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
#pragma warning disable 649
|
||||
[SerializeField] bool updateEveryFrame;
|
||||
#pragma warning restore 649
|
||||
private Renderer _renderer;
|
||||
|
||||
private void Start()
|
||||
|
@ -18,6 +22,5 @@ namespace ABI.CCK.Components
|
|||
if (_renderer == null || !updateEveryFrame) return;
|
||||
_renderer.UpdateGIMaterials();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,32 +1,79 @@
|
|||
using System;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
using UnityEngine;
|
||||
using UnityEngine.Animations;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRGlobalMaterialPropertyUpdater : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Global Material Property Updater")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/global-material-property-updater/")]
|
||||
public class CVRGlobalMaterialPropertyUpdater : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public Material material;
|
||||
|
||||
public enum PropertyType
|
||||
{
|
||||
// For legacy reasons, this was used for Int type in shader. Needed for legacy content.
|
||||
// In reality it represents a float, and should be handled like a float.
|
||||
// Newer content will use paramFloat for Int shader types (because it's what it is)
|
||||
paramInt = 0,
|
||||
paramFloat = 1,
|
||||
paramVector4 = 2
|
||||
paramVector4 = 2,
|
||||
// The true Integer, this was added in unity 2021. The shader type is Integer
|
||||
paramInteger = 3,
|
||||
}
|
||||
|
||||
[SerializeField, NotKeyable]
|
||||
public Material material;
|
||||
|
||||
[SerializeField, NotKeyable]
|
||||
public string propertyName;
|
||||
|
||||
[SerializeField, NotKeyable]
|
||||
public PropertyType propertyType = PropertyType.paramFloat;
|
||||
|
||||
// Variables only used to populate the cvr interactable set property value
|
||||
[NonSerialized]
|
||||
public int intValue;
|
||||
|
||||
[NonSerialized]
|
||||
public float floatValue;
|
||||
|
||||
[NonSerialized]
|
||||
public Vector4 vector4Value;
|
||||
[NonSerialized]
|
||||
public int integerValue;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// Animatable parameters, value changes to these will trigger material updates
|
||||
[SerializeField, CVRInteractableActionOperation.HideFromSetPropertyByValue]
|
||||
public int intValueAnimatable;
|
||||
[SerializeField, CVRInteractableActionOperation.HideFromSetPropertyByValue]
|
||||
public float floatValueAnimatable;
|
||||
[SerializeField, CVRInteractableActionOperation.HideFromSetPropertyByValue]
|
||||
public Vector4 vector4ValueAnimatable;
|
||||
[SerializeField, CVRInteractableActionOperation.HideFromSetPropertyByValue]
|
||||
public int integerValueAnimatable;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
private void OnValidate() {
|
||||
|
||||
if (material == null || material.shader.FindPropertyIndex(propertyName) < 0 || AnimationMode.InAnimationMode()) return;
|
||||
|
||||
// Fetch the default value from the material
|
||||
switch (propertyType) {
|
||||
case PropertyType.paramInt:
|
||||
intValueAnimatable = material!.GetInt(propertyName);
|
||||
break;
|
||||
case PropertyType.paramFloat:
|
||||
floatValueAnimatable = material!.GetFloat(propertyName);
|
||||
break;
|
||||
case PropertyType.paramVector4:
|
||||
vector4ValueAnimatable = material!.GetVector(propertyName);
|
||||
break;
|
||||
case PropertyType.paramInteger:
|
||||
integerValueAnimatable = material!.GetInteger(propertyName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
|
@ -3,7 +3,9 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRGlobalShaderUpdater : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Global Shader Updater")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/global-shader-updater/")]
|
||||
public class CVRGlobalShaderUpdater : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public bool updateValues = true;
|
||||
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRHapticAreaChest : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Haptic Area Chest")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/haptic-chest-area/")]
|
||||
public class CVRHapticAreaChest : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public Vector3 chestAreaSize = new Vector3(0.05f, 0.05f, 0.05f);
|
||||
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRHapticZone : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Haptic Zone")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/haptic-zone/")]
|
||||
public class CVRHapticZone : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public enum TriggerForm
|
||||
{
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
@ -7,8 +5,10 @@ using UnityEngine.Events;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
[AddComponentMenu("ChilloutVR/CVR Interactable")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/interactable/")]
|
||||
[System.Serializable]
|
||||
public class CVRInteractable : MonoBehaviour
|
||||
public class CVRInteractable : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public string tooltip;
|
||||
public List<CVRInteractableAction> actions = new List<CVRInteractableAction>();
|
||||
|
@ -29,24 +29,86 @@ namespace ABI.CCK.Components
|
|||
{
|
||||
if (operation.type == CVRInteractableActionOperation.ActionType.TeleportPlayer)
|
||||
{
|
||||
Gizmos.color = Color.green;
|
||||
if(operation.gameObjectVal == null) continue;
|
||||
Gizmos.DrawLine(transform.position, operation.gameObjectVal.transform.position);
|
||||
DrawArrow(operation.gameObjectVal.transform.position, new Vector3(0, operation.gameObjectVal.transform.eulerAngles.y, 0), 1);
|
||||
|
||||
Transform target = operation.gameObjectVal.transform;
|
||||
Vector3 position = target.position;
|
||||
|
||||
// connection line
|
||||
Gizmos.color = Color.yellow;
|
||||
Gizmos.DrawLine(transform.position, position);
|
||||
|
||||
// alignment is set to none
|
||||
if (operation.floatVal == 3)
|
||||
{
|
||||
Gizmos.color = Color.blue;
|
||||
Gizmos.DrawWireSphere(position, 0.1f);
|
||||
continue;
|
||||
}
|
||||
|
||||
// relative teleport sets forward direction
|
||||
Vector3 targetDirection;
|
||||
if (operation.boolVal)
|
||||
{
|
||||
Gizmos.color = Color.cyan;
|
||||
targetDirection = transform.InverseTransformDirection(transform.forward);
|
||||
targetDirection = target.TransformDirection(targetDirection);
|
||||
}
|
||||
else
|
||||
{
|
||||
Gizmos.color = Color.blue;
|
||||
targetDirection = target.forward;
|
||||
}
|
||||
|
||||
if (operation.floatVal == 0) targetDirection = Vector3.ProjectOnPlane(targetDirection, Vector3.up).normalized;
|
||||
|
||||
DrawArrow(position, targetDirection, 1);
|
||||
|
||||
// up direction, when gravity, aligns to sampled gravity on teleport
|
||||
Gizmos.color = operation.floatVal == 2 ? Color.magenta : Color.green;
|
||||
|
||||
switch (operation.floatVal)
|
||||
{
|
||||
case 0: // World Up
|
||||
DrawArrow(position, Vector3.up, 1);
|
||||
break;
|
||||
case 1: // Target Up
|
||||
case 2: // Gravity
|
||||
DrawArrow(position, target.up, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (operation.type == CVRInteractableActionOperation.ActionType.SitAtPosition)
|
||||
{
|
||||
Gizmos.color = Color.blue;
|
||||
if(operation.targets.Count > 0 && operation.targets[0] == null) continue;
|
||||
Gizmos.DrawLine(transform.position, operation.targets[0].transform.position);
|
||||
DrawArrow(operation.targets[0].transform.position, new Vector3(0, operation.targets[0].transform.eulerAngles.y, 0), 0.5f);
|
||||
if(operation.targets.Count > 0 && operation.targets[0] == null)
|
||||
continue;
|
||||
|
||||
if (operation.gameObjectVal == null) continue;
|
||||
var position = operation.gameObjectVal.transform;
|
||||
// Exit position
|
||||
Gizmos.color = Color.blue;
|
||||
|
||||
Transform exitTransform = operation.targets[0].transform;
|
||||
Vector3 exitPosition = exitTransform.position;
|
||||
|
||||
Gizmos.DrawLine(transform.position, exitPosition);
|
||||
DrawArrow(exitPosition,
|
||||
exitTransform.forward, 0.5f);
|
||||
|
||||
Gizmos.color = Color.yellow;
|
||||
DrawArrow(exitPosition,
|
||||
exitTransform.up, 0.5f);
|
||||
|
||||
if (operation.gameObjectVal == null)
|
||||
continue;
|
||||
|
||||
Gizmos.color = Color.blue;
|
||||
|
||||
// Sitting position
|
||||
Transform position = operation.gameObjectVal.transform;
|
||||
Gizmos.DrawLine(transform.position, position.position);
|
||||
Matrix4x4 rotationMatrix = Matrix4x4.TRS(position.position, position.rotation, Vector3.one);
|
||||
Gizmos.matrix = rotationMatrix;
|
||||
|
||||
// Draws sitting cube person
|
||||
Gizmos.matrix = Matrix4x4.TRS(position.position, position.rotation, Vector3.one);
|
||||
Gizmos.DrawWireCube(new Vector3(+0.12f, -0.2f, 0.05f), new Vector3(0.1f, 0.4f, 0.1f));
|
||||
Gizmos.DrawWireCube(new Vector3(-0.12f, -0.2f, 0.05f), new Vector3(0.1f, 0.4f, 0.1f));
|
||||
Gizmos.DrawWireCube(new Vector3(+0.12f, 0.05f, -0.2f), new Vector3(0.1f, 0.1f, 0.6f));
|
||||
|
@ -62,24 +124,24 @@ namespace ABI.CCK.Components
|
|||
}
|
||||
}
|
||||
|
||||
private void DrawArrow(Vector3 position, Vector3 angle, float size)
|
||||
private void DrawArrow(Vector3 position, Vector3 direction, float size)
|
||||
{
|
||||
var a1 = position + new Vector3(0, 0.1f * size, 0);
|
||||
var a2 = RotatePointAroundPivot(position + new Vector3(0.1f * size, 0, 0), position, angle);
|
||||
var a3 = position + new Vector3(0, -0.1f * size, 0);
|
||||
var a4 = RotatePointAroundPivot(position + new Vector3(-0.1f * size, 0, 0), position, angle);
|
||||
var a1 = RotatePointAroundPivot(position + new Vector3(0, 0.1f * size, 0), position, direction);
|
||||
var a2 = RotatePointAroundPivot(position + new Vector3(0.1f * size, 0, 0), position, direction);
|
||||
var a3 = RotatePointAroundPivot(position + new Vector3(0, -0.1f * size, 0), position, direction);
|
||||
var a4 = RotatePointAroundPivot(position + new Vector3(-0.1f * size, 0, 0), position, direction);
|
||||
|
||||
var b1 = RotatePointAroundPivot(position + new Vector3(0, 0.1f * size, 0.3f * size), position, angle);
|
||||
var b2 = RotatePointAroundPivot(position + new Vector3(0.1f * size, 0, 0.3f * size), position, angle);
|
||||
var b3 = RotatePointAroundPivot(position + new Vector3(0, -0.1f * size, 0.3f * size), position, angle);
|
||||
var b4 = RotatePointAroundPivot(position + new Vector3(-0.1f * size, 0, 0.3f * size), position, angle);
|
||||
var b1 = RotatePointAroundPivot(position + new Vector3(0, 0.1f * size, 0.3f * size), position, direction);
|
||||
var b2 = RotatePointAroundPivot(position + new Vector3(0.1f * size, 0, 0.3f * size), position, direction);
|
||||
var b3 = RotatePointAroundPivot(position + new Vector3(0, -0.1f * size, 0.3f * size), position, direction);
|
||||
var b4 = RotatePointAroundPivot(position + new Vector3(-0.1f * size, 0, 0.3f * size), position, direction);
|
||||
|
||||
var c1 = RotatePointAroundPivot(position + new Vector3(0, 0.2f * size, 0.3f * size), position, angle);
|
||||
var c2 = RotatePointAroundPivot(position + new Vector3(0.2f * size, 0, 0.3f * size), position, angle);
|
||||
var c3 = RotatePointAroundPivot(position + new Vector3(0, -0.2f * size, 0.3f * size), position, angle);
|
||||
var c4 = RotatePointAroundPivot(position + new Vector3(-0.2f * size, 0, 0.3f * size), position, angle);
|
||||
var c1 = RotatePointAroundPivot(position + new Vector3(0, 0.2f * size, 0.3f * size), position, direction);
|
||||
var c2 = RotatePointAroundPivot(position + new Vector3(0.2f * size, 0, 0.3f * size), position, direction);
|
||||
var c3 = RotatePointAroundPivot(position + new Vector3(0, -0.2f * size, 0.3f * size), position, direction);
|
||||
var c4 = RotatePointAroundPivot(position + new Vector3(-0.2f * size, 0, 0.3f * size), position, direction);
|
||||
|
||||
var d = RotatePointAroundPivot(position + new Vector3(0, 0, 0.5f * size), position, angle);
|
||||
var d = RotatePointAroundPivot(position + new Vector3(0, 0, 0.5f * size), position, direction);
|
||||
|
||||
Gizmos.DrawLine(position, a1);
|
||||
Gizmos.DrawLine(position, a2);
|
||||
|
@ -102,10 +164,11 @@ namespace ABI.CCK.Components
|
|||
Gizmos.DrawLine(c4, d);
|
||||
}
|
||||
|
||||
private Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles)
|
||||
private Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 direction)
|
||||
{
|
||||
var dir = point - pivot; // get point direction relative to pivot
|
||||
dir = Quaternion.Euler(angles) * dir; // rotate it
|
||||
Quaternion rotation = Quaternion.LookRotation(direction, Vector3.up);
|
||||
dir = rotation * dir; // rotate it
|
||||
point = dir + pivot; // calculate rotated point
|
||||
return point; // return it
|
||||
}
|
||||
|
|
|
@ -7,46 +7,66 @@ namespace ABI.CCK.Components
|
|||
[System.Serializable]
|
||||
public class CVRInteractableAction
|
||||
{
|
||||
#region Filtering Attribute Classes
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
|
||||
public class AllowSpawnable : Attribute { }
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
|
||||
public class AllowWorld : Attribute { }
|
||||
|
||||
#endregion
|
||||
|
||||
public enum ActionRegister
|
||||
{
|
||||
OnGrab = 1,
|
||||
OnDrop = 2,
|
||||
OnInteractDown = 3,
|
||||
OnInteractUp = 4,
|
||||
OnEnterTrigger = 5,
|
||||
OnExitTrigger = 6,
|
||||
OnEnterCollider = 7,
|
||||
OnExitCollider = 8,
|
||||
OnEnable = 9,
|
||||
OnDisable = 10,
|
||||
OnTimer = 11,
|
||||
OnParticleHit = 12,
|
||||
OnVariableBufferUpdate = 13,
|
||||
OnVariableBufferComparision = 14,
|
||||
OnCron = 15,
|
||||
OnPointerEnter = 16,
|
||||
OnWorldTrigger = 17,
|
||||
OnCustomTrigger = 18,
|
||||
OnInputDown = 19,
|
||||
OnInputUp = 20,
|
||||
OnAPFTrigger = 21,
|
||||
OnAPFBoolChange = 22,
|
||||
OnAPFIntChange = 23,
|
||||
OnAPFFloatChange = 24,
|
||||
OnAPFStringChange = 27,
|
||||
OnGazeEnter = 25,
|
||||
OnGazeExit = 26
|
||||
[AllowWorld, AllowSpawnable] OnGrab = 1,
|
||||
[AllowWorld, AllowSpawnable] OnDrop = 2,
|
||||
[AllowWorld, AllowSpawnable] OnInteractDown = 3,
|
||||
[AllowWorld, AllowSpawnable] OnInteractUp = 4,
|
||||
[AllowWorld] OnEnterTrigger = 5,
|
||||
[AllowWorld] OnExitTrigger = 6,
|
||||
[AllowWorld] OnEnterCollider = 7,
|
||||
[AllowWorld] OnExitCollider = 8,
|
||||
[AllowWorld] OnPlayerTriggerEnter = 29,
|
||||
[AllowWorld] OnPlayerTriggerExit = 30,
|
||||
[AllowWorld] OnPlayerColliderEnter = 31,
|
||||
[AllowWorld] OnPlayerColliderExit = 32,
|
||||
[AllowWorld] OnEnable = 9,
|
||||
[AllowWorld] OnDisable = 10,
|
||||
[AllowWorld] OnTimer = 11,
|
||||
[AllowWorld] OnParticleHit = 12,
|
||||
[AllowWorld] OnVariableBufferUpdate = 13,
|
||||
[AllowWorld] OnVariableBufferComparision = 14,
|
||||
[AllowWorld] OnCron = 15,
|
||||
[AllowWorld] OnPointerEnter = 16,
|
||||
[AllowWorld] OnPointerExit = 28,
|
||||
[AllowWorld, AllowSpawnable] OnWorldTrigger = 17,
|
||||
[AllowWorld, AllowSpawnable] OnCustomTrigger = 18,
|
||||
[AllowWorld, AllowSpawnable] OnInputDown = 19,
|
||||
[AllowWorld, AllowSpawnable] OnInputUp = 20,
|
||||
[AllowWorld] OnAPFTrigger = 21,
|
||||
[AllowWorld] OnAPFBoolChange = 22,
|
||||
[AllowWorld] OnAPFIntChange = 23,
|
||||
[AllowWorld] OnAPFFloatChange = 24,
|
||||
[AllowWorld] OnAPFStringChange = 27,
|
||||
[AllowWorld] OnHoverEnter = 25, // used to be OnGazeEnter
|
||||
[AllowWorld] OnHoverExit = 26, // used to be OnGazeExit
|
||||
[AllowWorld] OnBecameVisible = 33,
|
||||
[AllowWorld] OnBecameInvisible = 34,
|
||||
// must be called via StateMachineCallbackSender StateMachineBehaviour
|
||||
[AllowWorld, AllowSpawnable] OnStateMachineEnter = 35,
|
||||
[AllowWorld, AllowSpawnable] OnStateMachineExit = 36
|
||||
}
|
||||
|
||||
public enum ExecutionType
|
||||
{
|
||||
LocalNotNetworked = 1,
|
||||
GlobalNetworked = 2,
|
||||
GlobalNetworkedBuffered = 4,
|
||||
GlobalInstanceOwnerOnly = 3,
|
||||
GlobalInstanceOwnerOnlyBuffered = 5,
|
||||
GlobalNetworkedAllInstanceModerators = 6,
|
||||
GlobalNetworkedAllInstanceModeratorsBuffered = 7
|
||||
[AllowWorld, AllowSpawnable] LocalNotNetworked = 1,
|
||||
[AllowWorld] GlobalNetworked = 2,
|
||||
[AllowWorld] GlobalNetworkedBuffered = 4,
|
||||
[AllowWorld] GlobalInstanceOwnerOnly = 3,
|
||||
[AllowWorld] GlobalInstanceOwnerOnlyBuffered = 5,
|
||||
[AllowWorld] GlobalNetworkedAllInstanceModerators = 6,
|
||||
[AllowWorld] GlobalNetworkedAllInstanceModeratorsBuffered = 7
|
||||
}
|
||||
|
||||
public float delay = 0f;
|
||||
|
@ -54,7 +74,7 @@ namespace ABI.CCK.Components
|
|||
public List<CVRInteractableActionOperation> operations = new List<CVRInteractableActionOperation>();
|
||||
|
||||
public ActionRegister actionType = ActionRegister.OnInteractDown;
|
||||
public ExecutionType execType = ExecutionType.GlobalNetworked;
|
||||
public ExecutionType execType = ExecutionType.LocalNotNetworked;
|
||||
|
||||
public LayerMask layerMask = 0;
|
||||
|
||||
|
@ -62,6 +82,7 @@ namespace ABI.CCK.Components
|
|||
public float floatVal2 = 0;
|
||||
public float floatVal3 = 0;
|
||||
public bool boolVal;
|
||||
public bool boolVal2;
|
||||
public CVRVariableBuffer varBufferVal;
|
||||
public CVRVariableBuffer varBufferVal2;
|
||||
public string stringVal = "";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
|
@ -8,45 +8,59 @@ namespace ABI.CCK.Components
|
|||
[System.Serializable]
|
||||
public class CVRInteractableActionOperation
|
||||
{
|
||||
#region Filtering Attribute Classes
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
|
||||
public class AllowSpawnable : Attribute { }
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
|
||||
public class AllowWorld : Attribute { }
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
|
||||
public class HideFromSetPropertyByValue : Attribute { }
|
||||
|
||||
#endregion
|
||||
|
||||
public enum ActionType
|
||||
{
|
||||
SetGameObjectActive = 1,
|
||||
//SetComponentActive = 2,
|
||||
SetAnimatorFloatValue = 3,
|
||||
SetAnimatorBoolValue = 4,
|
||||
SetAnimatorIntValue = 17,
|
||||
TriggerAnimatorTrigger = 18,
|
||||
SpawnObject = 5,
|
||||
TeleportPlayer = 6,
|
||||
TeleportObject = 7,
|
||||
ToggleAnimatorBoolValue = 8,
|
||||
SetAnimatorFloatRandom = 9,
|
||||
SetAnimatorBoolRandom = 10,
|
||||
SetAnimatorIntRandom = 19,
|
||||
SetAnimatorFloatByVar = 11,
|
||||
SetAnimatorIntByVar = 20,
|
||||
VariableBufferArithmetic = 12,
|
||||
DisplayWorldDetailPage = 13,
|
||||
DisplayInstanceDetailPage = 14,
|
||||
DisplayAvatarDetailPage = 15,
|
||||
DisplaySpawnableDetailPage = 37,
|
||||
SitAtPosition = 16,
|
||||
MethodCall = 21,
|
||||
SetSpawnableValue = 22,
|
||||
PlayAudio = 23,
|
||||
StopAudio = 24,
|
||||
SetAnimatorBoolByAPF= 25,
|
||||
SetAnimatorIntByAPF = 26,
|
||||
SetAnimatorFloatByAPF = 27,
|
||||
SetVariableBufferByAPF= 28,
|
||||
UpdateAPFTrigger = 29,
|
||||
UpdateAPFBool = 30,
|
||||
UpdateAPFInt = 31,
|
||||
UpdateAPFFloat = 32,
|
||||
UpdateAPFString = 33,
|
||||
SetPropertyByApf = 34,
|
||||
SetPropertyByValue = 35,
|
||||
DeleteGameObject = 36,
|
||||
[AllowWorld, AllowSpawnable] SetGameObjectActive = 1,
|
||||
[AllowWorld, AllowSpawnable] SetComponentActive = 2,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorFloatValue = 3,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorBoolValue = 4,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorIntValue = 17,
|
||||
[AllowWorld, AllowSpawnable] TriggerAnimatorTrigger = 18,
|
||||
[AllowWorld] SpawnObject = 5,
|
||||
[AllowWorld, AllowSpawnable] TeleportPlayer = 6,
|
||||
[AllowWorld, AllowSpawnable] TeleportObject = 7,
|
||||
[AllowWorld, AllowSpawnable] ToggleAnimatorBoolValue = 8,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorFloatRandom = 9,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorBoolRandom = 10,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorIntRandom = 19,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorFloatByVar = 11,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorIntByVar = 20,
|
||||
[AllowWorld, AllowSpawnable] VariableBufferArithmetic = 12,
|
||||
[AllowWorld, AllowSpawnable] DisplayWorldDetailPage = 13,
|
||||
[AllowWorld, AllowSpawnable] DisplayInstanceDetailPage = 14,
|
||||
[AllowWorld, AllowSpawnable] DisplayAvatarDetailPage = 15,
|
||||
[AllowWorld, AllowSpawnable] DisplaySpawnableDetailPage = 37,
|
||||
[AllowWorld, AllowSpawnable] SitAtPosition = 16,
|
||||
[AllowWorld, AllowSpawnable] MethodCall = 21,
|
||||
[AllowWorld, AllowSpawnable] SetSpawnableValue = 22,
|
||||
[AllowWorld, AllowSpawnable] PlayAudio = 23,
|
||||
[AllowWorld, AllowSpawnable] StopAudio = 24,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorBoolByAPF = 25,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorIntByAPF = 26,
|
||||
[AllowWorld, AllowSpawnable] SetAnimatorFloatByAPF = 27,
|
||||
[AllowWorld, AllowSpawnable] SetVariableBufferByAPF= 28,
|
||||
[AllowWorld, AllowSpawnable] UpdateAPFTrigger = 29,
|
||||
[AllowWorld, AllowSpawnable] UpdateAPFBool = 30,
|
||||
[AllowWorld, AllowSpawnable] UpdateAPFInt = 31,
|
||||
[AllowWorld, AllowSpawnable] UpdateAPFFloat = 32,
|
||||
[AllowWorld, AllowSpawnable] UpdateAPFString = 33,
|
||||
[AllowWorld, AllowSpawnable] SetPropertyByApf = 34,
|
||||
[AllowWorld, AllowSpawnable] SetPropertyByValue = 35,
|
||||
[AllowWorld, AllowSpawnable] DeleteGameObject = 36,
|
||||
[AllowWorld, AllowSpawnable] LuaFunctionCall = 38,
|
||||
}
|
||||
|
||||
public ActionType type = ActionType.SetGameObjectActive;
|
||||
|
|
11
Assets/ABI.CCK/Components/CVRLuaClientBehaviour.cs
Executable file
11
Assets/ABI.CCK/Components/CVRLuaClientBehaviour.cs
Executable file
|
@ -0,0 +1,11 @@
|
|||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// This is a Lua script that runs entirely on your side of the connection (client-side).
|
||||
/// </summary>
|
||||
public class CVRLuaClientBehaviour : CVRBaseLuaBehaviour
|
||||
{
|
||||
}
|
||||
}
|
11
Assets/ABI.CCK/Components/CVRLuaClientBehaviour.cs.meta
Executable file
11
Assets/ABI.CCK/Components/CVRLuaClientBehaviour.cs.meta
Executable file
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 70e2beb286f4c1b4690755891d0604a5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {fileID: 2800000, guid: 8d4eaf52fbae23548874e96ac0d52276, type: 3}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -3,7 +3,9 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRMaterialDriver : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Material Driver")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/material-driver/")]
|
||||
public class CVRMaterialDriver : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public float material01X;
|
||||
public float material01Y;
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRMaterialUpdater : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Material Updater")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/material-updater/")]
|
||||
public class CVRMaterialUpdater : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public enum UpdateType
|
||||
{
|
||||
|
@ -13,39 +14,42 @@ namespace ABI.CCK.Components
|
|||
|
||||
public UpdateType updateType = UpdateType.Update;
|
||||
|
||||
private Renderer renderer;
|
||||
private Renderer render;
|
||||
private Vector3 lastPos;
|
||||
private Vector3 velocity;
|
||||
private Vector3 lastRot;
|
||||
private Vector3 angularVelocity;
|
||||
private static readonly int _cvrVelocity = Shader.PropertyToID("_CVR_Velocity");
|
||||
private static readonly int _cvrAngularVelocity = Shader.PropertyToID("_CVR_Angular_Velocity");
|
||||
|
||||
private void Start()
|
||||
{
|
||||
renderer = GetComponent<Renderer>();
|
||||
render = GetComponent<Renderer>();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (updateType == UpdateType.FixedUpdate || renderer == null) return;
|
||||
if (updateType == UpdateType.FixedUpdate || render == null) return;
|
||||
ProcessUpdate();
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (updateType == UpdateType.Update || renderer == null) return;
|
||||
if (updateType == UpdateType.Update || render == null) return;
|
||||
ProcessUpdate();
|
||||
}
|
||||
|
||||
private void ProcessUpdate()
|
||||
{
|
||||
velocity = (lastPos - transform.position) / (updateType == UpdateType.Update?Time.deltaTime:Time.fixedDeltaTime);
|
||||
angularVelocity = transform.rotation.eulerAngles - lastRot;
|
||||
Quaternion rotation = transform.rotation;
|
||||
angularVelocity = rotation.eulerAngles - lastRot;
|
||||
|
||||
renderer.material.SetVector("_CVR_Velocity", velocity);
|
||||
renderer.material.SetVector("_CVR_Angular_Velocity", angularVelocity);
|
||||
render.material.SetVector(_cvrVelocity, velocity);
|
||||
render.material.SetVector(_cvrAngularVelocity, angularVelocity);
|
||||
|
||||
lastPos = transform.position;
|
||||
lastRot = transform.rotation.eulerAngles;
|
||||
lastRot = rotation.eulerAngles;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,25 +1,384 @@
|
|||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using ABI.CCK.Components;
|
||||
using UnityEngine;
|
||||
|
||||
#pragma warning disable
|
||||
// https://web.archive.org/web/20210507003436/http://wiki.unity3d.com/index.php/MirrorReflection4
|
||||
|
||||
public class CVRMirror : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Mirror")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/mirror/")]
|
||||
[ExecuteInEditMode]
|
||||
public class CVRMirror : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public bool m_DisablePixelLights = true;
|
||||
public int m_TextureSize = 256;
|
||||
public float m_ClipPlaneOffset = 0.07f;
|
||||
public int m_framesNeededToUpdate = 0;
|
||||
public enum MirrorClearFlags {Skybox = 1, Color = 2}
|
||||
|
||||
// General
|
||||
public bool m_DisablePixelLights = true;
|
||||
public int m_TextureSize = 4096;
|
||||
public LayerMask m_ReflectLayers = -1;
|
||||
|
||||
private Dictionary<Camera, Camera> m_ReflectionCameras = new Dictionary<Camera, Camera>();
|
||||
// Optimization
|
||||
public bool m_UseOcclusionCulling;
|
||||
|
||||
private RenderTexture m_ReflectionTextureLeft = null;
|
||||
private RenderTexture m_ReflectionTextureRight = null;
|
||||
private int m_OldReflectionTextureSize = 0;
|
||||
// Advanced
|
||||
public MirrorClearFlags m_ClearFlags = MirrorClearFlags.Skybox;
|
||||
public Material m_CustomSkybox;
|
||||
public Color m_CustomColor = new Color(19, 30, 47);
|
||||
|
||||
private int m_frameCounter = 0;
|
||||
// Advanced / Why ??
|
||||
public float m_ClipPlaneOffset = 0.001f;
|
||||
public int m_framesNeededToUpdate;
|
||||
|
||||
private static bool s_InsideRendering = false;
|
||||
// Legacy behaviour forces player layers on + UI off
|
||||
public bool m_ignoreLegacyBehaviour;
|
||||
|
||||
private Camera m_ReflectionCamera;
|
||||
private RenderTexture m_ReflectionTextureLeft;
|
||||
private RenderTexture m_ReflectionTextureRight;
|
||||
private MaterialPropertyBlock m_PropertyBlock;
|
||||
|
||||
private Renderer m_MirrorRenderer;
|
||||
|
||||
private int m_frameCounter;
|
||||
private static bool s_InsideRendering;
|
||||
|
||||
// mirror mesh normal in local coordinates
|
||||
private Vector3 mirrorNormal = Vector3.zero;
|
||||
|
||||
// configurable by player in-game
|
||||
private int usedTextureSize = 4096;
|
||||
private int usedMsaa = 0;
|
||||
|
||||
private static Shader mirrorShader;
|
||||
private static readonly int _propertyLeft = Shader.PropertyToID("_ReflectionTexLeft");
|
||||
private static readonly int _propertyRight = Shader.PropertyToID("_ReflectionTexRight");
|
||||
|
||||
#if UNITY_EDITOR
|
||||
private void Reset()
|
||||
{
|
||||
// Ensure new content is not "legacy".
|
||||
m_ignoreLegacyBehaviour = true;
|
||||
}
|
||||
|
||||
public void OnValidate()
|
||||
{
|
||||
// prevent against infinite reimport when viewing prefabs
|
||||
if (!gameObject.scene.IsValid())
|
||||
return;
|
||||
|
||||
CleanupMirrorObjects();
|
||||
|
||||
m_MirrorRenderer = GetComponent<Renderer>();
|
||||
if (!m_MirrorRenderer)
|
||||
{
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (mirrorShader == null)
|
||||
mirrorShader = Shader.Find("FX/MirrorReflection");
|
||||
|
||||
m_PropertyBlock ??= new MaterialPropertyBlock();
|
||||
|
||||
var materials = m_MirrorRenderer.sharedMaterials;
|
||||
foreach (Material mat in materials)
|
||||
{
|
||||
if (mat == null) continue;
|
||||
if (mat.shader.name is "FX/MirrorReflection" or "Alpha Blend Interactive/MirrorReflection")
|
||||
mat.shader = mirrorShader;
|
||||
}
|
||||
m_MirrorRenderer.sharedMaterials = materials;
|
||||
}
|
||||
#endif
|
||||
|
||||
private void Start()
|
||||
{
|
||||
LegacyBehaviourIfNeeded();
|
||||
|
||||
// Prevent mirrors from reflecting others
|
||||
// This is a reserved layer, no prior content should be using it
|
||||
gameObject.layer = 14;
|
||||
m_ReflectLayers &= ~(1 << 14);
|
||||
|
||||
mirrorShader = Shader.Find("FX/MirrorReflection");
|
||||
m_PropertyBlock ??= new MaterialPropertyBlock();
|
||||
|
||||
m_MirrorRenderer = GetComponent<Renderer>();
|
||||
if (!m_MirrorRenderer)
|
||||
{
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
var materials = m_MirrorRenderer.sharedMaterials;
|
||||
foreach (Material mat in materials)
|
||||
{
|
||||
if (mat == null) continue;
|
||||
if (mat.shader.name is "FX/MirrorReflection" or "Alpha Blend Interactive/MirrorReflection")
|
||||
mat.shader = mirrorShader;
|
||||
}
|
||||
m_MirrorRenderer.sharedMaterials = materials;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
CleanupMirrorObjects();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (m_ReflectionCamera == null)
|
||||
return;
|
||||
|
||||
if (Application.isEditor)
|
||||
DestroyImmediate(m_ReflectionCamera.gameObject);
|
||||
else
|
||||
Destroy(m_ReflectionCamera.gameObject);
|
||||
}
|
||||
|
||||
private void LegacyBehaviourIfNeeded()
|
||||
{
|
||||
if (m_ignoreLegacyBehaviour)
|
||||
return;
|
||||
|
||||
// Older worlds should still force player-layers on for compatability.
|
||||
// CCK Mirror prefab didn't reflect local player, so user content only worked cause of this!
|
||||
|
||||
m_UseOcclusionCulling = false;
|
||||
|
||||
m_ClipPlaneOffset = 0.001f; // exposed in CCK
|
||||
m_ReflectLayers &= ~(1 << 5);
|
||||
m_ReflectLayers &= ~(1 << 15);
|
||||
m_ReflectLayers |= 1 << 8;
|
||||
m_ReflectLayers |= 1 << 9;
|
||||
m_ReflectLayers |= 1 << 10;
|
||||
}
|
||||
|
||||
// This is called when it's known that the object will be rendered by some
|
||||
// camera. We render reflections and do other updates here.
|
||||
// Because the script executes in edit mode, reflections for the scene view
|
||||
// camera will just work!
|
||||
public void OnWillRenderObject()
|
||||
{
|
||||
if (!enabled || !m_MirrorRenderer || !m_MirrorRenderer.sharedMaterial || !m_MirrorRenderer.enabled)
|
||||
return;
|
||||
|
||||
// Previously was RootLogic.Instance.activeCamera;
|
||||
// Camera.current produces correct reflection with *any* camera, be it photo camera, in-world camera, camera on an avatar, or anything else
|
||||
// TODO: consider a marker or settings component (i.e. CVRCameraSettings) that would allow excluding mirrors from camera render (useful on both avatars and worlds)
|
||||
Camera cam = Camera.current;
|
||||
if (!cam)
|
||||
return;
|
||||
|
||||
// Safeguard from recursive reflections.
|
||||
if (s_InsideRendering) return;
|
||||
s_InsideRendering = true;
|
||||
|
||||
if (m_frameCounter > 0)
|
||||
{
|
||||
m_frameCounter--;
|
||||
return;
|
||||
}
|
||||
m_frameCounter = m_framesNeededToUpdate;
|
||||
|
||||
mirrorNormal = Vector3.up;
|
||||
MeshFilter meshFilter = GetComponent<MeshFilter>();
|
||||
Mesh mesh = meshFilter != null ? meshFilter.sharedMesh : null;
|
||||
if (mesh != null && mesh.normals.Length > 0)
|
||||
mirrorNormal = mesh.normals[0];
|
||||
|
||||
// Optionally disable pixel lights for reflection
|
||||
int oldPixelLightCount = QualitySettings.pixelLightCount;
|
||||
if (m_DisablePixelLights)
|
||||
QualitySettings.pixelLightCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
RenderCamera(cam, m_MirrorRenderer, Camera.StereoscopicEye.Left, ref m_ReflectionTextureLeft);
|
||||
m_PropertyBlock.SetTexture(_propertyLeft, m_ReflectionTextureLeft);
|
||||
|
||||
if (!cam.stereoEnabled) return;
|
||||
RenderCamera(cam, m_MirrorRenderer, Camera.StereoscopicEye.Right, ref m_ReflectionTextureRight);
|
||||
m_PropertyBlock.SetTexture(_propertyRight, m_ReflectionTextureRight);
|
||||
}
|
||||
finally
|
||||
{
|
||||
s_InsideRendering = false;
|
||||
m_MirrorRenderer.SetPropertyBlock(m_PropertyBlock);
|
||||
if (m_DisablePixelLights) // Restore pixel light count
|
||||
QualitySettings.pixelLightCount = oldPixelLightCount;
|
||||
}
|
||||
}
|
||||
|
||||
private void RenderCamera(Camera cam, Renderer rend, Camera.StereoscopicEye eye,
|
||||
ref RenderTexture reflectionTexture)
|
||||
{
|
||||
// find out the reflection plane: position and normal in world space
|
||||
Vector3 pos = transform.position;
|
||||
Vector3 normal = transform.TransformDirection(mirrorNormal);
|
||||
|
||||
CreateMirrorObjects(cam, eye, ref reflectionTexture);
|
||||
|
||||
CopyCameraProperties(cam, m_ReflectionCamera);
|
||||
|
||||
m_ReflectionCamera.useOcclusionCulling = m_UseOcclusionCulling;
|
||||
m_ReflectionCamera.depthTextureMode = cam.depthTextureMode | DepthTextureMode.Depth;
|
||||
m_ReflectionCamera.stereoTargetEye = StereoTargetEyeMask.None;
|
||||
m_ReflectionCamera.cullingMask = m_ReflectLayers.value;
|
||||
|
||||
// Render reflection
|
||||
// Reflect camera around reflection plane
|
||||
float d = -Vector3.Dot(normal, pos) - m_ClipPlaneOffset;
|
||||
Vector4 reflectionPlane = new Vector4(normal.x, normal.y, normal.z, d);
|
||||
|
||||
Matrix4x4 reflection = Matrix4x4.zero;
|
||||
CalculateReflectionMatrix(ref reflection, reflectionPlane);
|
||||
|
||||
Matrix4x4 worldToCameraMatrix;
|
||||
if (cam.stereoEnabled)
|
||||
worldToCameraMatrix = cam.GetStereoViewMatrix(eye) * reflection;
|
||||
else
|
||||
worldToCameraMatrix = cam.worldToCameraMatrix * reflection;
|
||||
|
||||
m_ReflectionCamera.targetTexture = reflectionTexture;
|
||||
|
||||
Matrix4x4 cameraSideReflection = Matrix4x4.zero;
|
||||
CalculateReflectionMatrix(ref cameraSideReflection, new Vector4(1, 0, 0, 0));
|
||||
worldToCameraMatrix = cameraSideReflection * worldToCameraMatrix;
|
||||
|
||||
m_ReflectionCamera.worldToCameraMatrix = worldToCameraMatrix;
|
||||
|
||||
// Setup oblique projection matrix so that near plane is our reflection
|
||||
// plane. This way we clip everything below/above it for free.
|
||||
Vector4 clipPlane = CameraSpacePlane(worldToCameraMatrix, pos, normal, 1.0f);
|
||||
|
||||
m_ReflectionCamera.projectionMatrix = cameraSideReflection *
|
||||
(cam.stereoEnabled
|
||||
? cam.GetStereoProjectionMatrix(eye)
|
||||
: cam.projectionMatrix) * cameraSideReflection.inverse;
|
||||
|
||||
m_ReflectionCamera.projectionMatrix = m_ReflectionCamera.CalculateObliqueMatrix(clipPlane);
|
||||
|
||||
m_ReflectionCamera.Render();
|
||||
}
|
||||
|
||||
// Cleanup all the objects we possibly have created
|
||||
private void CleanupMirrorObjects()
|
||||
{
|
||||
if (m_ReflectionTextureLeft)
|
||||
{
|
||||
RenderTexture.ReleaseTemporary(m_ReflectionTextureLeft);
|
||||
m_ReflectionTextureLeft = null;
|
||||
}
|
||||
if (m_ReflectionTextureRight)
|
||||
{
|
||||
RenderTexture.ReleaseTemporary(m_ReflectionTextureRight);
|
||||
m_ReflectionTextureRight = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void CopyCameraProperties(Camera src, Camera dest)
|
||||
{
|
||||
if (dest == null)
|
||||
return;
|
||||
|
||||
dest.CopyFrom(src);
|
||||
|
||||
if (m_ClearFlags == MirrorClearFlags.Skybox)
|
||||
{
|
||||
dest.clearFlags = CameraClearFlags.Skybox;
|
||||
Skybox mysky = dest.GetComponent<Skybox>();
|
||||
if (!mysky || !m_CustomSkybox)
|
||||
{
|
||||
mysky.enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
mysky.enabled = true;
|
||||
mysky.material = m_CustomSkybox;
|
||||
}
|
||||
}
|
||||
else if (m_ClearFlags == MirrorClearFlags.Color)
|
||||
{
|
||||
dest.clearFlags = CameraClearFlags.Color;
|
||||
dest.backgroundColor = m_CustomColor;
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateMirrorObjects(Camera currentCamera, Camera.StereoscopicEye eye,
|
||||
ref RenderTexture reflectionTexture)
|
||||
{
|
||||
// Calculate target resolution
|
||||
int currentTextureWidth = Mathf.RoundToInt(Math.Min(usedTextureSize, currentCamera.pixelWidth));
|
||||
int currentTextureHeight = Mathf.RoundToInt(Math.Min(usedTextureSize, currentCamera.pixelHeight));
|
||||
|
||||
var targetMsaa = usedMsaa;
|
||||
if (targetMsaa == 0)
|
||||
{
|
||||
RenderTexture targetTexture = currentCamera.targetTexture;
|
||||
if (targetTexture != null)
|
||||
targetMsaa = targetTexture.antiAliasing;
|
||||
else
|
||||
targetMsaa = QualitySettings.antiAliasing == 0 ? 1 : QualitySettings.antiAliasing;
|
||||
}
|
||||
|
||||
// Unity is good at caching rendertextures, so releasing it here and then immediately re-allocating a texture with the same resolution is fast
|
||||
// If the resolution is different, a new texture will be allocated and the old one will be freed
|
||||
if (reflectionTexture)
|
||||
RenderTexture.ReleaseTemporary(reflectionTexture);
|
||||
|
||||
// Additionally, releasing it here (instead of after mirror rendering is done) allows it to survive turning away from the mirror,
|
||||
// so that turning away from and back towards a mirror does not lead to lag spikes
|
||||
|
||||
// Reflection render texture
|
||||
reflectionTexture = RenderTexture.GetTemporary(currentTextureWidth, currentTextureHeight, 24,
|
||||
RenderTextureFormat.ARGBHalf,
|
||||
RenderTextureReadWrite.Default, targetMsaa, RenderTextureMemoryless.None, VRTextureUsage.None);
|
||||
reflectionTexture.name = "__MirrorReflection" + eye.ToString() + GetInstanceID();
|
||||
|
||||
// Camera for reflection
|
||||
if (m_ReflectionCamera == null)
|
||||
{
|
||||
GameObject go = new GameObject("Mirror Reflection Camera id" + GetInstanceID(),
|
||||
typeof(Camera), typeof(Skybox), typeof(FlareLayer));
|
||||
// Parent it to the mirror for easy cleanup in case of destroyed mirror
|
||||
go.transform.SetParent(transform);
|
||||
m_ReflectionCamera = go.GetComponent<Camera>();
|
||||
// Reflection camera transform is irrelevant because it has matrices set explicitly
|
||||
m_ReflectionCamera.enabled = false;
|
||||
go.hideFlags = HideFlags.DontSave | HideFlags.HideInHierarchy;
|
||||
}
|
||||
}
|
||||
|
||||
// Given position/normal of the plane, calculates plane in camera space.
|
||||
private Vector4 CameraSpacePlane(Matrix4x4 worldToCameraMatrix, Vector3 pos, Vector3 normal, float sideSign)
|
||||
{
|
||||
Vector3 offsetPos = pos + normal * m_ClipPlaneOffset;
|
||||
Vector3 cpos = worldToCameraMatrix.MultiplyPoint(offsetPos);
|
||||
Vector3 cnormal = worldToCameraMatrix.MultiplyVector(normal).normalized * sideSign;
|
||||
return new Vector4(cnormal.x, cnormal.y, cnormal.z, -Vector3.Dot(cpos, cnormal));
|
||||
}
|
||||
|
||||
// Calculates reflection matrix around the given plane
|
||||
private static void CalculateReflectionMatrix(ref Matrix4x4 reflectionMat, Vector4 plane)
|
||||
{
|
||||
reflectionMat.m00 = (1F - 2F * plane[0] * plane[0]);
|
||||
reflectionMat.m01 = (-2F * plane[0] * plane[1]);
|
||||
reflectionMat.m02 = (-2F * plane[0] * plane[2]);
|
||||
reflectionMat.m03 = (-2F * plane[3] * plane[0]);
|
||||
|
||||
reflectionMat.m10 = (-2F * plane[1] * plane[0]);
|
||||
reflectionMat.m11 = (1F - 2F * plane[1] * plane[1]);
|
||||
reflectionMat.m12 = (-2F * plane[1] * plane[2]);
|
||||
reflectionMat.m13 = (-2F * plane[3] * plane[1]);
|
||||
|
||||
reflectionMat.m20 = (-2F * plane[2] * plane[0]);
|
||||
reflectionMat.m21 = (-2F * plane[2] * plane[1]);
|
||||
reflectionMat.m22 = (1F - 2F * plane[2] * plane[2]);
|
||||
reflectionMat.m23 = (-2F * plane[3] * plane[2]);
|
||||
|
||||
reflectionMat.m30 = 0F;
|
||||
reflectionMat.m31 = 0F;
|
||||
reflectionMat.m32 = 0F;
|
||||
reflectionMat.m33 = 1F;
|
||||
}
|
||||
}
|
|
@ -3,8 +3,30 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRMovementParent : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Movement Parent")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class CVRMovementParent : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public enum VelocityInheritanceMode
|
||||
{
|
||||
None = 0,
|
||||
Parent = 1,
|
||||
Reference = 2
|
||||
}
|
||||
|
||||
public enum OrientationMode
|
||||
{
|
||||
Disabled = 0,
|
||||
RotateWithParent = 1
|
||||
}
|
||||
|
||||
[Tooltip("Controls whether the player should rotate with the moving platform.")]
|
||||
public OrientationMode orientationMode = OrientationMode.RotateWithParent;
|
||||
|
||||
[Tooltip("Controls how the player inherits velocity from the moving platform.")]
|
||||
public VelocityInheritanceMode velocityInheritance = VelocityInheritanceMode.Reference;
|
||||
|
||||
// to make the enabled checkbox display
|
||||
private void OnEnable(){}
|
||||
}
|
||||
}
|
|
@ -3,7 +3,9 @@ using UnityEngine.AI;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRNavController : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Nav Controller")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/nav-controller/")]
|
||||
public class CVRNavController : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public NavMeshAgent navMeshAgent;
|
||||
public Transform[] navTargetList;
|
||||
|
|
|
@ -3,7 +3,9 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRObjectLibrary : MonoBehaviour
|
||||
[AddComponentMenu("")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class CVRObjectLibrary : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public List<CVRObjectCatalogCategory> objectCatalogCategories = new List<CVRObjectCatalogCategory>();
|
||||
public List<CVRObjectCatalogEntry> objectCatalogEntries = new List<CVRObjectCatalogEntry>();
|
||||
|
|
|
@ -3,7 +3,9 @@ using UnityEngine;
|
|||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRObjectSync : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Object Sync")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/components/object-sync/")]
|
||||
public class CVRObjectSync : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
|
||||
[HideInInspector]
|
||||
|
|
|
@ -18,9 +18,9 @@ namespace ABI.CCK.Components
|
|||
|
||||
public TaskType type = TaskType.Position;
|
||||
|
||||
public Component component = null;
|
||||
public Component component;
|
||||
|
||||
public int intVal = 0;
|
||||
public int intVal;
|
||||
|
||||
public CVRSerializableObjectSyncTask getDefaultValues()
|
||||
{
|
||||
|
@ -34,28 +34,24 @@ namespace ABI.CCK.Components
|
|||
retPos.value = ((Transform) component).position.ToString("F6");
|
||||
retPos.intVal = intVal;
|
||||
return retPos;
|
||||
break;
|
||||
case TaskType.Rotation:
|
||||
var retRot = new CVRSerializableObjectSyncTask();
|
||||
retRot.type = TaskType.Rotation;
|
||||
retRot.value = ((Transform) component).eulerAngles.ToString("F3");
|
||||
retRot.intVal = intVal;
|
||||
return retRot;
|
||||
break;
|
||||
case TaskType.ActivityState:
|
||||
var retAct = new CVRSerializableObjectSyncTask();
|
||||
retAct.type = TaskType.ActivityState;
|
||||
retAct.value = ((Transform) component).gameObject.activeSelf ? "1" : "0";
|
||||
retAct.intVal = intVal;
|
||||
return retAct;
|
||||
break;
|
||||
case TaskType.PickupOwner:
|
||||
var retPick = new CVRSerializableObjectSyncTask();
|
||||
retPick.type = TaskType.PickupOwner;
|
||||
retPick.value = "";
|
||||
retPick.intVal = intVal;
|
||||
return retPick;
|
||||
break;
|
||||
case TaskType.AnimatorParameter:
|
||||
var retAniParam = new CVRSerializableObjectSyncTask();
|
||||
retAniParam.type = TaskType.AnimatorParameter;
|
||||
|
@ -80,21 +76,18 @@ namespace ABI.CCK.Components
|
|||
}
|
||||
retAniParam.intVal = intVal;
|
||||
return retAniParam;
|
||||
break;
|
||||
case TaskType.AnimatorAnimationProgress:
|
||||
var retAniProg = new CVRSerializableObjectSyncTask();
|
||||
retAniProg.type = TaskType.AnimatorAnimationProgress;
|
||||
retAniProg.value = (0f).ToString("F8");
|
||||
retAniProg.intVal = intVal;
|
||||
return retAniProg;
|
||||
break;
|
||||
case TaskType.VariableBufferValue:
|
||||
var retVar = new CVRSerializableObjectSyncTask();
|
||||
retVar.type = TaskType.VariableBufferValue;
|
||||
retVar.value = ((CVRVariableBuffer) component).defaultValue.ToString("F8");
|
||||
retVar.intVal = intVal;
|
||||
return retVar;
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Animations;
|
||||
|
||||
namespace ABI.CCK.Components
|
||||
{
|
||||
public class CVRParameterStream : MonoBehaviour
|
||||
[AddComponentMenu("ChilloutVR/CVR Parameter Stream")]
|
||||
[HelpURL("https://developers.abinteractive.net/cck/")]
|
||||
public class CVRParameterStream : MonoBehaviour, ICCK_Component
|
||||
{
|
||||
public enum ReferenceType
|
||||
{
|
||||
|
@ -12,12 +16,24 @@ namespace ABI.CCK.Components
|
|||
Spawnable = 2
|
||||
}
|
||||
|
||||
[NotKeyable]
|
||||
public ReferenceType referenceType = ReferenceType.World;
|
||||
|
||||
public List<CVRParameterStreamEntry> entries = new List<CVRParameterStreamEntry>();
|
||||
public List<CVRParameterStreamEntry> entries = new();
|
||||
|
||||
public bool onlyUpdateWhenHeld;
|
||||
public bool onlyUpdateWhenAttached;
|
||||
public bool onlyUpdateWhenControlled;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
// ignored, required to make the enabled checkbox display
|
||||
}
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
#region CVRParameterStreamEntry Class
|
||||
|
||||
[Serializable]
|
||||
public class CVRParameterStreamEntry
|
||||
{
|
||||
public enum Type
|
||||
|
@ -47,14 +63,46 @@ namespace ABI.CCK.Components
|
|||
LocalPlayerHudEnabled = 220,
|
||||
LocalPlayerNameplatesEnabled = 230,
|
||||
LocalPlayerHeight = 240,
|
||||
LocalPlayerControllerType = 250,
|
||||
LocalPlayerLeftControllerType = 250,
|
||||
LocalPlayerRightControllerType = 251,
|
||||
LocalPlayerFullBodyEnabled = 260,
|
||||
TriggerLeftValue = 270,
|
||||
TriggerRightValue = 280,
|
||||
GripLeftValue = 290,
|
||||
GripRightValue = 300,
|
||||
GrippedObjectLeft = 310,
|
||||
GrippedObjectRight = 320
|
||||
GrippedObjectRight = 320,
|
||||
AvatarHeight = 400,
|
||||
AvatarUpright = 401,
|
||||
TransformGlobalPositionX = 500,
|
||||
TransformGlobalPositionY = 501,
|
||||
TransformGlobalPositionZ = 502,
|
||||
TransformGlobalRotationX = 510,
|
||||
TransformGlobalRotationY = 511,
|
||||
TransformGlobalRotationZ = 512,
|
||||
TransformLocalPositionX = 520,
|
||||
TransformLocalPositionY = 521,
|
||||
TransformLocalPositionZ = 522,
|
||||
TransformLocalRotationX = 530,
|
||||
TransformLocalRotationY = 531,
|
||||
TransformLocalRotationZ = 532,
|
||||
FluidVolumeSubmerged = 600,
|
||||
FluidVolumeDepth = 601,
|
||||
FluidVolumeTimeSinceEntered = 602,
|
||||
FluidVolumeTimeSinceExit = 603,
|
||||
InputCarSteering = 1000,
|
||||
InputCarAccelerate = 1001,
|
||||
InputCarBrake = 1002,
|
||||
InputCarHandbrake = 1003,
|
||||
InputCarBoost = 1004,
|
||||
InputMovementX = 1100,
|
||||
InputMovementY = 1101,
|
||||
InputLookX = 1110,
|
||||
InputLookY = 1111,
|
||||
InputJump = 1120,
|
||||
|
||||
SeedOwner = 90000,
|
||||
SeedInstance = 90001,
|
||||
}
|
||||
|
||||
public Type type = Type.TimeSeconds;
|
||||
|
@ -64,7 +112,7 @@ namespace ABI.CCK.Components
|
|||
Animator = 0,
|
||||
VariableBuffer = 1,
|
||||
AvatarAnimator = 2,
|
||||
CustomFloat = 3,
|
||||
CustomFloat = 3
|
||||
}
|
||||
|
||||
public TargetType targetType = TargetType.Animator;
|
||||
|
@ -86,7 +134,7 @@ namespace ABI.CCK.Components
|
|||
CompareMoreThenEquals = 121,
|
||||
CompareMoreThen = 131,
|
||||
Mod = 141,
|
||||
Pow = 151,
|
||||
Pow = 151
|
||||
}
|
||||
|
||||
public ApplicationType applicationType = ApplicationType.Override;
|
||||
|
@ -97,4 +145,6 @@ namespace ABI.CCK.Components
|
|||
|
||||
public string parameterName;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue