com um clique
f8-features-tween-workflow
// Use when implementing or troubleshooting Tween feature workflows — tween animations, sequences, chain calls, UI relative motion, and coroutine/async support in F8Framework.
// Use when implementing or troubleshooting Tween feature workflows — tween animations, sequences, chain calls, UI relative motion, and coroutine/async support in F8Framework.
Use when implementing or troubleshooting Audio feature workflows — BGM, voice, SFX, 3D audio, volume control, and AudioMixer in F8Framework.
Use when implementing or troubleshooting ExcelTool feature workflows — config table loading, Excel binary/JSON generation, variant support, and runtime data access in F8Framework.
Use when working with Module editor tools — right-click context menu for creating Module, ModuleMono, StaticModule, and ActivityModule templates in F8Framework.
Use when implementing or troubleshooting Module feature workflows — ModuleCenter lifecycle, module creation, StaticModule, ActivityModule, update attributes in F8Framework.
Use as the routing skill for selecting the correct F8Framework layer skill chain across foundation, features, editor, tools, and build.
Use when working with Assembly Reflection tools — type discovery, reflection utilities, and assembly scanning in F8Framework.
| name | f8-features-tween-workflow |
| description | Use when implementing or troubleshooting Tween feature workflows — tween animations, sequences, chain calls, UI relative motion, and coroutine/async support in F8Framework. |
⚠️ IMPORTANT: Before using this feature, you MUST formally initialize F8Framework in the launch sequence. Ensure
ModuleCenter.Initialize(this);has run first, then create the required module, for exampleFF8.Tween = ModuleCenter.CreateModule<Tween>();.
| Class | Role |
|---|---|
TweenManager | Core module. Access via FF8.Tween. |
BaseTween | Tween handle with chain methods. |
SequenceManager | Creates and manages animation sequences. |
Ease | Easing curves (Linear, EaseOutQuad, EaseOutBounce, etc.). |
LoopType | Restart, Flip, Incremental, Yoyo. |
gameObject.ScaleTween(Vector3.one * 2f, 1f); // Scale
gameObject.RotateTween(Vector3.one, 1f); // Rotate
gameObject.EulerAnglesTween(Vector3.one * 360f, 1f); // Euler rotation
gameObject.Move(Vector3.one, 1f); // World move
gameObject.MoveAtSpeed(Vector3.one, 2f); // Move at speed
gameObject.LocalMove(Vector3.one, 1f); // Local move
gameObject.LocalMoveAtSpeed(Vector3.one, 1f); // Local move at speed
gameObject.GetComponent<CanvasGroup>().Fade(0f, 1f); // Fade
gameObject.GetComponent<Image>().ColorTween(Color.green, 1f); // Color
gameObject.GetComponent<Image>().FillAmountTween(1f, 1f); // Fill
gameObject.ShakePosition(Vector3.one, shakeCount: 8, t: 0.05f, fadeOut: false);
gameObject.ShakePositionAtSpeed(Vector3.one, shakeCount: 8, speed: 5f, fadeOut: false);
gameObject.ShakeRotation(Vector3.one);
gameObject.ShakeScale(Vector3.one);
gameObject.PathTween(points, duration: 1f, pathType: PathType.CatmullRom,
pathMode: PathMode.Ignore, resolution: 10, closePath: false);
text.StringTween("", "Hello!", 1f, richTextEnabled: true,
ScrambleMode.Custom, scrambleChars: "*");
BaseTween tween = gameObject.Move(Vector3.one, 10f)
.SetEase(Ease.EaseOutQuad)
.SetOnComplete(OnDone)
.SetDelay(2f)
.SetEvent(OnMidway, 2.5f)
.SetLoopType(LoopType.Yoyo, 3)
.SetUpdateMode(UpdateMode.Update)
.SetOwner(gameObject)
.SetIgnoreTimeScale(true)
.SetUseSmoothDeltaTime(true) // Smooth visual motion; ignored when SetIgnoreTimeScale(true)
.SetCustomId("myTween")
.SetAutoKill(false);
FF8.Tween.SetCurrentTime(id, 5f); // By id
FF8.Tween.SetCurrentTime("customId", 5f); // By custom id
FF8.Tween.SetProgress(id, 0.5f);
FF8.Tween.Complete(id);
FF8.Tween.ReplayReset(id);
FF8.Tween.SetIsPause(id, true);
FF8.Tween.SetIgnoreTimeScale(id, true);
FF8.Tween.SetUseSmoothDeltaTime(id, true);
FF8.Tween.CancelTween(id);
gameObject.CancelAllTweens();
FF8.Tween.ValueTween(0f, 100f, 3f).SetOnUpdateFloat((float v) => { });
FF8.Tween.Move(gameObject, Vector3.one, 3f).SetOnUpdateVector3((Vector3 v) => { });
// Move UI by viewport-relative coordinates (0,0)=bottom-left, (1,1)=top-right
rectTransform.MoveUI(new Vector2(1f, 1f), canvasRect, 1f)
.SetEase(Ease.EaseOutBounce);
var seq = FF8.Tween.GetSequence();
seq.Append(tween1); // Sequential
seq.Join(tween2); // Parallel with previous
seq.Append(() => LogF8.Log("Done")); // Callback
seq.SetOnComplete(() => { });
seq.SetLoops(3); // -1 = infinite
seq.RunAtTime(() => { }, 1.5f); // Event at specific time
seq.RunAtTime(tween3, 2.0f); // Tween at specific time
FF8.Tween.KillSequence(seq); // Stop and recycle
// Coroutine
yield return gameObject.Move(Vector3.one, 1f);
yield return sequence;
// async/await
await gameObject.Move(Vector3.one, 1f);
await sequence;
MoveUI() with canvas-relative coordinates.SetUseSmoothDeltaTime(true) only for visual tweens that should smooth frame-time spikes.SetAutoKill(false) if you need to replay or hold references.| Error | Cause | Solution |
|---|---|---|
| Tween reference is stale | Auto-killed and recycled | Use SetAutoKill(false) |
| UI animation jumps | Wrong coordinate space | Use MoveUI for viewport-relative |
| Tween not playing during pause | TimeScale is 0 | Use SetIgnoreTimeScale(true) |
| Visual tween jumps after frame spike | Raw deltaTime catches up immediately | Use SetUseSmoothDeltaTime(true) on that tween |