Unityの寺子屋 2日目

学習内容

  • BGMと効果音を鳴らす
  • オブジェクトにアニメーションを付ける
  • DOTweenを使った演出
  • スコアデータの保存

◇BGMと効果音を鳴らす

ゲーム中のBGMは、ゲームが起動している間、ずっとなり続けてほしいので、ゲームの間常に存在しているオブジェクトから鳴らす。(例えばゲーム中の処理をする空のオブジェクトなど)
方法としては、オブジェクトにAudio Sourceコンポーネントをアタッチし、音源をAudio Clipにドラッグ&ドロップすればよい。

ゲーム中の動作に演出としてSEを付けたい場合にはスクリプトから制御する。
具体的には…
ゲームマネージャーなどの制御オブジェクトにアタッチしているスクリプト上で
AudioSource型の変数(仮にaSource)とpublic なAudio Clipクラスの変数(仮にSE)を宣言しておく。

Start関数内で、aSourceにAudio Sourceコンポーネントを取得させておく。

ヒエラルキービューに戻り、スクリプトをアタッチしているオブジェクトのインスペクタ―ビューからpublicで宣言しているSEに鳴らしたい音源をドラッグ&ドロップし、変数に音源を渡しておく

音声を鳴らしたい処理を行っている関数内でaSource.PlayOneShot(SE);と書くと、処理を行った際に変数に渡していた音声が鳴る。

◇オブジェクトにアニメーションを付ける

アニメーションはwindow→Animation→Animation(もしくはCtrl+6)から作成することが出来る。アニメーションを付けるとAnimaterウィンドウとAnimationウィンドウの2つが現れる。
前者は複数のアニメーションを切り替える仕組み。アニメーターウィンドウでは、複数のアニメーションがボックスとして表示されている。これらボックスはステートと呼ばれている。特定のボックス間には矢印が伸びているが、これはアニメの遷移(トランジション)を表している。

後者では具体的にどんなアニメーションをオブジェクトに付けるか編集することが出来る。アニメーションウィンドウでは位置を変えたり、スケールを調整したりと様々なことが出来るが、どのようなアニメが存在するのかはここでは割愛する。
このアニメーションでは素材さえあればパラパラ漫画のようなアニメを付けることも可能である。
また、スクリプトからアニメーションを制御することもできるため、特定の処理を行う場面でのみアニメーションさせることも可能である。

GetCurrentAnimatorStateInfo関数:レイヤー数(アニメーターウィンドウ内のレイヤー?)を引数にとり、現在のアニメーションステートを返す関数。返り値のステートはAnimatorStateInfo型。
引数のレイヤー数は0だとBaseLayerを参照するのだと思う。が、あっているのかな…?
有識者の方がいましたら、コメントお願いします。

上記関数が持つfullPathHashは現在のステート(レイヤー名.ステート名)をIDに変換してくれるプロパティ。IDはint型の数ケタの数字で、この値を条件文内で比較することでスクリプト上からアニメーションの遷移を制御できる。
AnimetorクラスのStringToHashは引数に渡したstring型の値をint型のIDに変換する関数で、fullPathHashで取得したステートのIDとStringToHashでIDに変換したアニメーションステートを比較して、目的のステートと一致しているのか判断する際に使われる。

使用例は以下参考サイトを参照。

Pop技術ログ – 【Unity】アニメーターによる状態遷移とソース側での制御【技術】
http://blog.livedoor.jp/f_paul/archives/27309591.html

Amnesia~あむねじあ~ – Animator.StringToHash  文字列からパラメーター ID を生成。
http://bestrafung.blog.fc2.com/blog-entry-22.html

◇DOTWEENを使った演出

オブジェクトを曲線を描いて動かしたり、ジャンプさせたりと少し特殊な動かし方をしたい場合に便利なDOTweenというAssetを導入しました。
今回は取得したアイテムが曲線を描いて動く演出を付けるために以下のようなスクリプトを書きました。

各種関数などの簡単な説明は上記のスクリプトにコメントとして残してあります。
DOTweenの関数はDOTweenの公式ドキュメントや、DOTweenについてまとめている方がいらっしゃるので、そちらを見ていただけたらと思います。
自分もいろいろ調べてみて、使い方などその都度書いていこうと思います。

以下参考サイト。

GitHub – anzfactory/HowTo DOTween.md
https://gist.github.com/anzfactory/da73149ba91626ba796d598578b163cc

◇スコアデータの保存

PlayerPrefs:データを保存する仕組み。各OSの特定の場所にデータを保存してくれる。読み書きはキーと呼ばれる値を識別するための名前と値となる数値や文字列をセットにする。
理解のためのに参考にしたサイトは以下を参照

Qitta – Unityで簡単なセーブとロードの方法
https://qiita.com/tilyakuda/items/e3ccfbf507acfb16404f

PlayerPrefsではint、float、stringの3つの型しか使えない。例えば時刻を保存したい時などはDateTime型の値になるので、このままでは保存できない。
しかし、変数名.ToBinary.ToStringとすると、ToBinaryで変数に格納された値を64bitのバイナリ値に直し、その後ToStringでバイナリ値を文字列に変換することで、型の違う値を保存することが出来る。
ちなみにSetIntの扱う整数は32bitの値なのでバイナリ値のままでは保存が出来ない。

少し完成まで時間がかかりましたが、作ったゲームはこちら。

放置ゲーム完成版

やっぱりひとつ前の本よりも内容は難しくなっていて、完成させるのが大変でした。
ただ、調べればすぐ理解できたり、あーあれかってわかるときもあるので、自分の成長を実感しております。
また、やっていることは同じようなことの繰り返しなので復習になっていいですね。

本当は19日に投稿するつもりだったのですが、忘れていたので今日になってしまいました。

今日はchap4+αの内容も投稿しようと思います。

それでは、この辺で。


「Unityの寺子屋 2日目」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です