Zwischenstand: CullHint-Workaround gegen liegenden Charakter + stripEmbeddedClips-Fix

- WorldScene: Charakter wird beim Laden mit CullHint.Always versteckt, erst nach
  setupAnimationContext (idle läuft) wieder sichtbar
- WorldScene: stripEmbeddedClips nutzt jetzt AnimationLibrary.findAssetRoot() statt
  hartkodierter Pfad-Liste; besseres Logging wenn Datei nicht gefunden
- AnimPreviewState: Modell beim Laden versteckt (CullHint.Always), erst bei playClip
  sichtbar; stopAll versteckt Modell wieder
- PlayerInputControl: tryPlay setzt Action VOR SkinningControl-Aktivierung

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 22:03:48 +02:00
parent 7a3b2b8733
commit d3c6e8ed77
12 changed files with 45 additions and 25 deletions

View File

@@ -249,9 +249,11 @@ public class AnimPreviewState extends BaseAppState {
try {
Spatial model = loadFresh(assetPath);
// SkinningControl nur aktiv lassen wenn eine Animation läuft,
// sonst kollabiert das Mesh durch uninitalisierte Skin-Matrizen.
// SkinningControl deaktiviert + Modell unsichtbar bis Animation läuft:
// das Armature-Node hat Rx(90°) aus dem GLB-Import → ohne Animation liegt
// das Mesh auf dem Boden (Bind-Pose × Rx90° = liegender Charakter).
setSkinningEnabled(model, false);
model.setCullHint(com.jme3.scene.Spatial.CullHint.Always);
// Im Animations-Editor soll der Charakter immer am Ursprung stehen.
// Eventuelle Translation die beim GLB-Export eingebacken wurde entfernen.
@@ -348,6 +350,8 @@ public class AnimPreviewState extends BaseAppState {
// SkinningControls auf dem gesamten Modell aktivieren AnimComposer und
// SkinningControl sitzen oft auf verschiedenen Geschwisterknoten.
setSkinningEnabled(currentModel, true);
// Modell erst nach Animation sichtbar machen (CullHint aus loadModel)
currentModel.setCullHint(com.jme3.scene.Spatial.CullHint.Inherit);
playOnSpatial(currentModel, clipName);
}
@@ -380,6 +384,7 @@ public class AnimPreviewState extends BaseAppState {
if (currentModel != null) {
stopOnSpatial(currentModel);
setSkinningEnabled(currentModel, false);
currentModel.setCullHint(com.jme3.scene.Spatial.CullHint.Always);
}
}