・p.180「Collider 2Dコンポーネントで衝突判定をする」
・文法編「引数のあるコンストラクタ」「インターフェイス」等
p.180 Collider 2Dコンポーネントで衝突判定をする
・Collider2D:2Dゲームプレイで使用されるコライダー型の親クラス ・p.180下②[Open Prefub]⇒[Open] ・p.181上①「Physics 2D」のクリックは不要で②に進む ・p.181下②[Open Prefub]⇒[Open] ・p.183下①「Box.cs」を作成⇒「Add Component」「New Script」「Box」「Create and add」「:」「Edit Script」
p.183 野菜とBoxの衝突判定のスクリプトを書く:OnTriggerEnter2D
・OnTriggerEnter2D(Collider2D)メソッド:MonoBehaviourクラスからBoxクラスが継承 ・オブジェクトにアタッチしたトリガーの中に別のオブジェクトが入ったときに呼び出される。 ・入ったオブジェクトに関する詳細な情報は呼び出し時に渡されるCollider2D型の引数に代入される。 ・Collider2DクラスはBoxCollider2DクラスとCircleCollider2Dクラスの基本クラスなので、 どちらの型のオブジェクトも、Collider2D型の引数で扱える
p.184 Box.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //Text用
public class Box : MonoBehaviour {
public Text scoretext; //スコア文字列用のパブリック変数
int score = 0; //スコア
void OnTriggerEnter2D(Collider2D other) { //Colliderに呼ばれるメソッド
Vegetable.Type typeA = GetComponent<Vegetable>().type; //Typeはp.157参照
Vegetable.Type typeB = other.GetComponent<Vegetable>().type; //相手種別を得る
if (typeA == typeB) { //種別が一致?
score++; //スコアアップ
scoretext.text = score.ToString(); //スコアを文字列化して格納
Destroy(other.gameObject); //相手を消す
}
}
}
p.187 GetComponentメソッドでコンポーネントを取得する
・Vegetable.Type typeA = GetComponent<Vegetable>().type; ・Vegetable.Typeは、p.157「Vegetable.cs」で定義した列挙なのでtypeAは列挙型になる ・GetComponentはジェネリックメソッド(型情報を指定できるメソッド)でMonoBehaviourクラスからBoxクラスが継承 ・Transformコンポーネントはtransformプロパティ(p.145)で得られるが、それ以外はこれを用いる ・GetComponentメソッドでは、ジェネリックパラメータにおいて取得したいコンポーネントの型を指定する ・Vegetable.Type typeB = other.GetComponent<Vegetable>().type; ・「other.」は「引数で受け取った相手の」という意味 ・GetComponentメソッドは取得失敗時はnull(空)を返すだけでエラー終了はしない
p.189 数を増やしてBoxに入った野菜を削除する
・scoretext.text = score.ToString(); ・scoretextはUnityEngine.UI.Textクラスのオブジェクトで、画面上に文字列を表示する仕掛けを提供するもの ・scoretext.textはそのstring型プロパティで表示する文字列そのものを扱う ・ToString()メソッドはC#の全オブジェクトが持つメソッドで、全クラスの暗黙の基本クラスであるobjectクラスのメソッド。 ・int型であるscoreは内部的にInt32構造体となっており、この中でToString()メソッドをオーバーライドして 整数値を文字列に変換して返している ・整数なので文字列に対する2項+演算子で連結しても同じ結果になる ・Destroy(other.gameObject); ・DestroyメソッドはMonoBehaviourクラスからBoxクラスが継承したもの ・otherは引数で受け取った相手(Collider2D型)で、gameObjectプロパティにより、そのGameObjectが得られる
【参考】p.190 C#の命名規約に関して
・一般的にクラス名、メソッド名、列挙名、構造体名などは先頭を大文字にする ・一般的に変数名、プロパティ名などは先頭を小文字にする ・大文字1文字の名前は(ジェネリックの型パラメータを除いて)避けることが多い ・小文字1文字の名前は、使い捨ての変数のみに制限することが多い 例: for (int i; i < n; i++) のiやn
p.190 野菜の種類と関連するTextを指定する
・p.191②「Text(Regacy)」をBoxの「Scoretext」にドラッグ&ドロップ ・p.191⑤「Text(Regacy)(1)」をBox(1)の「Scoretext」にドラッグ&ドロップ