原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【アセット紹介】現状では最速?のTweenアセット「LitMotion」

不慣れ

左手デバイスのボタンを右手で押してる不器用な皆さんこんにちは。購入して一週間以上経ちますが未だに不慣れで、ショートカットを登録したボタンを探す→右手でボタンを押す、の順で操作しており私の左手はちっとも活躍していません。まぁUnityでマウス操作をしながらキーを押す、というシチュエーションがあまり無い所為でもありますが。

 

フリーライドとリスペクトの間

フロムゲーが「ソウルライク」という名の下に多数の(特にインディー系の)ゲームから模倣されているように、ポケモンにおいても「ライク」としてカテゴライズされて一般化していれば、たとえ模倣の度合いが過ぎても大騒ぎには発展しなかったかもしれません。
しかし残念ながらこれまで「類似」とされてきたゲームの殆どが躓くか一時的なヒットに終わって「ライク」化するまでに至っていないので、今回のように「ぼくのかんがえたさいこうのポケモン」的ゲームが批判されるのは仕方のない事だなと思っています。

特に「ポケモン」に対して思い入れのあるファンにとっては、いくら制作側が「法的に問題ない」と強弁しても、日本で長らく愛されてきた強いIPをフリーライドしているようにしか見えないでしょうし、「ポケモン」に類似する「パル」に対して強制労働や虐待、殺害が行えるゲームデザインは許せないものでしょう。
私としては「クラフト要素のあるポケモン」「サバイバル要素のあるポケモン」というアイデアを具現化するというだけでもかなり凄い事だと思いますし、元ネタに対しても十分敬意を払っているように感じますが、今回の騒動は制作側がそれを世間一般に理解してもらえる為の努力が足りなかったのかなぁ、という感想です。

 

LitMotion

前回の記事で高速なTween系アセット「Magic Tween」を紹介しましたが、これと同じ作者の方が新しいTween系アセットを公開しています。

annulusgames.com

ECSを使用して高速化を実現した「Magic Tween」よりも更にECSの仕様に合わせて高速化を図ったアセットらしく、公開されたスペックでは「DOTweenの5倍以上、MagicTweenと比較しても1.5倍ほどと極めて高速」のようです。

このアセットの導入に必要な要件は以下の通り

  • Unity 2021.3 以上
  • Burst 1.6.0 以上
  • Collection 1.5.1 以上
  • Mathematics 1.0.0 以上

こちらのアセットもGitで公開されている為、導入する場合はGitURLを利用します。
UnityのWindowメニューからPackageManagerを開いて「+」ボタン > git URLからパッケージを追加してください

https://github.com/AnnulusGames/LitMotion/blob/main/README_JA.md

 

基本的な使い方

MagicTweenではDOTweenとほぼ変わりない使用法でTweenを生成することができましたが、こちらのLitMotionではECSのデータ指向に沿う為か全く違う指定の仕方でTweenを生成します。
具体的には

  1. floatやVector3等の値をTweenさせるMotionクラスを生成する
  2. MotionクラスでTweenされている値(floatやVector3等)の反映先を指定する
  3. LoopやEasing、完了コールバックなどのオプションはMotionの拡張メソッドで設定する

上記の手順でTweenを作成、実行します。
この為、ソースへの記述は以下のようになります。

var value = 0f;
LMotion.Create(0f, 10f, 2f)  // 開始値,終了値,動作時間
    .WithEase(Ease.OutQuad)
    .WithComplete(() => Debug.Log("Complate!"))
    .Bind(x => value = x);

上のソースの「LMotion.Create(0f, 10f, 2f)」の部分が「値をTweenさせるMotion」を意味します。
拡張メソッドの「WithEase」「WithComplete」でEasing、完了コールバックを指定しています。
最後の「Bind」の箇所で「値の反映先を指定」する事になります。
よって上のソースでは「valueの値が2秒で0から10へ変化し、完了後に"Complate!"というログを出力する」という動作となります。

LMotion.CreateでTweenさせる事が出来る変数の型は以下の通りです。

  • int
  • long
  • float
  • double
  • Vector2,Vector3,Vector4
  • Quaternion
  • Color
  • Rect

 

GameObjectを動かしたい

もっと具体的にDOTweenのようにGameObjectを動かしたい場合は、「Bind」の箇所でGameObject.transformのpositionに値を設定する事になります。

Transform target;

LMotion.Create(Vector3.zero, Vector3.one, 2f)
    .Bind(x => {target.position = x;});
上のソースだと「targetの位置を2秒で(0,0,0)から(1,1,1)へ移動させる」という動作になります、
ただ逐一、Bindの中で反映処理を記述するのは面倒くさいので、positionを動かす場合は専用のBindメソッド「BindToPosition」を利用します。

 

Transform target;

LMotion.Create(Vector3.zero, Vector3.one, 2f)
    .BindToPosition(target); // target.positionにバインドする

position以外にもLocalPositionやeularAngle,localScale等、専用のBindメソッドが幾つか用意されているので詳細は作者の方が公開しているドキュメントを確認してください。

annulusgames.github.io

 

注意点

ドキュメント方で作者の方も述べられていますが、高速化に特化して設計されたアセットであるためMagicTweenほどDOTweenと同様の機能を備えているわけではありません

特にSeqneuceは実装されておらず、今後も実装される事はないようなので、Tweenを組み合わせる場合はコルーチンやUniTask等を使用して自力で組み合わせる必要があります。
また、オプションについても残念ながら相対的(Relative)なTweenを指定するオプションはないので、相対的な動作をさせたい場合はそれを踏まえた値を指定するか、Bindの拡張メソッドを作成する事になります。
Bind拡張メソッドについて上記のドキュメントで具体的な実装方法が書かれているので、試しに相対的な移動(RelativeMotion)についてBind拡張メソッドを作ってみました。

 

まとめ

上記のように記述方法がDOTweenとは大きく異なるため、MagicTweenのようにDOTweenから直接的に移行するのは難しいかもしれません。
また、DOTweenと比較して機能は限定的であるため、使いどころ及び実装方法を事前に検討する必要があります。
それでも「DOTweenの5倍以上」というスペックは魅力的ですしドキュメント等も充実している為、これから新規にプロジェクトを起こす際には導入を検討しても良いのではないでしょうか。

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。