Unityに関連する記事です

 引き続き空中床以外のゲームオブジェクトを作成して、ゲーム内容にバリエーションを持たせて行きます。

この手順では、ゲームの目的の1つであるコイン集めに使用するコインのゲームオブジェクトと、コインとキャラと接触した際の処理について実装していきます。

手順16 −コインの設置・移動・キャラとの接触処理の実装−
27.コインを設置する
28.スクリプトを使って、コインを獲得できるようにする

<実行動画 コインと接触して通過した際に、CoinPointが Coin スクリプトで設定した値分だけ加算される。またコインのゲームオブジェクトが破壊される>
https://gyazo.com/82dae1bb1a516aa3dd3f4efa32aa8655



 新しく学習する内容は以下になります。

・OnTriggerEnter2Dメソッド



27.コインを設置する

設計


 先ほどに引き続き、空中床以外のゲームオブジェクトを作成して、ゲーム内に登場させましょう。
今度はコインのゲームオブジェクトを作成します。このコインをたくさん集めていくことがゲームの目的になります。


コインとコイン用のアニメーションクリップを作成する


 キャラのアニメーションクリップを作成したときの手順と同じように、複数の画像をまとめて選択して、ヒエラルキーにドラッグアンドドロップします。
こうすることで常にアニメーションしているコインを作成することが出来ます。


ファイルの場所 ファイルの場所 Assets/UnityChan2D/Demo/Sprites/Coin_0.png から Coin_2.png までの3ファイル



選択時のインスペクター画像



 選択したファイルをそのままヒエラルキーにドラッグアンドドロップします。
先ほどと同じように、複数の画像をまとめて設置したため、画像をアニメーションクリップとして保存するための Create New Animation ウインドウが開きます。


Create New Animation ウインドウ



 ファイル名を coin.anim に変更して保存を選択してください。

 ヒエラルキーに coin_0 ゲームオブジェクトが作成されます。


ヒエラルキー画像



SceneビューとGameビュー画像


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


 作成されたゲームオブジェクトにはアニメーションクリップが設定されています。ゲームを実行して、アニメーションが再生されるか確認します。


<実行動画 コインがアニメーションするか確認する>
https://gyazo.com/31afb799e499ff1143cb89bbf815f36a


coin_0 ゲームオブジェクトの名前を Coin に変更する


 名前を Coin に変更してください。


ヒエラルキー画像



Coin ゲームオブジェクトに Coin Tag を設定する


 Coin ゲームオブジェクトに Tag の設定を行います。
初期値は Untagged(Tagなし) になっていますので、新しく Coin という Tag を追加して、それを Coin ゲームオブジェクトに設定します。

 この Tag の情報を if 文の条件式として利用することで、コインなのか、あるいは違うオブジェクトなのかを判断することが可能になります。


Coin ゲームオブジェクト インスペクター画像 Tag 変更前


 ↓

Coin ゲームオブジェクト インスペクター画像 Tag 変更後



Coin ゲームオブジェクトの設定を行う


 キャラより少し小さい位の大きさになっていますが、そのままで問題ありません、
もしも大きさを変更するのであれば、 Coin ゲームオブジェクトの Transform コンポーネントの Scale の値に変更してください。
SpriteRenderer コンポーネント と Animator コンポーネントは作成と同時にアタッチされていますが、こちらは変更箇所はありません。


インスペクター画像




 新しくコンポーネントを1つ追加します。
インスペクターの一番下にある Add Compnent ボタンを押して、CapsuleCollider2D コンポーネント、あるいは BoxCollider2D コンポーネントのいずれか1つを追加します。
この手順では BoxCollider2D コンポーネントを追加しています。

 追加したコライダー・コンポーネントの Edit Collider ボタンを押して、Sceneビューで画像に見合った大きさのコライダーに調整してください。


インスペクター画像◆BoxCollider2D コンポーネント(CapsuleCollider2D コンポーネントの場合も操作は同じです)



Sceneビューのコライダー編集画像



 以上で設定は終了です。


Coin ゲームオブジェクトに MoveObject スクリプトをアタッチして設定する


 ヒエラルキーの Coin ゲームオブジェクトに MoveObject スクリプトをドラッグアンドドロップしてアタッチします。
MoveSpeed 変数の値を 0.01 に設定してください。この値は空中床のゲームオブジェクトと同じ値にしていますが、自由に調整してください。


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



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


 以上でコインのゲームオブジェクトが完成です。

 MoveSpeed を設定しましたので、ゲームを実行してみましょう。
空中床のゲームオブジェクトと同じ値を設定していますので、画面の左側に向かって移動をすれば成功です。


<実行動画 コインが画面の左側に移動する>
https://gyazo.com/e3e9a017a3f6a155a4981df32060df60


28.スクリプトを使って、コインを獲得できるようにする

設計


 ゲームにコインが登場するようになりましたので、キャラとコインとを接触させることで、コインを獲得できるようにしていきます。

 
 コインとキャラの接触についてですが、こちらもコライダー同士の接触を行うことで判定を行うようにします。
ただし、敵とキャラのようにコライダー同士が接触してしまうと、コインとキャラとが別々の位置に留まってしまうため、見た目的にもコインを獲得出来ません。

 Unityのコライダーの接触判定には、接触して判定を行う方法と、もう1つ、接触して通過をした際に判定を行う方法とがあります。
今回は2つ目の、接触して通過をする際に判定を取る方法で設計を行います。

 この判定処理は、OnTriggerEnter2D メソッドを記述する実装するが出来ます。この処理の中で、OnCollisionEnter2D メソッドと同じように
コインに専用の Tag を設定しておいて、その Tag のときにだけ、コインのゲームオブジェクトを通過した際に、コインを獲得したことにする処理を実装します。

 コインを獲得する、ということはゲーム的な言い回しですが、これを実際の処理として考えていくと、次のような内容になります。


1.キャラがコインのゲームオブジェクトと接触して通過する
  ↓
2.コインのゲームオブジェクトの持つ「得点」をプレイヤーに加算する
  ↓
3.コインのゲームオブジェクトを破壊する

 【1】の処理については先ほど説明をしました OnTriggerEnter2D メソッドによって処理を実装出来ます。
 
 【2】の処理ですが、コインのゲームオブジェクトには、「得点」という要素は持っていません。
OnTriggerEnter2D メソッド内でコインのゲームオブジェクト自体の情報は取得できていますので、これを利用して、
コインのゲームオブジェクトに、新しくスクリプトを1つ作成してアタッチし、そのスクリプトに「得点」用の変数を設定しておきます。

 そして、この「得点」用の変数を プレイヤーに加算するということになりますので、PlayerController スクリプトにも、得点加算用の変数を新しく用意して
コインのスクリプトからこの値を受け取って、加算していくように設計を行います。

 【3】の処理については、OnTriggerEnter2D メソッド内でコインのゲームオブジェクトの情報を取得できていますので、これを利用して、コインのゲームオブジェクトを破壊します。
 

Coin スクリプトを作成する


 宣言フィールドでは1つの変数を宣言します。この変数を利用して、コインと接触した際に獲得できるポイントを設定します。
public 修飾子で宣言していますので、インスペクターより値の変更が可能です。


Coin.cs

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



Coin ゲームオブジェクトに Coin スクリプトをアタッチして設定を行う


 ヒエラルキーにある Coin ゲーオブジェクトに作成した Coin スクリプトをドラッグアンドドロップしてアタッチしてください。

 Coin ゲームオブジェクトのインスペクターを確認し、Coin スクリプトの Point 変数に値を設定します。
自由な値を設定してください。今回は 100 で設定しています。

 この値がコインと接触した際に獲得できるコインのポイントになります。この値の合計値を PlayerController スクリプトで管理します。


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



PlayerController スクリプトを修正して、コインとの接触処理を追加する


 宣言フィールドに public 修飾子で coinPoint 変数を宣言します。
コインと接触して通過した際に、コインの持つ Coin スクリプトに設定されている point 変数の値を加算していきます。

 また、コインとの接触・通過の処理を OnTriggerEnter2D メソッドを記述して判定できるように処理を追加します。
 

PlayerController.cs

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



<OnTriggerEnter2Dメソッド>


 Unityの MonoBehaviour クラスの持つメソッドの1つです。
このメソッドが記述されたスクリプトのアタッチされてるコライダーを持つゲームオブジェクト(キャラ)が、他のコライダーを持つゲームオブジェクトを通過した際に接触判定を行うメソッドです。
その際に Collider2D 型の変数に接触して通過したゲームオブジェクトの情報を取得し、メソッド内で利用できる状態にしてくれます。

 通常コライダーを持つオブジェクト同士は接触しますが、いずれか片方のゲームオブジェクトのコライダーの IsTrigger のスイッチがオンになっている場合、
コライダーを持つゲームオブジェクトを通過することができます。その際に、このメソッドが接触判定を行います。


    // IsTriggerがオンのコライダーを持つゲームオブジェクトを通過した場合に呼び出されるメソッド
    private void OnTriggerEnter2D(Collider2D col) {

        // 通過したコライダーを持つゲームオブジェクトの Tag が Coin の場合
        if (col.gameObject.tag == "Coin") {

            // 通過したコインのゲームオブジェクトの持つ Coin スクリプトを取得し、point 変数の値をキャラの持つ coinPoint 変数に加算
            coinPoint += col.gameObject.GetComponent<Coin>().point;

      // 通過したコインのゲームオブジェクトを破壊する
            Destroy(col.gameObject);
        }
    }
Unity公式スクリプトリファレンス
~https://docs.unity3d.com/ja/current/ScriptReferenc...


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


 スクリプトを修正したらセーブをして、ゲームを実行して動作を確認します。

 コインと接触してみましょう。敵の場合と異なり、コインを通過できますが、ちゃんと OnTriggerEnter2D メソッドが接触判定を行っているため、
PlayerController スクリプトの CoinPoint の値が加算されるとともに、コインのゲームオブジェクトが破壊されていれば成功です。


<実行動画 コインと接触して通過した際に、CoinPointが Coin スクリプトで設定した値分だけ加算される。またコインのゲームオブジェクトが破壊される>
https://gyazo.com/82dae1bb1a516aa3dd3f4efa32aa8655


 Coin ゲームオブジェクトを複製して、2つ、3つと続けてコインを獲得してみましょう。接触して通過するたびに、CoinPoint の値が上書きされず、どんどん加算されていれば成功です。


<実行動画 コインを複数獲得してみる>
https://gyazo.com/6b7019ca2cedc9f9930bbaf79ac84e96


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

 次は 手順17 −ゲームオブジェクトのランダム自動生成処理の実装− です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

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

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

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

private



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

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