Integrate humanoid walk/run animations and per-clip pose speed sliders

- Import Mixamo humanoid Walking + Running FBX, switch rig type to Humanoid
- Wire walkClip/runClip with per-clip speeds on Pose_Idle (walk 1.4, run 1.5)
- Add per-animation speed sliders (Range 0.1-3, default 1) to PlayerPose SO,
  applied per frame in PlayerPoseController for live tuning
- Reorganize pose assets: replace Pose_TPose with Pose_Hold, prune legacy
  Paintman-Run/-TPose .anim and paintman_UV.FBX
- Ignore UMotion plugin data/editor folders

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 4.8 committed 2026-06-26 17:04:21 +02:00
1 parent dcfd668422
commit 5dd35dd0f9
24 files changed
+40464 -2273

No files matched your search

+40 -4
View File
@@ -1,9 +1,10 @@
using UnityEngine;
/// <summary>
/// A selectable player pose: an <see cref="AnimationClip"/> held while the player is idle, plus a
/// y-offset applied to the visual model only while stuck to the ceiling (so the pose hangs at the
/// right height). The first ScriptableObject in this project.
/// A selectable player pose: an idle <see cref="AnimationClip"/> held while the player stands still,
/// plus optional walk and run clips that the pose system plays itself (the Animator stays empty) while
/// moving on the ground, and a y-offset applied to the visual model only while stuck to the ceiling
/// (so the pose hangs at the right height). The first ScriptableObject in this project.
///
/// Named PlayerPose (not Pose) to avoid shadowing the built-in UnityEngine.Pose struct, mirroring
/// why the controller is PlayerCharacterController and not just "PlayerController".
@@ -16,13 +17,48 @@ public class PlayerPose : ScriptableObject
"other hierarchies will not retarget.")]
[SerializeField] private AnimationClip clip;
[Tooltip("Playback speed multiplier for the idle clip. 1 = authored speed.")]
[Range(0.1f, 3f)]
[SerializeField] private float clipSpeed = 1f;
[Tooltip("Optional. Played instead of the idle clip while walking on the ground (moving, not " +
"sprinting). Leave empty to keep holding the idle pose while walking. Should loop.")]
[SerializeField] private AnimationClip walkClip;
[Tooltip("Playback speed multiplier for the walk clip. 1 = authored speed.")]
[Range(0.1f, 3f)]
[SerializeField] private float walkClipSpeed = 1f;
[Tooltip("Optional. Played instead of the idle clip while sprinting on the ground. Leave empty to " +
"keep holding the idle pose while sprinting. Should loop.")]
[SerializeField] private AnimationClip runClip;
[Tooltip("Playback speed multiplier for the run clip. 1 = authored speed.")]
[Range(0.1f, 3f)]
[SerializeField] private float runClipSpeed = 1f;
[Tooltip("Local-up offset added to the visual model ONLY while stuck to the ceiling, so the pose " +
"hangs at the right height. Ignored on the ground and on walls. Meters.")]
[SerializeField] private float ceilingYOffset;
/// <summary>Idle clip for this pose (may be null).</summary>
/// <summary>Idle clip held while the player stands still in this pose (may be null).</summary>
public AnimationClip Clip => clip;
/// <summary>Playback speed multiplier for the idle clip (1 = authored speed).</summary>
public float ClipSpeed => clipSpeed;
/// <summary>Optional clip played while walking on the ground; null = hold the idle pose.</summary>
public AnimationClip WalkClip => walkClip;
/// <summary>Playback speed multiplier for the walk clip (1 = authored speed).</summary>
public float WalkClipSpeed => walkClipSpeed;
/// <summary>Optional clip played while sprinting on the ground; null = hold the idle pose.</summary>
public AnimationClip RunClip => runClip;
/// <summary>Playback speed multiplier for the run clip (1 = authored speed).</summary>
public float RunClipSpeed => runClipSpeed;
/// <summary>Local-up offset applied to the model only while on the ceiling.</summary>
public float CeilingYOffset => ceilingYOffset;
}