Unityに関連する記事です

 以下の内容で順番に実装を進めていきます。

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

手順4 −キャラの作成−
 5.アセットを使ってプレイヤー用のキャラを設置する
 6.物理特性マテリアルを利用して、キャラを滑らせる



新しく学習する内容


 ・Rigidbody コンポーネント
 ・Animator コンポーネントの Apply Root Motion
 ・PhysicMaterial


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ビュー画像



 以上でこの手順は完成です。


6.物理特性マテリアルを利用して、キャラを滑らせる

1.設計


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

 また、コライダー同士の接触を利用して、フロアの Slope ゲームオブジェクトとペンギンのゲームオブジェクトを接触させて斜面の上に乗るようにします。
 
 その後、PhysicMaterial を利用して、Slope ゲームオブジェクトとペンギンのゲームオブジェクトの摩擦係数を 0 にして、滑らせるようにします。

 Slope ゲームオブジェクトには 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軸を -3.34 前後に変更して、Slope ゲームオブジェクトの上に位置するようにしてください


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



Sceneビュー画像



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


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


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


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

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


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


インスペクター画像



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


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


<実装動画 重力の影響を受ける>
https://gyazo.com/b942064948e1fd4ad3964cbe0817794e


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

 ゲームオブジェクト間に物理的な接触を発生させるためには、双方にコライダーをアタッチし、そのコライダー同士が接触する必要があります
現在は Slope ゲームオブジェクトにはコライダーの設定があるものの、Penguin ゲームオブジェクトにはコライダーの設定がありません
そのためコライダー同士による接触できずに、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ビュー画像



Sceneビュー画像



Sceneビュー画像



 以上でコライダーの設定は完了です。必要に応じて適宜見直して調整を行いましょう。


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


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


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


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



7.ゲームを実行して動作を確認して、Animator コンポーネントの Apply Root Motion スイッチをオフにする


 セーブは行いましたか? 

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

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

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



 もしもペンギンが斜面に接触せず、今までと同じように落下してしまう場合には、いくつか確認するべき点があります。

 双方のゲームオブジェクトに、それぞれコライダーがアタッチされていることを確認してください。

 その上で、それらのコライダー内にある IsTrigger のスイッチにチェックが入っていないことを確認してください。
 
 例えば下記のようにチェックが入っていると、コライダー同士は接触せずに通過してしまいます。




 今回はコライダー同士を接触させたいので、このスイッチのチェックは外して、両方とも、オフにしておく必要があります。



 では最後に、この摩擦の情報を操作して、斜面の上をペンギンが滑るように設定を行います。

 その前に、Penguin ゲームオブジェクトの Animator コンポーネントの Apply Root Motion スイッチをオフにします
現在ゲームを実行するとペンギンのアイドル状態のアニメーションが自動的に再生されるのですが、
そのアニメーション処理の中に、位置情報を操作するものが含まれているため、この機能が動いてしまうと位置情報を制御されてしまい、
ペンギンは摩擦 0 でも斜面を滑らなくなってしまいます

 この理由ですが、アニメーションには座標の移動を伴う処理が含まれて(登録されて)いることがあります。
Apply Root Motion のスイッチにチェックが入っている場合には、アニメーションに登録されている情報を元に座標の移動が行われます。
こちらのチェックを外すことにより、アニメーションの実行に伴う座標移動を行わなくなります。

LIGHT11 様
【Unity】ルートモーションの概念と設定方法をサクッと理解する
https://light11.hatenadiary.com/entry/2019/04/18/0...


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



8.PhysicMaterial(物理特性マテリアル)を作成して、 Slope ゲームオブジェクトの BoxCollider コンポーネントに設定する


 Unity では、PhysicMaterial(物理特性マテリアル)という機能があり、コライダーに設定を行うことによって、摩擦係数や跳ね返りの係数を変更することが出来ます。


Unity公式マニュアル
https://docs.unity3d.com/ja/2018.4/Manual/class-Ph...


 摩擦係数を 0 に設定することにより、ゲームオブジェクトのコライダー間の摩擦がなくなり、常に滑る状態を作り出すことが出来ます。
今回はこの機能を利用して、斜面のゲームオブジェクトにこの摩擦が 0 の状態を設定し、雪上の滑る状態をゲーム内に作りだします。



 最初にPhysicMaterial(フィジック・マテリアル) のための新しくフォルダを作成して管理を行います。
 
 Project 内において右クリックをしてメニューを開き、Create => Folder を選択します。新しいフォルダが作成されますので、名前を PhysicMaterials に変更します。


フォルダ画像




 PhysicMaterials フォルダの中で右クリックをしてメニューを開き、Create => PhysicMaterial を選択します。(2Dもあるので間違えないようにしてください)
フォルダ内に PhysicMaterial が作成されますので、名前を NoFriction に変更します。


NoFriction

 

 NoFriction の PhysicMaterial を選択して、インスペクターを確認します。
設定を下記の画像のように変更してください。


NoFriction インスペクター画像



 Dynamic Friction の値が移動中の衝突に対する摩擦係数になります。0 〜 1 の間で設定できます。今回は摩擦をなくしないので、0 に設定しています。

 Static Friction の値は、停止している際の衝突に対する摩擦係数になります。こちらも 0 〜 1 の間で設定できます。今回は摩擦をなくしたいので、0 に設定しています。

 Bounciness の値は跳ね返りの強さの係数になります。こちらも 0 〜 1 の間で設定できます。今回は跳ね返りもなくしたいので、0 に設定しています。

 その下にある Combine の設定は、衝突したオブジェクト同士の設定に対しての計算方法を設定します。
Friction Combine は摩擦に対しての計算方法、Bounce Combine は跳ね返りに対しての計算方法です。今回はどちらも minimum に設定します。


参考サイト
かめくめ 様
UnityのPhysic Materialを使って衝突や跳ね返りを設定する
https://gametukurikata.com/effect/physicmaterial


   
 PhysicMaterial が完成しましたので、設定したいゲームオブジェクトのコライダーにドラッグアンドドロップしてアサインします。

 Slope ゲームオブジェクトの BoxCollider コンポーネント の Material プロパティ欄に登録しましょう


<手順動画 PhysicMaterial のアサイン>
https://gyazo.com/915468181f7d5d10389b02cf6b05853f


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



 以上で設定は完了です。ゲームを実行してみましょう。


<実行動画 滑る>
https://gyazo.com/d44e1d1e78fe699c7203038264267d79


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

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

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます