Wall-climb mesh lean + separate climb/mantle/sprint speeds; reworked rig
PlayerCharacterController: - Wall lean now moves only the visual model + its paint collider (auto-resolved mesh root parenting both renderer and bones), not the CharacterController capsule, so the mesh can sink into the wall (wallMaxInset) as well as lean out (wallMaxOffset); capsule stays flush. - Lean eases back to the authored pose when leaving the wall instead of snapping. - Sprint multiplier now also applies while wall/ceiling climbing. - Separate wallMantleSpeedMultiplier for pulling up over the top edge, independent of the climb speed. Assets: - Re-exported paintman_UV.FBX and added Paintman.blend: rescaled armature to mesh, merged seam duplicate vertices, fresh automatic weights, inner-thigh weight fix (no webbing on leg spread). - Updated anims, animator controller, font SDF and scene. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
cda1373979
commit
d867c617df
10 files changed
+15698
-2821
No files matched your search
File diff suppressed because it is too large.
Load diff
+262
-190
@@ -19,7 +19,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: 0, y: 0, z: 74.851}
|
||||
value: {x: 0, y: 0, z: 58.672}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
@@ -35,7 +35,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: 0, y: 0, z: -74.714}
|
||||
value: {x: 0, y: 0, z: -58.672}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
@@ -46,45 +46,45 @@ AnimationClip:
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
- curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: 0, y: 0, z: -122.435}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
||||
outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R
|
||||
- curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: 0, y: 0, z: 122.43}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
||||
outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L
|
||||
m_PositionCurves:
|
||||
- curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: 0.66, y: 7.25, z: 0}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
||||
outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
- curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: -0.65, y: 7.05, z: 0}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
||||
outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
- curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: -0.79, y: 5.73, z: 0}
|
||||
value: {x: -0.069, y: 0.211, z: 0}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
@@ -100,7 +100,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: 0.74, y: 5.73, z: -0}
|
||||
value: {x: 0.069, y: 0.211, z: -0}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
@@ -121,24 +121,6 @@ AnimationClip:
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 3536277082
|
||||
attribute: 1
|
||||
script: {fileID: 0}
|
||||
typeID: 4
|
||||
customType: 0
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
- serializedVersion: 2
|
||||
path: 1714018643
|
||||
attribute: 1
|
||||
script: {fileID: 0}
|
||||
typeID: 4
|
||||
customType: 0
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
- serializedVersion: 2
|
||||
path: 2919828665
|
||||
attribute: 1
|
||||
@@ -175,6 +157,24 @@ AnimationClip:
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
- serializedVersion: 2
|
||||
path: 1409692122
|
||||
attribute: 4
|
||||
script: {fileID: 0}
|
||||
typeID: 4
|
||||
customType: 4
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
- serializedVersion: 2
|
||||
path: 2919828665
|
||||
attribute: 4
|
||||
script: {fileID: 0}
|
||||
typeID: 4
|
||||
customType: 4
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
pptrCurveMapping: []
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
@@ -197,69 +197,6 @@ AnimationClip:
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves:
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0.66
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 7.25
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
@@ -308,7 +245,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 74.851
|
||||
value: 58.672
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -323,69 +260,6 @@ AnimationClip:
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -0.65
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 7.05
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
@@ -434,7 +308,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -74.714
|
||||
value: -58.672
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -455,7 +329,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -0.79
|
||||
value: -0.069
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -476,7 +350,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 5.73
|
||||
value: 0.211
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -518,7 +392,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0.74
|
||||
value: 0.069
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -539,7 +413,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 5.73
|
||||
value: 0.211
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -575,6 +449,132 @@ AnimationClip:
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -122.435
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 122.43
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
m_EulerEditorCurves:
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
@@ -583,8 +583,8 @@ AnimationClip:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
attribute: m_LocalEulerAngles.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
@@ -596,7 +596,19 @@ AnimationClip:
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
@@ -608,7 +620,31 @@ AnimationClip:
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
@@ -648,6 +684,42 @@ AnimationClip:
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
||||
+194
-122
@@ -19,7 +19,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: -16.569, y: 4.611, z: -32.197}
|
||||
value: {x: -10.006, y: 0.447, z: -31.238}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
@@ -35,7 +35,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: -23.82, y: -6.851, z: 39.707}
|
||||
value: {x: -16.156, y: -0.354, z: 37.479}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
@@ -46,13 +46,12 @@ AnimationClip:
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
m_PositionCurves:
|
||||
- curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: -0.29, y: 3.55, z: 0}
|
||||
value: {x: -10.853, y: 0, z: 0}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
@@ -62,13 +61,13 @@ AnimationClip:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L/lower_arm_L
|
||||
- curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: {x: 0.44, y: 3.02, z: 0}
|
||||
value: {x: -10.345, y: 0, z: 0}
|
||||
inSlope: {x: 0, y: 0, z: 0}
|
||||
outSlope: {x: 0, y: 0, z: 0}
|
||||
tangentMode: 0
|
||||
@@ -78,7 +77,8 @@ AnimationClip:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R/lower_arm_R
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves: []
|
||||
@@ -89,24 +89,6 @@ AnimationClip:
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 3536277082
|
||||
attribute: 1
|
||||
script: {fileID: 0}
|
||||
typeID: 4
|
||||
customType: 0
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
- serializedVersion: 2
|
||||
path: 1714018643
|
||||
attribute: 1
|
||||
script: {fileID: 0}
|
||||
typeID: 4
|
||||
customType: 0
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
- serializedVersion: 2
|
||||
path: 3536277082
|
||||
attribute: 4
|
||||
@@ -125,6 +107,24 @@ AnimationClip:
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
- serializedVersion: 2
|
||||
path: 1953922141
|
||||
attribute: 4
|
||||
script: {fileID: 0}
|
||||
typeID: 4
|
||||
customType: 4
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
- serializedVersion: 2
|
||||
path: 3747558187
|
||||
attribute: 4
|
||||
script: {fileID: 0}
|
||||
typeID: 4
|
||||
customType: 4
|
||||
isPPtrCurve: 0
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
pptrCurveMapping: []
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
@@ -153,7 +153,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -16.569
|
||||
value: -10.006
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -174,7 +174,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 4.611
|
||||
value: 0.447
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -195,7 +195,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -32.197
|
||||
value: -31.238
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -216,70 +216,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -0.29
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 3.55
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -23.82
|
||||
value: -16.156
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -300,7 +237,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -6.851
|
||||
value: -0.354
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -321,7 +258,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 39.707
|
||||
value: 37.479
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -342,7 +279,7 @@ AnimationClip:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0.44
|
||||
value: -10.853
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
@@ -352,32 +289,11 @@ AnimationClip:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
attribute: localEulerAnglesRaw.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L/lower_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 3.02
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
@@ -394,12 +310,132 @@ AnimationClip:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalPosition.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R
|
||||
attribute: localEulerAnglesRaw.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L/lower_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L/lower_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: -10.345
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R/lower_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R/lower_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 136
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: localEulerAnglesRaw.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R/lower_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 16
|
||||
m_EulerEditorCurves:
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L/lower_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L/lower_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_L/upper_arm_L/lower_arm_L
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
@@ -472,6 +508,42 @@ AnimationClip:
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.x
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R/lower_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.y
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R/lower_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve: []
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
attribute: m_LocalEulerAngles.z
|
||||
path: amm/loot/spine1/spine2/spine3/shoulder_R/upper_arm_R/lower_arm_R
|
||||
classID: 4
|
||||
script: {fileID: 0}
|
||||
flags: 0
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
||||
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c2044ff1352a6bb4586d6d04b59012b7
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -88,10 +88,10 @@ AnimatorStateMachine:
|
||||
m_ChildStates:
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -6714276574684263144}
|
||||
m_Position: {x: 280, y: -10, z: 0}
|
||||
m_Position: {x: 330, y: 10, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -6819265730547739275}
|
||||
m_Position: {x: 260, y: 60, z: 0}
|
||||
m_Position: {x: 320, y: 100, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -1498405215906516480}
|
||||
m_Position: {x: 150, y: -110, z: 0}
|
||||
@@ -111,7 +111,7 @@ AnimatorStateMachine:
|
||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
||||
m_ExitPosition: {x: 570, y: -10, z: 0}
|
||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
||||
m_DefaultState: {fileID: -6819265730547739275}
|
||||
m_DefaultState: {fileID: -6714276574684263144}
|
||||
--- !u!1102 &-2107490064458262391
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
|
||||
Binary file not shown.
+118
-132
@@ -565,7 +565,7 @@ MonoBehaviour:
|
||||
Enabled: 1
|
||||
DistanceLimit: 0
|
||||
MinimumOcclusionTime: 0
|
||||
CameraRadius: 0.2
|
||||
CameraRadius: 0.07
|
||||
UseFollowTarget:
|
||||
Enabled: 0
|
||||
YOffset: 0
|
||||
@@ -1341,6 +1341,33 @@ MonoBehaviour:
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
CustomBlends: {fileID: 0}
|
||||
--- !u!1 &341947179 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 6583767446015258322, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
m_PrefabInstance: {fileID: 821516643}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!95 &341947181
|
||||
Animator:
|
||||
serializedVersion: 7
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 341947179}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000, guid: db81cb9b04dc81e4bbb493a273d47245, type: 2}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_AnimatePhysics: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!1 &347639556
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1840,33 +1867,6 @@ Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 4009941363576130, guid: a8cba3361c8f7724e8899289f1efa8cc, type: 3}
|
||||
m_PrefabInstance: {fileID: 830003388}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &597997895 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: -7694449539802768922, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
m_PrefabInstance: {fileID: 821516643}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!95 &597997897
|
||||
Animator:
|
||||
serializedVersion: 7
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 597997895}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000, guid: db81cb9b04dc81e4bbb493a273d47245, type: 2}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_AnimatePhysics: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!1001 &607565146
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1994,69 +1994,6 @@ PrefabInstance:
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 29636f40562819649b730c52f1babbcb, type: 3}
|
||||
--- !u!1 &682237518 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: -8278657895335465921, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
m_PrefabInstance: {fileID: 821516643}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &682237521
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 682237518}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5fc799adb27d5ea45990b5522b75ddda, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::MeshPainter
|
||||
brushShader: {fileID: 0}
|
||||
dilateShader: {fileID: 0}
|
||||
packMsShader: {fileID: 0}
|
||||
persistPaint: 1
|
||||
saveId:
|
||||
pipette: 0
|
||||
spray: 0
|
||||
sprayDots: 24
|
||||
sprayDotSizeMin: 0.05
|
||||
sprayDotSizeMax: 0.18
|
||||
sprayDotAlphaMin: 0.25
|
||||
sprayDotAlphaMax: 1
|
||||
useGpu: 1
|
||||
paintAlbedo: 1
|
||||
paintMetallicSmoothness: 0
|
||||
paintOcclusion: 0
|
||||
paintEmission: 0
|
||||
brushColor: {r: 0.6, g: 0.6, b: 1, a: 1}
|
||||
metallic: 1
|
||||
smoothness: 1
|
||||
metallicSmoothnessOpacity: 1
|
||||
occlusion: 1
|
||||
occlusionOpacity: 1
|
||||
emissionColor: {r: 1, g: 0.6, b: 0, a: 1}
|
||||
emissionIntensity: 20
|
||||
brushSize: 50
|
||||
brushMasks:
|
||||
- {fileID: 2800000, guid: d07c01c40cc7be54da0ff3ae52484cd2, type: 3}
|
||||
- {fileID: 2800000, guid: ccc205272b051834eb39593f647c7bf1, type: 3}
|
||||
- {fileID: 2800000, guid: 04bc55e2853356e4f999b995d0066b33, type: 3}
|
||||
- {fileID: 2800000, guid: 25780adbe09da488ba079bc33c4bbf0f, type: 3}
|
||||
- {fileID: 2800000, guid: 25780adbe09da488ba079bc33c4bbf0f, type: 3}
|
||||
- {fileID: 2800000, guid: 25780adbe09da488ba079bc33c4bbf0f, type: 3}
|
||||
activeBrushIndex: 0
|
||||
brushAlignment: 0
|
||||
brushRotation: 0
|
||||
paintOnMoveOnly: 1
|
||||
paintInterval: 0
|
||||
previewMode: 2
|
||||
previewOpacity: 1
|
||||
textureSize: 1024
|
||||
baseColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
|
||||
paddingTexels: 2
|
||||
paintCamera: {fileID: 0}
|
||||
updateColliderEveryFrame: 1
|
||||
previewShader: {fileID: 0}
|
||||
--- !u!1 &686187286
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -2515,37 +2452,9 @@ PrefabInstance:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 1141039639}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.7071068
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0.7071068
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: -90
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
@@ -2559,20 +2468,28 @@ PrefabInstance:
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -658204318216070287, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0.0002354744
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: paintman_UV
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3152786563411696340, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents:
|
||||
- targetCorrespondingSourceObject: {fileID: -7694449539802768922, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
- targetCorrespondingSourceObject: {fileID: 6583767446015258322, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 597997897}
|
||||
- targetCorrespondingSourceObject: {fileID: -8278657895335465921, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
addedObject: {fileID: 341947181}
|
||||
- targetCorrespondingSourceObject: {fileID: 3763709765074082564, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 682237521}
|
||||
addedObject: {fileID: 1610102374}
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
--- !u!1 &829281440
|
||||
GameObject:
|
||||
@@ -3258,7 +3175,9 @@ MonoBehaviour:
|
||||
wallMinAngle: 60
|
||||
wallGrabMinPush: 0.3
|
||||
wallClimbSpeedMultiplier: 0.5
|
||||
wallMantleSpeedMultiplier: 0.5
|
||||
wallMaxOffset: 0.25
|
||||
wallMaxInset: 1.2
|
||||
wallOffsetSensitivity: 0.001
|
||||
wallRotateSensitivity: 0.2
|
||||
wallOffsetReturnSpeed: 2
|
||||
@@ -3267,6 +3186,7 @@ MonoBehaviour:
|
||||
ceilingGrabDistance: 0.3
|
||||
wallTopOutBoost: 1.2
|
||||
cameraOrbit: {fileID: 0}
|
||||
meshOffsetTarget: {fileID: 0}
|
||||
--- !u!143 &1129539840
|
||||
CharacterController:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -3362,13 +3282,13 @@ CharacterController:
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Height: 0.95
|
||||
m_Height: 1.3
|
||||
m_Radius: 0.1
|
||||
m_SlopeLimit: 59
|
||||
m_StepOffset: 0.15
|
||||
m_SkinWidth: 0.01
|
||||
m_MinMoveDistance: 0.001
|
||||
m_Center: {x: 0, y: 0.49, z: 0}
|
||||
m_Center: {x: 0, y: 0.66, z: 0}
|
||||
--- !u!114 &1141039642
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -3383,13 +3303,13 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::PlayerCharacterController
|
||||
persistPlayer: 1
|
||||
playerSaveId:
|
||||
moveSpeed: 4
|
||||
sprintSpeedMultiplier: 1.8
|
||||
moveSpeed: 2
|
||||
sprintSpeedMultiplier: 3.2
|
||||
acceleration: 30
|
||||
deceleration: 45
|
||||
cameraRelative: 1
|
||||
cameraTransform: {fileID: 0}
|
||||
animator: {fileID: 597997897}
|
||||
animator: {fileID: 341947181}
|
||||
runningParameter: Running
|
||||
rotateTowardMovement: 1
|
||||
rotationSpeed: 360
|
||||
@@ -3404,7 +3324,9 @@ MonoBehaviour:
|
||||
wallMinAngle: 60
|
||||
wallGrabMinPush: 0.3
|
||||
wallClimbSpeedMultiplier: 0.5
|
||||
wallMaxOffset: 0.25
|
||||
wallMantleSpeedMultiplier: 1.5
|
||||
wallMaxOffset: 0.1
|
||||
wallMaxInset: 0.2
|
||||
wallOffsetSensitivity: 0.001
|
||||
wallRotateSensitivity: 0.2
|
||||
wallOffsetReturnSpeed: 2
|
||||
@@ -3413,6 +3335,7 @@ MonoBehaviour:
|
||||
ceilingGrabDistance: 0.3
|
||||
wallTopOutBoost: 0.3
|
||||
cameraOrbit: {fileID: 0}
|
||||
meshOffsetTarget: {fileID: 0}
|
||||
--- !u!1 &1238479929
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -3884,7 +3807,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::GameModeManager
|
||||
player: {fileID: 1141039642}
|
||||
cameraInput: {fileID: 172071431}
|
||||
painter: {fileID: 682237521}
|
||||
painter: {fileID: 0}
|
||||
insect: {fileID: 0}
|
||||
switchKey: 3
|
||||
startModeIndex: 0
|
||||
@@ -3903,6 +3826,69 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1610102371 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 3763709765074082564, guid: 554c0bdf86263754d862d7effd04045b, type: 3}
|
||||
m_PrefabInstance: {fileID: 821516643}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &1610102374
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1610102371}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5fc799adb27d5ea45990b5522b75ddda, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::MeshPainter
|
||||
brushShader: {fileID: 0}
|
||||
dilateShader: {fileID: 0}
|
||||
packMsShader: {fileID: 0}
|
||||
persistPaint: 1
|
||||
saveId:
|
||||
pipette: 0
|
||||
spray: 0
|
||||
sprayDots: 24
|
||||
sprayDotSizeMin: 0.05
|
||||
sprayDotSizeMax: 0.18
|
||||
sprayDotAlphaMin: 0.25
|
||||
sprayDotAlphaMax: 1
|
||||
useGpu: 1
|
||||
paintAlbedo: 1
|
||||
paintMetallicSmoothness: 0
|
||||
paintOcclusion: 0
|
||||
paintEmission: 0
|
||||
brushColor: {r: 0.6, g: 0.6, b: 1, a: 1}
|
||||
metallic: 1
|
||||
smoothness: 1
|
||||
metallicSmoothnessOpacity: 1
|
||||
occlusion: 1
|
||||
occlusionOpacity: 1
|
||||
emissionColor: {r: 1, g: 0.6, b: 0, a: 1}
|
||||
emissionIntensity: 20
|
||||
brushSize: 50
|
||||
brushMasks:
|
||||
- {fileID: 2800000, guid: d07c01c40cc7be54da0ff3ae52484cd2, type: 3}
|
||||
- {fileID: 2800000, guid: ccc205272b051834eb39593f647c7bf1, type: 3}
|
||||
- {fileID: 2800000, guid: 04bc55e2853356e4f999b995d0066b33, type: 3}
|
||||
- {fileID: 2800000, guid: 25780adbe09da488ba079bc33c4bbf0f, type: 3}
|
||||
- {fileID: 2800000, guid: 25780adbe09da488ba079bc33c4bbf0f, type: 3}
|
||||
- {fileID: 2800000, guid: 25780adbe09da488ba079bc33c4bbf0f, type: 3}
|
||||
activeBrushIndex: 0
|
||||
brushAlignment: 0
|
||||
brushRotation: 0
|
||||
paintOnMoveOnly: 1
|
||||
paintInterval: 0
|
||||
previewMode: 2
|
||||
previewOpacity: 1
|
||||
textureSize: 1024
|
||||
baseColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
|
||||
paddingTexels: 2
|
||||
paintCamera: {fileID: 0}
|
||||
updateColliderEveryFrame: 1
|
||||
previewShader: {fileID: 0}
|
||||
--- !u!1001 &1673252827
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -4790,7 +4776,7 @@ MonoBehaviour:
|
||||
limitFrameRate: 1
|
||||
targetFps: 60
|
||||
disableVSyncWhenLimiting: 1
|
||||
vSyncCountWhenUnlimited: 0
|
||||
vSyncCountWhenUnlimited: 2
|
||||
--- !u!4 &2009475134
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -9,10 +9,11 @@ using UnityEngine.InputSystem;
|
||||
///
|
||||
/// Wall-climb (entered by pushing the move input into a wall): W/S climb straight up/down the
|
||||
/// wall at a constant speed, A/D strafe left/right relative to the camera, and the body always
|
||||
/// faces the wall. Holding the left mouse button and dragging up/down leans out from / back to
|
||||
/// the wall; holding the right mouse button and dragging left/right turns the body. Either pauses
|
||||
/// the camera orbit; the lean-out offset eases back to zero while moving, the turn is held until
|
||||
/// leaving the wall.
|
||||
/// faces the wall. Holding the left mouse button and dragging up/down leans the visual mesh out
|
||||
/// of or into the wall (only the model + its paint collider move; the capsule stays put, so the
|
||||
/// lean can sink into the wall); holding the right mouse button and dragging left/right turns the
|
||||
/// body. Either pauses the camera orbit; the lean offset eases back to zero while moving, the turn
|
||||
/// is held until leaving the wall.
|
||||
/// On leaving, the body eases back to its movement direction. Jumping detaches and works
|
||||
/// normally; re-grab is blocked while rising and resumes once falling and pushing into a wall.
|
||||
/// Reaching the top edge mantles the character over onto the surface.
|
||||
@@ -33,7 +34,7 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
[Tooltip("Horizontal movement speed (units/second).")]
|
||||
public float moveSpeed = 4f;
|
||||
|
||||
[Tooltip("Speed multiplier applied to ground movement while the sprint key (Left Shift) is held.")]
|
||||
[Tooltip("Speed multiplier applied to ground movement and wall/ceiling climbing while the sprint key (Left Shift) is held.")]
|
||||
public float sprintSpeedMultiplier = 1.8f;
|
||||
|
||||
[Tooltip("How quickly ground movement ramps up to the target speed (units/second²). Lower = more gradual start.")]
|
||||
@@ -100,8 +101,15 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
[Range(0f, 1f)]
|
||||
public float wallClimbSpeedMultiplier = 0.5f;
|
||||
|
||||
[Tooltip("Farthest the character can lean out from the wall via the mouse-drag offset (units).")]
|
||||
public float wallMaxOffset = 1.2f;
|
||||
[Tooltip("Speed multiplier for the mantle (pulling up over the top edge), independent of the climb speed. Multiplies moveSpeed; 1 = full walk speed, >1 = snappier pull-up.")]
|
||||
[Min(0f)]
|
||||
public float wallMantleSpeedMultiplier = 0.5f;
|
||||
|
||||
[Tooltip("Farthest the mesh can lean out from the wall via the mouse-drag offset (units).")]
|
||||
public float wallMaxOffset = .2f;
|
||||
|
||||
[Tooltip("Farthest the mesh can sink INTO the wall via the mouse-drag offset (units). Only the visual model + its paint collider move; the CharacterController capsule stays put, so this isn't blocked by the wall collider.")]
|
||||
public float wallMaxInset = .2f;
|
||||
|
||||
[Tooltip("Units the lean-out offset changes per pixel of vertical mouse drag (left button held).")]
|
||||
public float wallOffsetSensitivity = 0.01f;
|
||||
@@ -127,6 +135,9 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
[Tooltip("Camera orbit input; paused while dragging the wall-climb offset. Auto-found if empty.")]
|
||||
[SerializeField] private ThirdPersonOrbitInput cameraOrbit;
|
||||
|
||||
[Tooltip("Visual model root moved by the wall-climb lean offset (into/out of the wall) while the capsule stays put. Must parent both the skinned mesh and its bones. Auto-resolved from the SkinnedMeshRenderer if empty.")]
|
||||
[SerializeField] private Transform meshOffsetTarget;
|
||||
|
||||
/// <summary>
|
||||
/// When false, movement/jump input is ignored but gravity and ground contact
|
||||
/// keep running. Toggled by the GameModeManager.
|
||||
@@ -158,11 +169,14 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
private Vector3 _wallNormalAccum; // summed wall normals during the latest Move
|
||||
private bool _wallContactThisFrame;
|
||||
private float _lostContactTimer;
|
||||
private float _wallOffset; // current lean-out distance from the wall (mouse drag)
|
||||
private float _wallOffset; // signed mesh lean (mouse drag): + = out from the wall, - = into it; moves only the model, not the capsule
|
||||
private float _wallYaw; // body yaw offset from facing the wall (mouse drag); held until leaving
|
||||
private int _wallStrafeSign; // latched sideways direction (camera picks it once per strafe); 0 = unlatched
|
||||
private bool _offsetDragging; // true while the offset/rotation is being set (pauses camera orbit)
|
||||
private bool _climbLeftGround; // true once the capsule has left the ground while climbing (enables ground-detach)
|
||||
private Vector3 _meshBaseLocalPos; // meshOffsetTarget's authored local position; the lean offset is applied relative to this
|
||||
private float _meshOffsetResidual; // leftover mesh lean still easing back to 0 after leaving the wall (no longer climbing)
|
||||
private Vector3 _meshOffsetExitNormal; // wall normal latched at exit; the residual eases along it (live _wallNormal may shift on stray contact)
|
||||
private readonly RaycastHit[] _wallProbe = new RaycastHit[8];
|
||||
|
||||
// Mantle (top-out) state.
|
||||
@@ -181,6 +195,21 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
cameraTransform = Camera.main.transform;
|
||||
if (!cameraOrbit)
|
||||
cameraOrbit = FindFirstObjectByType<ThirdPersonOrbitInput>();
|
||||
|
||||
// Resolve the model root to offset: walk up from the skinned mesh to the topmost node still
|
||||
// under this transform, so it parents BOTH the renderer and its bones. Offsetting only the
|
||||
// renderer would move just the baked paint collider, not the bone-driven visible mesh.
|
||||
if (!meshOffsetTarget)
|
||||
{
|
||||
var smr = GetComponentInChildren<SkinnedMeshRenderer>();
|
||||
if (smr)
|
||||
{
|
||||
Transform t = smr.transform;
|
||||
while (t.parent && t.parent != transform) t = t.parent;
|
||||
meshOffsetTarget = t;
|
||||
}
|
||||
}
|
||||
if (meshOffsetTarget) _meshBaseLocalPos = meshOffsetTarget.localPosition;
|
||||
}
|
||||
|
||||
void Update()
|
||||
@@ -247,7 +276,7 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
// Frozen on the wall while control is off (e.g. paint mode): keep the
|
||||
// grip, no movement or gravity, so switching modes never drops us.
|
||||
if (ControlEnabled)
|
||||
ApplyWallClimbMovement(h, v, moveDir, jumpPressed, Time.deltaTime);
|
||||
ApplyWallClimbMovement(h, v, moveDir, jumpPressed, sprinting, Time.deltaTime);
|
||||
else
|
||||
_offsetDragging = false;
|
||||
if (cameraOrbit)
|
||||
@@ -260,6 +289,9 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
if (cameraOrbit)
|
||||
cameraOrbit.LookSuppressed = false;
|
||||
|
||||
// Glide the leftover wall lean back to the authored pose (set when leaving the wall).
|
||||
EaseMeshOffsetToRest(Time.deltaTime);
|
||||
|
||||
// A ground normal steeper than the slope limit is too steep to stand on
|
||||
// (also covers balancing on a sharp box edge).
|
||||
float slopeAngle = Vector3.Angle(_groundNormal, Vector3.up);
|
||||
@@ -365,6 +397,7 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
_verticalVelocity = 0f;
|
||||
_slideSpeed = 0f;
|
||||
_wallOffset = 0f;
|
||||
_meshOffsetResidual = 0f; // fresh grab: the climb path owns the mesh, drop any leftover ease
|
||||
_wallYaw = 0f;
|
||||
_wallStrafeSign = 0;
|
||||
_climbLeftGround = false;
|
||||
@@ -375,14 +408,15 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
/// Movement while climbing, for both walls and ceilings (distinguished by the surface
|
||||
/// normal). On a WALL: W/S climb straight up/down at a constant speed (camera pitch never
|
||||
/// tilts them), A/D strafe left/right relative to the camera, the body faces the wall, the
|
||||
/// left mouse button + vertical drag leans out via <see cref="_wallOffset"/>, and the right
|
||||
/// left mouse button + vertical drag leans the mesh out of / into the wall via
|
||||
/// <see cref="_wallOffset"/> (capsule stays put), and the right
|
||||
/// mouse button + horizontal drag turns the body via <see cref="_wallYaw"/>. On a
|
||||
/// CEILING: the body stays upright and moves WASD camera-relative in the horizontal plane
|
||||
/// (like on the ground), facing the move direction; the lean-out drag pulls down off the
|
||||
/// ceiling. Surface normal and gap are re-measured each frame; reaching a wall's top edge
|
||||
/// mantles, climbing a wall up into an overhang hands off to the ceiling.
|
||||
/// </summary>
|
||||
private void ApplyWallClimbMovement(float h, float v, Vector3 moveDir, bool jumpPressed, float dt)
|
||||
private void ApplyWallClimbMovement(float h, float v, Vector3 moveDir, bool jumpPressed, bool sprinting, float dt)
|
||||
{
|
||||
_offsetDragging = false;
|
||||
|
||||
@@ -495,10 +529,11 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
// Left button + vertical drag sets the lean-out offset (mouse down = away from the
|
||||
// surface; down off a ceiling); right button + horizontal drag turns the body (wall
|
||||
// only). The offset eases back to zero while moving and never detaches, the turn is
|
||||
// held until leaving the wall. Either drag pauses the camera orbit.
|
||||
// Left button + vertical drag sets the lean offset (mouse up = out from the surface, mouse
|
||||
// down = into it; the offset is signed and moves only the visual mesh, so it can sink into
|
||||
// the wall where the capsule can't); right button + horizontal drag turns the body (wall
|
||||
// only). The offset eases back to zero while moving and never detaches, the turn is held
|
||||
// until leaving the wall. Either drag pauses the camera orbit.
|
||||
bool offsetDrag = found && IsLeftMouseHeld();
|
||||
bool yawDrag = found && IsRightMouseHeld();
|
||||
if (offsetDrag || yawDrag)
|
||||
@@ -506,7 +541,7 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
_offsetDragging = true;
|
||||
Vector2 drag = ReadMouseDelta();
|
||||
if (offsetDrag)
|
||||
_wallOffset = Mathf.Clamp(_wallOffset - drag.y * wallOffsetSensitivity, 0f, wallMaxOffset);
|
||||
_wallOffset = Mathf.Clamp(_wallOffset - drag.y * wallOffsetSensitivity, -wallMaxInset, wallMaxOffset);
|
||||
if (yawDrag)
|
||||
_wallYaw += drag.x * wallRotateSensitivity;
|
||||
}
|
||||
@@ -514,19 +549,21 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
{
|
||||
_wallOffset = Mathf.MoveTowards(_wallOffset, 0f, wallOffsetReturnSpeed * dt);
|
||||
}
|
||||
ApplyMeshOffset(_wallOffset);
|
||||
|
||||
float climbSpeed = moveSpeed * wallClimbSpeedMultiplier;
|
||||
if (sprinting) climbSpeed *= sprintSpeedMultiplier;
|
||||
Vector3 velocity = Vector3.zero;
|
||||
if (alongSurface.sqrMagnitude > 1e-6f)
|
||||
velocity += alongSurface.normalized * climbSpeed;
|
||||
if (found)
|
||||
{
|
||||
// Smoothly approach the chosen standoff. Target one skin-width beyond the offset so
|
||||
// the capsule rests just outside the surface (offset 0 = flush): the controller's
|
||||
// depenetration never fights back, so there's no buzz and no quantizing deadzone is
|
||||
// needed. Exponential follow keeps it framerate-stable; clamp guards probe spikes.
|
||||
// Smoothly hold the capsule one skin-width off the surface (flush): the lean offset no
|
||||
// longer moves the capsule (only the visual mesh), so it always rests against the wall.
|
||||
// The controller's depenetration never fights back, so there's no buzz and no quantizing
|
||||
// deadzone is needed. Exponential follow keeps it framerate-stable; clamp guards spikes.
|
||||
const float maxPerpSpeed = 8f;
|
||||
float gapError = (_wallOffset + _controller.skinWidth) - gap;
|
||||
float gapError = _controller.skinWidth - gap;
|
||||
float follow = 1f - Mathf.Exp(-wallOffsetFollow * dt);
|
||||
velocity += _wallNormal * Mathf.Clamp(gapError * follow / dt, -maxPerpSpeed, maxPerpSpeed);
|
||||
}
|
||||
@@ -588,6 +625,38 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Offsets only the visual model (mesh + its baked paint collider) along the wall normal by the
|
||||
/// given signed distance (+ = out from the wall, - = into it), relative to the model's authored
|
||||
/// local position. The CharacterController capsule is untouched, so the lean can sink into the
|
||||
/// wall where the capsule would be blocked. Applied in the player's local space so it tracks the
|
||||
/// body yaw; offset 0 restores the authored pose.
|
||||
/// </summary>
|
||||
private void ApplyMeshOffset(float offset) => SetMeshLean(_wallNormal, offset);
|
||||
|
||||
/// <summary>
|
||||
/// Places the visual model at the given signed lean along <paramref name="dir"/> (world space),
|
||||
/// relative to its authored local pose. Local-space conversion tracks the live body yaw.
|
||||
/// </summary>
|
||||
private void SetMeshLean(Vector3 dir, float offset)
|
||||
{
|
||||
if (!meshOffsetTarget) return;
|
||||
Vector3 worldOffset = dir * offset;
|
||||
meshOffsetTarget.localPosition = _meshBaseLocalPos + transform.InverseTransformVector(worldOffset);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Eases the leftover lean back to the authored pose after leaving the wall, so the model glides
|
||||
/// home instead of snapping. Runs every non-climbing frame at the same rate as the in-climb
|
||||
/// return; the direction is the wall normal latched at exit (a fresh grab clears the residual).
|
||||
/// </summary>
|
||||
private void EaseMeshOffsetToRest(float dt)
|
||||
{
|
||||
if (_meshOffsetResidual == 0f) return;
|
||||
_meshOffsetResidual = Mathf.MoveTowards(_meshOffsetResidual, 0f, wallOffsetReturnSpeed * dt);
|
||||
SetMeshLean(_meshOffsetExitNormal, _meshOffsetResidual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raycasts from the character center toward the surface (along -_wallNormal) to find the
|
||||
/// current normal and the gap (surface clearance) to it. The capsule's support distance
|
||||
@@ -681,7 +750,7 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
private void MantleOverEdge(float dt)
|
||||
{
|
||||
_mantleTimer += dt;
|
||||
float speed = moveSpeed * wallClimbSpeedMultiplier;
|
||||
float speed = moveSpeed * wallMantleSpeedMultiplier;
|
||||
|
||||
Vector3 forward = -_wallNormal;
|
||||
forward.y = 0f;
|
||||
@@ -786,6 +855,10 @@ public partial class PlayerCharacterController : MonoBehaviour
|
||||
_isWallClimbing = false;
|
||||
_lostContactTimer = 0f;
|
||||
_verticalVelocity = 0f;
|
||||
// Hand the current lean off to the residual so it eases home (EaseMeshOffsetToRest)
|
||||
// instead of snapping; latch the normal since the live one may shift after detaching.
|
||||
_meshOffsetResidual = _wallOffset;
|
||||
_meshOffsetExitNormal = _wallNormal;
|
||||
_wallOffset = 0f;
|
||||
_wallYaw = 0f;
|
||||
_wallStrafeSign = 0;
|
||||
|
||||
Reference in new issue
Block a user