Unity5の教科書5日目

学習内容

◇Physicsを使ってオブジェクトに物理挙動をさせる

  • Physics : Rigidbodyコンポーネント、Colliderコンポーネントの二つからなる。
  • Rigidbody:力の計算(物体にはたらく重力や摩擦などの力の計算)を担当。
  • Collider:物体のあたり判定

・Physicsを使って物理挙動をさせる際には、RigidbodyとColliderの2つをアタッチする必要がある。

・コライダーを設定する際に、対象のオブジェクトに合うコライダーがなければ、形状を修正する。

・RigidbodyコンポーネントはAddForce関数を持っている。
AddForce関数:プレイヤに力を加える関数。引数にはベクトルを渡す。
例えばtransform.up({0,1,0}のベクトル)などを引数として渡せば、上方向に長さ1だけ動くことになる。

AddForce関数はフレーム事に力をかけ続けるので、移動などをAddForce関数で実装した際には制限を設けないと、プレイヤーの速度がどんどん加速してしまう。
そのため、速度を制限するスクリプトを作っておく必要がある。

キャラの反転にはプレイヤーの進んでいる方向のスプライトを表示し、逆方向に進む際には、スプライトを反転させる。
これにはスプライトのX方向の拡大率を-1倍にすることで実現できる。
スクリプト上でスプライトの拡大率を変更する場合には、TransformコンポーネントのlocalScale変数の値を変更する。
localScale変数はオブジェクトが独自に持つ座標系だと考えられるのかも。
オブジェクトの持つx方向の基底ベクトルを(1,0,0)→(-1,0,0)に変えるイメージ?

これにはスプライトのX方向の拡大率を-1倍にすることで実現できる。
スクリプト上でスプライトの拡大率を変更する場合には、TransformコンポーネントのlocalScale変数の値を変更する。
localScale変数はオブジェクトが独自に持つ座標系だと考えられるのかも。
オブジェクトの持つx方向の基底ベクトルを(1,0,0)→(-1,0,0)に変えるイメージ?

◇アニメーション
Unity2Dゲームでキャラのアニメーションを作るにはパラパラマンガ方式が一般的。
ゲーム業界ではスプライトアニメーションと呼ばれている方式。少しずつ動きを変えたスプライトを用意して、一定間隔でそれを切り替える。
Unityでぱらぱらアニメを作るためには、アニメーションの作成と切り替えを一貫して行えるMechanimという仕組みを使う方法がある。
(ゲームの実行時にスクリプトで1コマずつイラストを差し替える方法もある。)

Mechanim:アニメーションの作成から実行までをUnityでエディタで一貫して操作できる機能。
・ゲーム設計時にパラパラアニメを作成し、各アニメーションの切り替えタイミングを指定しておく。
→ゲームプレイ時にMwchanimがオブジェクトの状態を判断して、自動的にアニメを切り替えて再生してくれる。
「スプライト」、「Animation Clip」、「Animator Controller」、「Animmatorコンポーネント」の4つの関係を理解する必要がある。

・スプライトとAnimation Clip
アニメ用のスプライトをまとめたものがAnimation Clip。
・Animation ClipとAnimator Controller
Animation ClipをまとめたものがAnimator Controller→どのタイミングでAnimation Clipを再生するかを指定する。
・Animator ControllerとAnimmatorコンポーネント
アニメにしたいオブジェクトが持つAnimatorコンポーネントにAnimator Controllerをセットすることで、Animator Controllerで定義したアニメを再生することが出来る。

◇physicsであたり判定

physicsを使ったあたり判定にはcollisionモード(衝突モード)とTriggerモード(すり抜けモード)の2種類がある。
前者は跳ね返りなど衝突応答も実行される。
後者は衝突の検出だけを行う。応答は実行されない。

ColliderにはIsTriggerと呼ばれる衝突の検出を行うかどうかを決めるダイアルボックスが存在する。2つのオブジェクトの衝突を検出する際、どちらか一方のIsTriggerにチェックが入っていれば、衝突の検出が可能。その際、両者のともにRigidbodyとColliderコンポーネントがアタッチされていなければならない。

また、両方のオブジェクトのIsTriggerをOnにすると、お互いがお互いをすり抜けてしまう。例えば、プレイヤーと足場の両方のIsTriggerをOnにしてしまうと、プレイヤーが足場をすり抜けて、落ちてしまう。これはIsTriggerが衝突検出は行うが、衝突応答を実行しないため、お互いがお互いをすり抜けあってしまうためである。

◇シーン間の遷移

Unityではタイトル画面、メニュー画面、ゲーム画面など、それぞれのゲーム場面をシーンという形で管理する。複数のシーンをつなぎ合わせ、1つのゲームを作成する。シーンを遷移させるには、遷移を行いたいタイミングで、そのシーンファイル名を指定するだけ。
スクリプトでシーンを遷移させるには、LoadScene(“MenuScene”)などと記入することで遷移させられる。

SceneManager.LoadScene(“シーン名”)でシーンの遷移が行われる。

今回はこんな感じで勉強しました。何やかんやで本通りのゲームを作ることが出来ました。ゲームオーバーなど、シーンの遷移はかなり勉強になりました。これがあると、ぐっとゲーム感がでて、完成した時はかなりうれしかったです。

このブログの記事は作業しながら書いているので、だんだんとメモっぽい書き方になってしまっていて申し訳ないですw

ただ、作業性を考えると、この書き方のほうが勉強しやすいので、このスタイルで今後は書いていこうと思います。

次の章からは3Dのゲームの作成に入るので、気合い入れて頑張りたいです。

最後までお付き合いくださりありがとうございました。それではまた。

コメントを残す

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