In side head

〜ある技術者の記録〜

【Unity】LitMotionとPrimeTweenの比較

github.com

github.com

LitMotionとPrimeTweenは、どちらも従来の業界標準であるDOTweenに代わる 「次世代・超高性能・ゼロアロケーションGC発生なし)」 を謳うUnity用Tweenライブラリです。

結論から言うと、 どちらを選んでもパフォーマンスは劇的に向上します が、設計思想と使い勝手に明確な違いがあります。

以下に詳細な比較をまとめました。


1. 比較サマリー表

項目 LitMotion PrimeTween
コア技術 Unity Jobs System + Burst Compiler 高度に最適化されたC# (プーリング技術)
パフォーマンス 最強クラス (特に大量のオブジェクト動作時) 非常に高い (DOTweenより遥かに高速)
セットアップ 依存パッケージのインストールが必要
(Burst, Collections, Mathematics)
インポートするだけ (依存なし)
書き味 Builderパターン (構築してからBind)
LMotion.Create(...)
Staticメソッド / 拡張メソッド
Tween.Position(...)
直感性 プログラマ向け (構成が明快) DOTweenユーザーに馴染みやすい
Rx/Async連携 強力 (UniTask, R3とネイティブ連携) 標準機能で十分対応可能
安全性 ターゲット消失時の挙動を自分で管理する傾向 ターゲットがDestroyされたら自動で安全に停止

2. パフォーマンス比較

両者とも「ゼロアロケーション(実行時にゴミを出さない)」を達成していますが、アプローチが異なります。

  • LitMotion:

    • 仕組み: UnityのDOTS (Data-Oriented Technology Stack) 技術(Jobs System, Burst Compiler)をフル活用して並列処理を行います
    • 強み: 5,000〜10,000個といった大量のオブジェクトを同時に動かすような弾幕ゲームやパーティクル制御では、他を圧倒するパフォーマンスを出します
    • 注意点: Burstコンパイルが走るため、開発ビルド時に若干のコンパイル時間が乗ります(些細な差ですが)
  • PrimeTween:

    • 仕組み: 一般的なC#の最適化とキャッシュ/プーリング技術を極限まで高めています
    • 強み: Jobs Systemのオーバーヘッドがないため、少数のTween(UIのアニメーションなど)であればLitMotionと同等か、場面によってはごく僅かに速い場合もあります
    • 評価: 一般的なゲーム用途では十分すぎるほど高速です

判定: 大量演算なら LitMotion、手軽さと高速さのバランスなら PrimeTween


3. 書きやすさ (Syntax) の比較

ここが好みの分かれる最大のポイントです。

LitMotion (Builderパターン)

「値を作る」→「設定する」→「対象に紐付ける」という手順が明確です。

// LitMotionの書き方
LMotion.Create(0f, 10f, 2f) // 0から10まで2秒かけて
    .WithEase(Ease.OutQuad) // イージング設定
    .BindToPositionX(transform); // transform.position.x に紐付け

PrimeTween (メソッドコール/拡張メソッド)

「何を」「どうする」を一発で記述します。DOTweenに近いです。

// PrimeTweenの書き方
Tween.PositionX(transform, 10f, 2f, Ease.OutQuad);

// または拡張メソッド風
transform.DOMoveX(10f, 2f); // ※PrimeTweenにも拡張メソッドAPIがあります

判定: コードの構造化・美しさを好むなら LitMotion、短く書きたいなら PrimeTween


4. 停止・待機・イベント制御

非同期処理(async/await)やキャンセルの扱いに違いがあります。

LitMotion

MotionHandle という構造体を通して制御します。UniTaskR3 (Reactive Extensions) との親和性が設計レベルで考慮されています。

// ハンドルを取得して制御
var handle = LMotion.Create(0, 1, 1f).BindToPositionX(transform);

// 待機 (UniTaskが統合されているためスムーズ)
await handle; 

// 停止
handle.Cancel(); 

// Rx連携 (R3)
Observable.EveryUpdate().Subscribe(_ => ...); // などの連携が強力

PrimeTween

Tween 構造体を返します。ターゲット(GameObject)が死んだときの「安全性」を強く意識しています。

// Tween構造体を取得
Tween t = Tween.PositionX(transform, 10f, 1f);

// 待機
await t; 

// 停止
t.Stop(); 

// 特徴: 安全性
// PrimeTweenは、transformがDestroyされると自動的にTweenも止まり、エラーを吐きません。
// LitMotion等では、適切にCancelOnDestroyを設定しないとエラーになる場合があります。

5. 機能面の違い

  • LitMotion:

    • CancelOnDestroy などのライフサイクル管理を明示的に書くスタイル(Rx的)
    • テキスト(TextMeshPro)の文字送りアニメーションなどが標準で強力(ScrambleModeなど)
    • 依存パッケージ(Burst, Collections)が必要なため、プロジェクトのセットアップが少し増える
  • PrimeTween:

    • シェイク(Shake)やパンチ(Punch)などの演出系プリセットが豊富で、感覚的に使いやすい
    • インスペクターでのデバッグ機能などが親切
    • パッケージ依存がなく、導入が非常に楽

どのライブラリを選ぶべきか?

LitMotion がおすすめな場合

  • UniTaskR3 / UniRx をガッツリ使っているプロジェクト
  • 大量の弾幕、UIパーティクルなど、極限のパフォーマンスが必要な場合
  • 「魔法のような挙動」よりも「明示的でコントロール可能なコード」を好む場合
  • MagicOnionなど、Cysharp系/AnnulusGames系の技術スタックが好き
  • DOTween Animation ComponentのようなInspectorからアニメーションを作りたい

PrimeTween がおすすめな場合

  • DOTweenからの移行を考えていて、似た使用感でパフォーマンスだけ上げたい場合
  • Burst Compilerなどの追加パッケージを入れたくない、シンプルに保ちたい場合
  • UIアニメーションやキャラのちょっとした動きなど、一般的な用途がメイン
  • 「ターゲットが消えたら勝手に止まってほしい」という安全性を重視する場合

パフォーマンステスト

github.com


ドキュメントとサポート

LitMotionとPrimeTweenは、開発者の背景が異なるため、ドキュメントの言語やサポート体制に明確な違いがあります。

特に日本の開発者にとっては、「日本語の一次情報があるかどうか」 が最大の分岐点となります。

1. ドキュメントとサポートの比較サマリー

項目 LitMotion PrimeTween
開発者 日本人の個人開発者 (Annulus Games) 海外の開発者 (Kyrylo Kuzyk)
ドキュメント言語 日本語 (ネイティブ) / 英語 英語のみ
ドキュメント形式 体系的なマニュアル
(導入→基礎→応用とページが分かれている)
超長文のREADME (1ページ)
(機能一覧、比較、APIが1ページに集約)
技術記事 (Qiita/Zenn) 非常に多い
(作者本人やコミュニティによる解説が豊富)
少ない
(基本は翻訳記事や公式README頼み)
サポート対応 GitHub Issues / X (Twitter)での日本語メンション可 GitHub Issues / Unity Forum (英語必須)
更新頻度 活発 (機能追加やUniTask/R3対応など) 非常に活発 (バグ修正や最適化が早い)

2. LitMotion の特徴

🇯🇵 日本語ネイティブにとっての「安心感」

LitMotionの最大の利点は、公式ドキュメントが完璧な日本語で書かれていること です。翻訳調ではなく、最初から日本人に向けて書かれているため、仕様の細かなニュアンスや「なぜこの機能が必要なのか」という背景まで理解しやすいです。

  • 構成:
    • 「インストール」「基本的な使い方」「Rxとの連携」「トラブルシューティング」のようにページが整理されており、教科書のように順を追って学べます
  • コミュニティ:
    • 作者(Annulus Games氏)が日本のUnityコミュニティ(X/Twitter、Qiita、Zenn)で非常に活発です
    • 使い方がわからない場合、日本語で検索すれば解決策が見つかる可能性が非常に高いです

結論: 英語が苦手な方、日本語の技術記事を参考に開発を進めたい方に最適です。


3. PrimeTween の特徴

🌍 海外製らしい「実利主義」なドキュメント

PrimeTweenのドキュメント(README)は、「DOTweenよりどれだけ優れているか」 を証明することに重きを置いています。

  • 構成:
    • GitHubのREADME(トップページ)にとにかく全ての情報が詰め込まれています
    • 「パフォーマンス比較表」「DOTweenからの移行ガイド」「APIリファレンス」が縦に長く続いています
    • 検索 (Ctrl+F) して必要な情報を探すスタイルです
  • 内容:
    • コードスニペット(短いサンプルコード)が大量にあるため、英語が読めなくても「コードを見ればわかる」作りになっています
    • インスペクター拡張やデバッグ機能の使い方がGIF画像で紹介されており、視覚的にわかりやすいです
  • サポート:
    • GitHub Issuesでの対応は非常に高速ですが、やり取りは全て英語です
    • Unity Forumのスレッドも活発ですが、ここも英語圏が中心です

結論: コードさえあれば理解できる中・上級者、英語のドキュメントに抵抗がない方に向いています。


4. 具体的なドキュメントへのリンク(雰囲気の確認)

実際にリンクを開いて、「読みやすさ」を比較してみるのが一番早いです。

  • LitMotion ドキュメント (日本語)

    • LitMotion User Manual (JA)
    • ※非常にきれいに整形されており、左側のメニューから知りたい項目へ飛べます
  • PrimeTween ドキュメント (英語)

    • PrimeTween GitHub README
    • ※スクロールしていくと、機能比較や使い方が延々と続く「1ページ完結型」です

どちらを選ぶべき?

  • 「困ったときに日本語で質問したい、日本語の記事を読みたい」

    • 👉 LitMotion 一択です。UniTaskやR3といった、日本で人気のライブラリとの連携情報も日本語で手に入ります
  • 「英語は苦ではない。とにかく導入が楽で、海外のフォーラム情報も自分で漁れる」

    • 👉 PrimeTween でも問題ありません。世界的なユーザー数は多いため、英語で検索すれば情報は出てきます