[Unity] ハイパフォーマンスな Tween ライブラリ LitMotion を OpenUPM からインストールする

## LitMotion とは
Unity 向けのハイパフォーマンスで実用的な Tween ライブラリです。
どれほどハイパフォーマンスなのか分かりやすい指標で言うと、有名 Tween ライブラリである DOTween の 5 倍以上高速に動作します。

また開発者が日本の方なので日本語のドキュメントが充実しているのも魅力の一つです。

https://annulusgames.github.io/LitMotion/articles/ja/about.html


## OpenUPM とは
オープンソースの Unity パッケージレジストリです。オープンソースの UPM (Unity  Package Manager) パッケージを簡単に見つけることや共有・配布することができます。

オープンソースのパッケージを Unity 公式のパッケージと同じように扱え、インストールした際は Packages 配下に追加されて管理しやすい点が魅力です。

https://openupm.com/

ただし OpenUPM はオープンソースのサービスであり、Unity Technologies が提供する正式なサービスでない点は留意しておいて下さい。


## OpenUPM から LitMotion をインストールする

:::note
**LitMotion の要件**
* Unity **2021.3** 以上
* Burst 1.6.0 以上
* Collection 1.5.1 以上
* Mathematics 1.0.0 以上

細かいことが分からない場合は Unity のバージョンが要件を満たすようにすれば基本的に他の要件も満たせます。
:::


### 1. パッケージの確認

OpenUPM での LitMotion のページを確認してみましょう。

https://openupm.com/packages/com.annulusgames.lit-motion/

広告が若干うるさいですが、次のように表示されると思います。

![OpenUPM での LitMotion のページ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2038389/a3204962-61ab-6a55-44f5-e1f73f169de7.png)

上記の画像だとページの右下にある Install via Package Manager から Manual installation というボタンを押すと下記の図のようにモーダルが開きます。

![Install via Package Manager](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2038389/47ebb75a-a138-c1c6-8842-d55adad1e0cd.png)

ここに記載されている `URL` と `Scope(s)` の情報をこの後使用します。


### 2. LitMotion を自分のレジストリに登録する

Unity を開いてナビゲーションバーから Edit → Project Settings を開きます。
Project Settings が開けたら左側のリストから Package Manager という項目を選択します。すると次の画像のように表示されると思います。

![Unity_PackageManager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2038389/3c6d8508-f640-0856-e757-40ca0084e1d6.png)

Package Manager タブの Scoped Registries に先ほど確認した情報を入力していきます。
`Name` は好きに登録して問題ありませんが、分かりやすいことが大事なのでパッケージ名を設定するのが良いと思います。`URL` と `Scope(s)` についてはコピペして下さい。

|||
| :------- |:--|
| **Name**     | LitMotion |
| **URL**      | https\://package.openupm.com |
| **Scope(s)** | com.annulusgames.lit-motion |
|||

入力後に Save を押すと一瞬ロードが入るので完了を待ちます。

![Unity_PackageManager_ScopedRegistries.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2038389/8846466e-8f84-ee5f-9999-3ead7d4f1a3a.png)

Scoped Registries の左側に LitMotion が登録されれば成功です。


### 3. パッケージをインストールする

Unity のナビゲーションバーから Window → Package Manager を開きます。
ウィンドウの左上周辺を確認すると、おそらく `Packages: Unity Registry` と表示されているのでクリックして `Packages: My Registries` に切り替えます。すると先ほど登録した LitMotion が確認できるかと思います。

あとは Install ボタンを押してインストールをしましょう！

![LitMotion をインストールをする様子](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2038389/6b7a268a-35ed-8dd5-0f09-f4015189acb4.gif)

インストール後は Packages フォルダーに LitMotion が入っていることを確認できます。

![Packages フォルダーに LitMotion が入っている](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2038389/e0e13237-99d4-0452-180c-ecdecf4802d2.png)

## LitMotion の使い方
ここではあまり詳細な使い方については解説を行いませんが、簡単なサンプルを実装してみましょう。Cube オブジェクトと Cube.cs を作成して、立方体を上昇させてみます。

```cs:Cube.cs
using UnityEngine;
using LitMotion;
using LitMotion.Extensions;

public class Cube : MonoBehaviour
{
    void Start()
    {
        // 0f から 5f まで 1 秒かけて動く
        LMotion.Create(0f, 5f, 1f)
            // 上記の動作をこのオブジェクトの transform.position.y にバインド
            .BindToPositionY(this.transform);
    }
}
```

上記のコードでは LitMotion を利用して Cube オブジェクトを Y 軸方向に 0f から 5f まで 1 秒間で移動させています。Start 関数内にこの処理を記述しているため再生時に動きます。


![LitMotion の動作サンプル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2038389/a108340e-1149-0ce9-94b1-41f11a23970e.gif)

### 詳細な使い方について

LitMotion の使い方について参考になるドキュメントや記事を紹介します。

* [公式ドキュメント](https://annulusgames.github.io/LitMotion/articles/ja/basic-concepts.html)
  * かなり丁寧にまとまっているので最初に読むことをオススメします。
* [LitMotion Guidebook](https://zenn.dev/qemel/books/cd6dc0aec66b61)
  * 内容が具体的なのでやりたいことベースで調べたい場合は非常に参考となるガイドブックです。
* [【Unity】LitMotion – データ指向設計による最速のトゥイーン実装](https://annulusgames.com/blog/lit-motion/)
  * こちらは作者の Annulus Games さんが書いた LitMotion の解説記事です。使い方の直接的な説明ではないのですが、これを読むことで理解が深まります。


## まとめ
私はまだ使い始めて日が浅いですが、現在開発中の魔法少女 2D アクションゲームでも使用しています。
LitMotion は非常に軽量で便利な Tween ライブラリですので是非試してみてください！

この記事が役に立ったら ❤️ を頂けると嬉しいです！