i-school - 3Dダイビングゲーム 手順4
 以下の内容で順番に実装を進めていきます。

 手順4では、先ほどの手順でUnityにインポートしたアセットを利用してプレイヤーの分身であるキャラクターを作成していきます。

手順4 −キャラの作成−
 5.アセットを使ってプレイヤー用のキャラを設置する
 6.キャラを自然落下させて水面に落下した際に停止させる



新しく学習する内容


 ・Rigidbody コンポーネント
 ・Capsule Collider コンポーネント


5.アセットを使ってプレイヤー用のキャラを設置する

1.設計


 Unityへインポートしたアセットを使って、プレイヤー用のゲームオブジェクトを作成します。
それらのゲームオブジェクトにはアニメーションなどの設定が始めから備わっている場合もあります。

 足りないコンポーネントを追加して、ゲームオブジェクトに役割を与えていきましょう。


2.Penguin ゲームオブジェクトを設置する


 Project 内の以下の場所にあるプレファブ・ゲームオブジェクトを選択します。

 Assets/JKT_Art/Animals/Penguin/penguin.prefab


フォルダ画像



 選択したら、そのままヒエラルキーの空いている場所、あるいは Sceneビューにドラッグアンドドロップしてゲームに追加します。


ヒエラルキー画像



Sceneビュー画像



Penguin ゲームオブジェクト インスペクター画像



3.Penguin ゲームオブジェクトをプレファブから通常のゲームオブジェクトに戻す


 ヒエラルキーにある Penguin ゲームオブジェクトはプレファブになっていますので、まずは通常のゲームオブジェクトに戻してから作業を行います。
プレファブをプレファブではない通常のゲームオブジェクトに戻すことを 「プレファブをアンパックする」 といいます。

 アンパックして元となるプレファブに影響が出ないようにしておくことで、万が一、Penguin ゲームオブジェクトを作りなおす場合などには
プレファブをまた利用すれば大丈夫です。

 ヒエラルキーにある Penguin ゲームオブジェクトを選択して右クリックをしてメニューを表示し、Prefab => Unpack Completely を選択してください
プレファブ状態ではなくなり、ヒエラルキーにある Penguin ゲームオブジェクトの名前表示が青色ではなく、黒色に戻ります。


<手順動画 プレファブをアンパックする>
https://gyazo.com/eea5d04741caa031a9cec2b571c1b398


4.Penguin ゲームオブジェクトの確認と設定を行う


 Penguin ゲームオブジェクトをヒエラルキーで選択して、インスペクターを確認しましょう。2つのコンポーネントがアタッチされています。

 1つは Transform コンポーネントです、これはすべてのゲームオブジェクトが持つ、位置や回転、サイズ、親子関係の情報を扱うコンポーネントです。
もう1つは Animator コンポーネントです。これはアニメーションを行う際に利用するコンポーネントです。
こちらのコンポーネントによって、この Penguin のゲームオブジェクトは、ゲームが実行されると自動的にアニメーションを行うように設定されています。


Penguin ゲームオブジェクト インスペクター画像




 さて、Sceneビューを見ていただくとお分かりのように、ステージに対して Penguin ゲームオブジェクトがとても大きなサイズになっています。
(見やすくするために水面と地面役のゲームオブジェクト以外は非表示にしています)


Sceneビュー画像



 今回は Penguin ゲームオブジェクトのサイズを調整して、ステージの大きさに合わせます。

 Penguin ゲームオブジェクトをヒエラルキーで選択して、インスペクターを確認しましょう。
インスペクターの一番上に Transform コンポーネントがアタッチされていますので、こちらの Scale を (1, 1, 1) => (0.1, 0.1, 0.1) とサイズを小さく変更してください

 また Rotation の Y軸が 90 になっていますので、こちらも 0 に戻しておきます


<手順動画 Rotation と Scale を変更する>
https://gyazo.com/ccd7f7490bcf3df5fc3f15083cee1fe5


変更後のTransform



Sceneビュー画像



5.ゲームを実行して動作を確認する


 Unityのセーブを忘れずに行います。ctrl + s キーでの操作を繰り替えして覚えてしまいましょう。
こちらのショートカットでセーブを行うと、Sceneとプロジェクトの両方のセーブを一括で行うことが出来るため便利です。

 ゲームを実行してみます。まだカメラの設定をしていないため、Game ビューには Penguin は映りませんので
Sceneビューを確認します。

 水面がアニメーションし、Penguin もアニメーションしていれば成功です。シーンギズモを操作して、色々な角度から見てみましょう。


<実行時の動画例 Sceneビュー>
https://gyazo.com/3a0fb4957e5419c70aefd7f0ff0ccc24


6.キャラを自然落下させて水面に落下した際に停止させる

1.設計


 Rigidbody コンポーネントを利用して、ゲームオブジェクトに対して重力や物理演算を行うための物理特性の機能を追加します。

 また、コライダー同士の接触を利用して、水底に設置してある Bottom ゲームオブジェクトとペンギンのゲームオブジェクトを接触させて
その位置で停止するように処理を追加します。

 Bottom ゲームオブジェクトには Box Collider コンポーネントをアタッチしていますが
ペンギンのゲームオブジェクトには、Capsule Collider コンポーネントをアタッチして利用します。

 接触するコライダーの形状が異なっていても、どちらもコライダーであることには変わりありませんので、ちゃんと接触します


参考
Unity公式マニュアル
Rigidbody
https://docs.unity3d.com/ja/2019.4/Manual/class-Ri...
Unity公式マニュアル
Capsule Collider
https://docs.unity3d.com/ja/current/Manual/class-C...


2.Penguin ゲームオブジェクトの位置(高さ)を変更する


 Penguin ゲームオブジェクトは現在、水の中にいる状態です。この地点に向けて自然落下をさせたいので、位置を少し高い地点に変更します。

 Penguin ゲームオブジェクトをヒエラルキーで選択して、インスペクターの Transform コンポーネントを確認します。
Position の Y軸を 5 〜 10 前後に変更して、空中に位置するようにしてください


Penguin ゲームオブジェクト インスペクター画像



Sceneビュー画像



 ゲームを一度実行して Sceneビューを確認してみます。まだ落下させる要素がありませんので、空中に浮いたままになっています。


<実行動画>
https://gyazo.com/b9f0ae7028f26d6b977601dcd8b0a605


3.Penguin ゲームオブジェクトに Rigidbody コンポーネントをアタッチする


 それではゲームオブジェクトに物理特性を与えて、物理演算によって動作するようにしていきます。

 Penguin ゲームオブジェクトを選択してインスペクターを確認します。
一番下にある Add Component ボタンを押して、Rigidbody コンポーネントを追加してください
2Dゲーム用に Rigidbody2D コンポーネントもありますが、そちらではありません。


<手順動画 アタッチ>
https://gyazo.com/9844067980c52bca550073a85230455e


インスペクター画像



4.ゲームを実行して動作を確認する


 Rigidbody をアタッチしたので、ゲームを実行してSceneビューを確認してみましょう。物理演算によって重力が計算されて、空中から自然落下を行うようになります。
このとき、エラーが出てゲームが停止してしまう場合には、先に【6】の手順を行って、MeshCollider コンポーネントを Remove してください


<実装動画 自然落下を行う>
https://gyazo.com/8907299ebe8f226a52ca49a181b6868a


 無事に落下しました。ただし、そのまま地面役の Bottom ゲームオブジェクトも通過して落下を続けています。

 ゲームオブジェクト間に物理的に接触を発生させるためには、双方にコライダーをアタッチし、そのコライダー同士が接触する必要があります。
現在は Bottom ゲームオブジェクトにはコライダーの設定があるものの、Penguin ゲームオブジェクトにはコライダーの設定がありません。
そのため接触できずに、地面のゲームオブジェクトを通過して落下を行っています。

 次の手順でコライダーを追加して、地面とペンギンとが接触して、地面の部分で停止するように修正を行います。


5.Penguin ゲームオブジェクトに Capsule Collider コンポーネントをアタッチする


  Penguin ゲームオブジェクトを選択してインスペクターを確認します。
一番下にある Add Component ボタンを押して、Capsule Collider コンポーネントを追加してください
Rigidbody コンポーネントと同じで、2Dゲーム用に Capsule Collider2D コンポーネントもありますが、そちらではありません。


<手順動画 アタッチ>
https://gyazo.com/877fd0e596b541185880b10ab4122e9f


 Capsule Collider コンポーネントをアタッチしたら、Edit Collier ボタンを押すと、Scene ビューでドラッグアンドドロップを行うことで
コライダーのサイズを変更することが出来ます。下記のインスペクター画像やSceneビュー画像を参考にしながら(シーンギズモで視点を変えたりしながら)
Penguin のゲームオブジェクトに対して、少し小さめに設定を行ってください。(小数点が細かいので、必ず同じ値にする必要はありません。)

 なお、Capsule Collider の Direction の設定を変更すると、コライダーを伸縮する方向を変更できます
伸縮したいけど動かない、という場合には、この Direction の設定を変更してみてください。


<手順動画 シーンギズモを活用してコライダーの形状を確認する>
https://gyazo.com/e46f85b4fa00479e57e9eb729def1e3f


インスペクター画像



Sceneビュー画像



6.Penguin ゲームオブジェクトの子オブジェクトである Shadow オブジェクトから Mesh Collider コンポーネントをリムーブする


 Penguin ゲームオブジェクトの子オブジェクトである Shadow ゲームオブジェクトを選択してインスペクターを確認します。
Mesh Collider コンポーネントがアタッチされていますので、こちらをリムーブしてください。Capsule Collider コンポーネントがアタッチされたので不要です。


<手順動画 不要なコライダーをリムーブする>
https://gyazo.com/b40472e25d028a6662001d4ef675cbfc


Shadow ゲームオブジェクト インスペクター画像



7.ゲームを実行して動作を確認する


 セーブは行いましたか? 

 何か操作をしてゲームを実行する前には、セーブをする癖をつけてしまいましょう。

 ゲームを実行してSceneビューを確認します。自然落下後、地面役の Bottom ゲームオブジェクトの Box Collider と
Penguin ゲームオブジェクトの Capsule Collider が接触して、Box Collider の上でペンギンが停止するようになります。


 
<実行動画>
https://gyazo.com/cd14bd8975161fc50a9370d0ee03e63c


<シーンギズモを変えて検証してみる>
https://gyazo.com/ca158246dc5546060ee92e784daf8549


<コライダーを確認する>




 以上でこの手順は終了です。

 => 次は 手順5 −カメラの追従処理の実装− です。