講義メモ

・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」にドラッグ&ドロップ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です