1回生向け:Unityでライブラリを使ってみよう!

はじめに

3回生コーディング課リーダーのにしちゃんです!ささっと本題に入ります!

みなさんはUnityでゲームを作っていく中で「(外部)ライブラリ」というものを利用していますか?

特にRiG++に所属する1回生の皆さん!ゲームプログラミングを始めて半年ほど経ったあたりかと思いますが、「作りたいものが上手く実装できない」「先輩のコードに見たこともない文法が書いてある」と感じ始めた人もちょくちょくいるのではないでしょうか?

実は僕らコーディング課の先輩たちのほとんどは、前述の「(外部)ライブラリ」というものをフル活用しまくることで、上手いことゲーム制作を進めています!

この記事では、Unityで「(外部)ライブラリ」を使ったことがない人向けに、”はじめてのライブラリ講習”的なことを書こうと思います!

そもそもライブラリとは?

プログラミングにおけるライブラリとは、

Success

プログラムでよく使われる処理をまとめた再利用可能なコード集

です!もっと簡単に雑に言ってしまえば、「超便利なコード集」です。

基本的にライブラリは目的ごとに存在しており、何でもかんでもかき集めてライブラリにしているわけではありません。”アニメーションをコードで書くためのライブラリ””非同期処理(ちょい難しい処理)を簡単に書くためのライブラリ”などなど、多くの便利なコード集が公開されています。

実は、皆さんも知らないうちにライブラリを使っています。Unity上でスクリプト(MonoBehaviour)を生成すると、冒頭に

using UnityEngine;

とデフォルトで入力されています。これこそまさに、”C#言語でUnity世界を動かすためのライブラリ”なんです!!

このライブラリには、皆さんご存じ

  • GameObject
  • Rigidbody
  • GetComponent関数

等が使えるようになるプログラムが収録されています!!

考えてみれば当然ですが、デフォルトのC#言語にはGetComponent関数なんてありません。C#言語はUnityだけのものじゃないですからね。ここにUnityEngineライブラリを導入することで、Unityを動かすための様々な構文が使えるようになるわけです!

Unity向けのライブラリ

ではここからさらにもう一歩踏み出し、Unity向けに作られた様々な便利ライブラリを追加導入してみよう!!!というのがこの記事の本題になります。

(冒頭で「(外部)ライブラリ」と表現したのは、前章のUnityEngineライブラリと区別するためです。が、基本的にUnityについての文脈で単に「ライブラリ」と言うときはこれから話すもののことになるので、以下「ライブラリ」と記述します。)

Unity向けの著名なライブラリには本当にたくさんの種類があります。さしあたり私が良く使うライブラリの一部を挙げるだけでも、

  • DOTween
  • UniTask
  • UniRx
  • VContainer
  • Alchemy

と、中々に多いです。こんなに色々使いまくってるから先輩のコードには訳わからん構文が多いんですね。

それぞれどんなライブラリなのかは記事終盤に書くとして、この記事では「DOTween」を例にライブラリの導入方法から使い方、利便性等について記すことで、”はじめてのライブラリ講習”としたいと思います!

Success

初めてのライブラリとしてDOTweenに挑戦してみよう!!!

DOTweenに挑戦!

「DOTween」はUnity向けライブラリの中でも有名有用超簡単!!

日本語の記事も多く、初めてのライブラリにもってこいだと思っています。

DOTweenとは?

「DOTween」とは、

Success

Unityの様々な数値をコード上からスムーズに動かすためのライブラリ

=数値にアニメーションをかけるライブラリ

です!

もう少し踏み込んだ説明方法でいくと、

Success

ある数値に対して目標値と時間を指定するとその通り数値を動かしてくれるライブラリ

といった感じです!

これがまあ便利なんですね、、、私はDOTweenがないともうやっていけません。

DOTweenの使用例

たとえばどんなことが出来るか、私の過去作をご覧いただこうと思います!

過去作「Perfect Back Parker Rev!」

このほんの8秒間の中に大量のDOTween利用ポイントがあります!

  • クリアカウントのサークルのアニメーション
  • ウェーブの終了/開始のテキストの動き
  • 障害物である黄色の車の制御

これらすべてDOTweenで動かしています!

例えばテキストの動きなんかはUIの座標(=数値ですね!)にDOTweenをかけることで、動画のような滑らかゲームらしい動きを実装しています。

使い方は他にも

  • RotationやScaleに利用して回転や拡大縮小を表現
  • 透明度に利用してフェードイン/フェードアウトを表現
  • スコア等を表示したテキストに利用してカウントアップを表現

などなど、様々な使い方ができます!

Success

DOTweenが使えるようになると簡単にゲームらしい動きを実装できる!

DOTweenをプロジェクトに導入しよう!

ではさっそく、実際にDOTweenを自分のプロジェクトに導入してみましょう!!

一緒に手を動かしてみることを推奨します!!

まず初めに、DOTweenをUnity Asset Storeからマイアセットに追加しましょう。(この手順は最初の一回のみで大丈夫です)

「アセットストア DOTween」なんかで検索すれば、上図のようなページにたどり着くかと思うので「マイアセットに追加する(Add to My Assets)」ボタンを押して無料で取得しましょう。

ライブラリを取得したら、次はDOTweenを導入したいUnityプロジェクトを開き、画面上部の「Window」→「Package Manager」よりPackage Managerというウィンドウを開きます。

上図のようなウィンドウが開かれると思います。その後ウィンドウ左側の「My Assets」を選択すると、自身がアセットストアで取得したものリストが見られるため、その中からDOTweenを選択します。

選択したら、上図の中央ちょい上あたりの「In Project」と書かれている箇所に「Download」ボタンまたは「Import」ボタンがあるはずです。これを押してプロジェクトにライブラリをインポートしてください。(PCにダウンロード後、プロジェクトにインポートできるようになります)

Import」ボタンを押した後さらに「Import Unity Package」ウィンドウが出た場合、ウィンドウ下部の同じく「Import」ボタンを押すだけで問題ないです。

インポート後、いくつかDOTween設定用のウィンドウが連続で出現します(上図のウィンドウ等)。

詳しく設定したい人はここで色々いじりますが、ここではとりあえず「Open DOTween Utility Panel」→「Setup DOtween…」→処理待ち→「Apply」の順でボタンを押してウィンドウを閉じましょう。

以上でDOTweenのプロジェクトへの導入が完了です!!これでDOTweenの機能を使えるようになりました!

DOTweenを使ってみよう!

DOTweenをインポートしたことで、標準のUnityでは利用できない様々な便利な構文が使えるようになりました!

ここでは、DOTweenでできるようになったことの中でも本当に基礎の基礎な使い方に挑戦してみましょう。

上図のようにシーン上にCubeを配置します。座標は(-8, 0, 0)とします。さらにこのCubeに、「CubeMover」というスクリプトを作成してアタッチしておきましょう。

次に、この「CubeMover」にコードを記述していきます。ここでDOTweenが登場です!!

using DG.Tweening;
using UnityEngine;

public class CubeMover : MonoBehaviour
{
    void Start()
    {
        //自身のx座標を8まで3秒かけて移動する
        transform.DOMoveX(8f, 3f);
    }
}

デフォルトの新規スクリプトからの大事な変更点は、

  • スクリプト冒頭に「using DG.Tweening;」を追加
  • Start()の中に「transform.DOMoveX(8f, 3f);」を追加

の2点です。1点目は「using UnityEngine;」同様、「DOTweenライブラリを使いますよ」の宣言のためDOTweenを利用する際は必ず記述が必要です。2点目はDOTweenによって追加された新たな関数「.DOMoveX(目標値, 時間)」を使用している箇所です。この関数は名前の通り、「x座標を指定した値まで指定した秒数で動かす関数」です。今回は「x=8まで3秒で」と指定しています。

ではこのスクリプトがアタッチされたCubeがどのような挙動になるか、Unityから再生して見てみましょう!

こんな感じになります!画面右側のposition内のx座標の数値を見ても分かる通り、「transform.DOMoveX(8f, 3f);」の一行のみで簡単にちょっとしたアニメーションが実装できました!!

おめでとうございます!!これであなたは”ライブラリを使いました”!!これは大きな一歩です!!

ただ今回使ってみたDOTweenにできることはこんな単純なことだけではありません!もうちょっとだけ深追いしてみましょう!

DOTweenの機能で遊ぼう!

先程使った関数について、改めて説明しておきます!

Information

.DOMoveX(目標値, 時間)

使用できる対象:Transform

挙動:x座標を動かす

主な引数①目標値:どこまでx座標を動かすか(float型)

主な引数②時間:何秒かけて移動するか

こんな感じです。基本的に「[Transform型].DOMove(〇, 〇);」のようにTransformコンポーネントに対してのみ使用できます(Rigidbodyに使おうとしてもRigidbodyは座標は取り扱ってないので…)。また関数使用時、引数に数値の変化後の値そこに至るまで何秒かけるかを指定できます。この目標値時間のセットをDOTweenではよく使います。

ここらでDOTweenによって追加された他の関数も見てみましょう!

さきほど作成した「CubeMover」に以下のように加筆します。

using DG.Tweening;
using UnityEngine;

public class CubeMover : MonoBehaviour
{
    void Start()
    {
        //自身のx座標を8まで3秒かけて移動する
        transform.DOMoveX(8f, 3f);
        //自身のスケールを3まで3秒かける拡大する
        transform.DOScale(new Vector3(3f, 3f, 3f), 3f);
    }
}

新たに「transform.DOScale(new Vector3(3f, 3f, 3f), 3f);」という記述が増えています。これについても説明しておきましょう。

Information

.DOScale(目標値, 時間)

使用できる対象:Transform

挙動:Scale(=大きさ)を動かす

主な引数①目標値:どこまで大きさを変化させるか(Vector3型)

主な引数②時間:何秒かけて大きさを変化させるか

こんな感じです。DOMoveX関数とほぼ同じですね!違うとすれば、目標値がfloat型ではなくVector3型なことくらいでしょうか。これはxyz軸の3つの数値を動かすからですね。

(余談ですが、xyz軸の3つの座標を動かすDOMove関数ももちろんあります。こっちは目標値がVector3型ですね!)

ではこのスクリプトでのCubeの挙動も見てみましょう!

もともと書いてあった移動アニメーションに重ね掛けで、拡大アニメーションが実装できました!!

画面右側のインスペクタービューからも、xyzの三方向に大きさ3まで拡大できていることが確認できます。

Success

DOTweenには「DO〇〇関数」が多数収録されている!

上手く使いこなしてゲームらしい動きを表現しよう!

追加でもう少しだけ遊んでみましょう!「CubeMover」にさらに以下の加筆をします。

using DG.Tweening;
using UnityEngine;

public class CubeMover : MonoBehaviour
{
    void Start()
    {
        //自身のx座標を8まで3秒かけて移動する
        transform.DOMoveX(8f, 3f).SetEase(Ease.OutBounce);
        //自身のスケールを3まで3秒かける拡大する
        transform.DOScale(new Vector3(3f, 3f, 3f), 3f);
    }
}

.DOMoveX(8f, 3f)」の直後にさらに続けて「.SetEase(Ease.OutBounce);」が追加されています。

これについては先にどんな挙動になるかを見てから説明をしましょう!

おもしろい挙動になりましたね!!

この「SetEase関数」はなんと、「目標値に至るまでに数値がどんな遷移をするか」を指定できるんです!!!これがまじでDOTweenの素晴らしいところです!!!

Information

.SetEase(遷移の挙動)

使用できる対象:DO〇〇関数

挙動:対象のアニメーションの遷移を指定する

主な引数①遷移の挙動:どんな遷移か(Ease型、Ease.〇〇で指定

今回の「CubeMover」では遷移の仕方に「Ease.OutBounce」というものを指定し、動画の通りはねるような動きになりました。

このように数値の変化の仕方を指定することを「イージング」なんて言いますが、これが中々奥深いんですよね…。「SetEase関数」を使わないデフォルトの遷移ばかり多用していると単調な動きになります。しかし反対に、派手さだけを求めて色々なイージングを混ぜ合わせると今度は見えずらくウザったい動きになります。

Success

DOTweenでは数値の変化の仕方を指定できる!

上手く選択して単調なアニメーションを避けよう!

その他いろいろ機能はありますが、とりあえず”はじめてのライブラリ講習”としてはこのあたりでストップしてみようと思います。

DOTweenの利便性

ライブラリを初めて使った人目線だともう既に「すげー!」ってなってくれてるかと思いますが、改めてこのDOTweenの利便性についても、この章のまとめとして明示しておきたいと思います!

試しに、ここまでで作ったCubeの動きをDOTweenなしで再現することを想像してみてください。

Danger

Update()の中で毎フレームどの座標にいるべきかを演算して移動することにしよう…

まず跳ねるような動きを時間を変数とする数学的な関数にして…

それを現在位置から目標位置が変域になるようにして…

あでも実際問題1フレームあたりの時間は一定じゃないからそれを補正しなきゃ…

同じ考えを座標だけじゃなく大きさにも適用しなきゃ…

また別の関数作らないといけない…

これを自作は不可能ではないにしても中々めんどくさいですね…!

しかもこれを頑張って自作したところで実装できるのはただの動きながら大きくなる箱です!この方法でちゃんとしたUIの動きなんて作ろうもんなら…想像もしたくないですね…。

しかしDOTweenを導入するとどうでしょう!この記事でも一緒に書いたように、

transform.DOMoveX(8f, 3f).SetEase(Ease.OutBounce);
transform.DOScale(new Vector3(3f, 3f, 3f), 3f);

の2行で実装できます!

なんて簡単!!!こんなの使い得ですね!!!

さらにさらに、この記事では紹介していないDOTweenの機能も大量にあります。

  • ここで紹介しなかった大量のDO〇〇系の関数
  • アニメーション終了時に処理を行うOnComplete()関数
  • アニメーションを順に再生するSequence機能

などなど…。ぜひ調べてみてほしいところです!

Success

DOTweenで様々なアニメーションをコード上から動かそう!!!

まとめ:ライブラリを使いこなそう!

ここまでDOTweenに触れてみて、いかがだったでしょうか?単純に「使いこなせたら便利」だと思いませんか?

ではこのあたりでDOTweenから離れて…。

ライブラリ全般の話に戻りましょう。この記事ではUnity向けライブラリの一例としてDOTweenを扱うことで”はじめてのライブラリ講習”としました。しかしこの記事で伝えたいのは「DOTween便利だぜ!」ということではなく「ライブラリ便利だぜ!!!」ということです!!

当たり前ながら、Unity向けライブラリはDOTweenのみではありません。ここで記事冒頭に列挙した、私が良く使うライブラリの一部について、どんなものか簡単に紹介します!難しい言葉もわざと記述していますが、将来似たような言葉を耳にしたときに何を調べるべきかの手掛かりになると嬉しいです。

Information

UniTask

Unity向けに最適化された非同期処理を簡単に記述できます。

何かしらの処理を待機したり、別スレッドで並行処理したりできます。

Information

UniRx

Unity向けに最適化されたリアクティブなプログラムを記述できます。

何かをきっかけに処理を開始したり、イベントを発行することができます。

Information

VContainer

Unity向けの依存性注入(DI)を軽い動作で実装できます。

様々なサービスを登録したコンテナを作成したりできます。

Information

Alchemy

Unityのインスペクタービューに様々な要素をコード上から配置できます。

前述のライブラリ群と異なり、開発を効率的に進めるためのライブラリです。

ここに書いてある様々な事柄、一から実装するのめんどくさいし難しいですよね。そもそも意味が分からないものもあるかと思います。

がしかし!!該当するライブラリを勉強し使えるようになれば!!

この記事で取り扱ったDOTween同様、複雑で面倒くさい処理も簡単に記述できるようになります!!

特に上記の「UniTask」「UniRx」なんかは替えが効かないレベルの超有能ライブラリです。「めんどくさい→簡単」なんてもんじゃなく「不可能→可能」レベルで記述できることが変わってきます。

さて、ここまで長々と書いてきましたが、伝えたいことは至極単純!!

Success

ライブラリめっちゃ便利だから使いまくろう!!!

これに尽きます。便利なものがあるのに使わないなんてもったいないです。

ではこの記事をここまで読んだらやってほしいことが2つ!!

  • DOTweenを使いまくってみよう!
  • その他の様々なライブラリにどんどん挑戦してみよう!

そしていつかこの記事の著者であるにしちゃんに、良さげなライブラリを教えてください。大変喜びます。

ではこの辺で”はじめてのライブラリ講習”的な記事を終わります。

明日のアドカレは同じくにしちゃんが、今度は2回生向けに記事を書こうと思いますのでなにとぞなにとぞ。

コメントを残す

CAPTCHA