Анимация визуальной части через Tween
Короткое сжатие при приземлении: Tween меняет Visual, не физическое тело и не CollisionShape3D.
Отделите изображение от физики
В иерархии игрока меш расположен внутри Visual, а основная CollisionShape3D — рядом с ним, напрямую под телом. Поэтому масштаб Visual меняет изображение, не размер капсулы.
Прикрепите Scripts/LandingPulse.cs к Visual типа Entity3D:
using Reckfell;
public partial class LandingPulse : Entity3D
{
private Tween? _tween;
public void Pulse()
{
ResetVisual();
_tween = CreateTween();
_tween.SetTrans(Tween.TransitionType.Quad).SetEase(Tween.EaseType.Out);
_tween.TweenProperty(this, "scale", new Vector3(1.15f, 0.8f, 1.15f), 0.08);
_tween.TweenProperty(this, "scale", Vector3.One, 0.12);
}
public void ResetVisual()
{
if (_tween != null && _tween.IsValid())
_tween.Kill();
_tween = null;
Scale = Vector3.One;
}
public override void _ExitTree() => ResetVisual();
}Вызов
SquashPlayer получает ссылку на этот класс в _Ready() и вызывает Pulse() при приземлении после падения. CreateTween() создаёт Tween, связанный с этой Entity. Первый этап за 0.08 секунды делает изображение шире и ниже; второй за 0.12 секунды возвращает масштаб 1.
Строка "scale" — путь к свойству движка для TweenProperty(), не имя локальной переменной и не перевод отображаемой подписи. Передаются Vector3 и длительности в секундах.
Повторный вызов и удаление
Перед новой анимацией ResetVisual() останавливает прежний Tween через Kill() и возвращает масштаб 1. Иначе несколько анимаций могут одновременно менять одну величину. Прерванный Tween повторно не запускается: каждый Pulse() создаёт новый.
Сброс также вызывается при перезапуске персонажа и выходе Visual из дерева. Kill() сам по себе не возвращает свойство к исходному значению — это явно делает Scale = Vector3.One.
Ожидаемый результат: при приземлении кратко меняются пропорции изображения, движение и форма столкновения остаются прежними. Если меняется размер физики, проверьте, что скрипт прикреплён к дочернему Visual, а форма не стала его ребёнком. Для заранее записанных клипов и костной анимации используется другой набор инструментов; этот пример показывает процедурное изменение свойства.