i-school - おはじきゲーム 手順7
 以下の内容で順番に実装を進めていきます。

手順7 −的球を実装−
13.Canvas内に的球(敵キャラ)ゲームオブジェクトを配置し設定する
14.的球用スクリプトを作成し、Physics2Dの設定を行う



 新しい学習内容は、以下の通りです。

・Physics2DのLayer Collison Matrix の設定方法



13.Canvas内に的球(敵キャラ)ゲームオブジェクトを配置し設定する

設計


 ビリヤードにおける、手球をぶつけるための的球(敵キャラ)を用意します。
ここでは手球と接触した際にお互いに跳ね返るようにする所まで実装していきます。


的キャラ(敵)画像を取得してUnityへインポートする


 的球用のフリー素材をネットで見つけてきてダウンロードしましょう。自分の考えている世界観に合うキャラクターにしていただければいいと思います。

 ダウンロードしましたらUnityにインポートします。インポート場所もSpritesフォルダにします。


SpriteEditorを使って1つにまとまっている画像を分割する


 手球用の画像が1枚の画像であれば、この手順は不要です。
もしも複数の画像が1枚の画像としてまとまっている場合には、SpriteEditorというUnity機能を利用して、1枚の画像を複数の画像に分割します。

 手順3の記事を参考にして、同じように画像を分割してください。


手球用のCharaBallゲームオブジェクトを複製し、名前をEnemyBallに変える


 ヒエラルキーにあるCharaBallゲームオブジェクトを選択して、右クリックしメニューを表示し、Duplicate を選択します。
ヒエラルキーにCharaBallゲームオブジェクトの複製であるCharaBall(1)ゲームオブジェクトが作成されます。

ヒエラルキー画像



 CharaBall(1)ゲームオブジェクトを選択して名前を EnemyBall に変更します。





EnemyBallゲームオブジェクトの設定をする

1.TagとLayer設定

 TagとLayerの設定が CharaBallゲームオブジェクトのままになっていますので、こちらの設定を行います。
Tag を新しく登録して EnemyBall、Layerを Enemy に設定します。(LayerにEnemyがなければ新しく登録して設定してください)


TagとLayer設定後のインスペクター画像



2.Imageの設定

 ImageコンポーネントのSource Imageの部分に的球の画像を登録できます。どれでもよいので1つ画像を設定してください。

Imageコンポーネントのインスペクター画像










 Rigidbody2DコンポーネントとCapsuleCollider2Dコンポーネントは変更ありません。
CapsuleCollider2Dのコライダーの大きさについては画像の大きさと合わせて適宜なサイズに調整してください。 


Rigidbody2Dのインスペクター画像



CapsuleCollider2Dのインスペクター画像



完成画像



14.的球用スクリプトを作成し、Physics2Dの設定を行う

設計


 【13】で作成したゲームオブジェクトにアタッチするためのスクリプトを作成します。
 このスクリプトでは的球と手球が接触した際の処理や、的球をアニメさせる処理などを追記していきます。

 Scriptsフォルダ内で右クリックしてメニューを表示し、Create => C# Script を選択し、名前を EnemyBall に変更します。

EnemyBall.cs

 <= クリックすると開きます。




 EnemyBallスクリプトの作成が終了しましたら、EnemyBallゲームオブジェクトにドラッグアンドドロップしてアタッチします。

 EnemyBallゲームオブジェクトを選択して、インスペクターを確認します。アサイン情報はありませんので、EnemyBallアタッチされていることが確認できれば問題ありません。

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



Physics2Dの Layer Collision Matrix の設定をする


 Unityの左上にあるメニューより、Edit => Project Settings を選択し、表示された Project Settings ウインドウ内の左側の項目から Physics2D を選択します。
右側の内容が項目に応じた内容に切り替わりますので、一番下にある Layer Collision Matrix の設定を行います。


Project Settings ウインドウのPhysics2D項目選択時


 Enemy レイヤーと CueLine レイヤーの交差する部分のチェックを外してください。
この設定を行うことによって、これらのレイヤーを持つゲームオブジェクト同士は接触判定を行わなくなります。


Layer Collision Matrix の設定箇所


 
 今回は Enemy が CueLine ゲームオブジェクトに接触しても弾かれないようにするために設定をしています。


CueLineゲームオブジェクトとEnemyBallゲームオブジェクトとが接触しないかデバッグする


 ゲームを実行して、スワイプしてCueLineゲームオブジェクトを生成します。EnemyBallゲームオブジェクトと接触しないか確認してください。

 接触して弾いてしまうようであれば、Physics2Dの Layer Collision Matrix の設定を見直してください。


検証動画 EnemyBallゲームオブジェクトとCueLineゲームオブジェクトは接触しない
https://gyazo.com/b3c602ba4a0e9f3050a7157c3dc90bfe


手球と的球が接触して跳ね返るかデバッグする


 手順6のCharaBallスクリプトを修正する際に、EnemyBall Tag に接触した場合にも跳ね返るように、OnCollisionEnter2Dメソッドに条件を追加しています。

 ゲームを実行し、手球をCueLineゲームオブジェクトで弾いて的球に接触させてください。手球と的球がお互いに跳ね返れば成功です。


検証動画
https://gyazo.com/4064ecb45d2102731fa754013370a07b


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