講義メモ 後半

p.192 壁のプレハブを作成する:補足

①Hierarchyの「+」をクリック
②[2D Object][Sprites][Square]
③名前を「Wall」に変更
④[Sprite]にWall.jpgを設定
⑤[Add Component][Pysics 2D][BoxCollider 2D]
⑥[Size]の[X]を「0.7」に変更
⑦「Wall」を[Project]にドラッグ&ドロップ
⑧Hierarchyの「Wall」をクリックしDeleteキーで消す

p.193 スクリプトを使って壁を配置する:補足

①Hierarchyの「+」をクリックし[Create Empty]をクリック
②名前を「GameManager」に変更
③[Add Component][New Script]で「Manager」と入力し[Create and add][:][Edit Script]

p.193 スクリプトを使って壁を配置する:補足:Manager.csについて

・ゲームを構成するオブジェクトに所属しないプログラム(スクリプト)であり、別途、GameManagerと名付けたゲームオブジェクトを
 用意して配置している
・このプログラム(スクリプト)をゲーム開始時に実行し、インスタンスを生成して利用するためにパブリック変数
 wallpfb(壁のプレハブ)を定義している

p.194-195 Manager.cs

using UnityEngine;
public class Manager : MonoBehaviour {
    public GameObject wallpfb; //壁のプレハブになるゲームオブジェクトのパブリック変数
    void Start() {
        for (int x = 0; x < 5; x++) { //X(横)方向に5回繰返す
            for (int y = 0; y < 4; y++) { //Y(縦)方向に4回繰返す
                Vector3 pos = new Vector3(); //座標指定用の構造体オブジェクトを用意
                pos.x = x * 1.2f - 2.4f; //X座標を繰り返しカウンタから得る
                pos.y = 2.5f - y; //Y座標を繰り返しカウンタから得る
                Instantiate(wallpfb, pos, Quaternion.identity); //ゲームオブジェクトと座標を指定してインスタンス生成
            }
        }
    }
}

p.194-195 Manager.cs:補足

・座標指定用のVector3構造体オブジェクトを用意している:p.168参照
・Instantiateメソッドはp.163参照
・Quaternion.identityプロパティはp.163-164参照。無回転の意味。

p.198 スクリプトを使ってWallを回転させる:補足

②[Open]をクリック
③[Add Component][New Script]で「Wall」と入力し[Create and add][:][Edit Script]

p.199 Wall.cs:補足

・メソッドの引数として渡すオブジェクトには名前がなくても構わない
・よって、引数の指定場所においてオブジェクトを生成して渡している
・つまり:下記のように2行を1行にし、使い捨てになる変数を省略している
 transform.Rotate(new Vector3(0, 0, -5));
 ↑
 Vector3 work = new Vector3(0, 0, -5);
 transform.Rotate(work);
・なお、使い捨てになる変数はできる限り(可読性を下げない限り)定義しないことが望ましい
・RotateはTransformクラスのメソッドで、Vector3構造体型のオブジェクトを渡すことで、ゲームオブジェクトを
 回転させることができる
・なお、6種類のオーバーロードがあり、回転方法を都合に合わせて指定できる

p.200 回転方向を切り替える Wall.cs:補足

・clockwiseはbool型の変数で、true/falseのみを保持でき、時計回り/反時計回りを意味している
・bool型の変数は、if/whileなどの条件にそのまま指定できる

p.201 Wall.cs

using UnityEngine;
public class Wall : MonoBehaviour {
    public bool clockwise = true; //時計回りを意味するパブリック変数
    void Update() {
        if (clockwise) { //時計回り?
            transform.Rotate(new Vector3(0, 0, -5)); //ゲームオブジェクトを座標指定により回転
        } else { //反時計回り?
            transform.Rotate(new Vector3(0, 0, 5)); //ゲームオブジェクトを座標指定により回転
        }
    }
}

p.202 Manager.cs

using UnityEngine;
public class Manager : MonoBehaviour {
    public GameObject wallpfb; //壁のプレハブになるゲームオブジェクトのパブリック変数
    void Start() {
        for (int x = 0; x < 5; x++) { //X(横)方向に5回繰返す
            for (int y = 0; y < 4; y++) { //Y(縦)方向に4回繰返す
                Vector3 pos = new Vector3(); //座標指定用の構造体オブジェクトを用意
                pos.x = x * 1.2f - 2.4f; //X座標を繰り返しカウンタから得る
                pos.y = 2.5f - y; //Y座標を繰り返しカウンタから得る
                GameObject obj = Instantiate(wallpfb, pos, Quaternion.identity); //ゲームオブジェクトと座標を指定してインスタンス生成
                Wall wall = obj.GetComponent<Wall>(); //壁プレハブからゲームオブジェクトを得る
                if (y % 2 == 0) { //Y(縦)方向で偶数番目?
                    wall.clockwise = true; //時計回りにする
                } else {
                    wall.clockwise = false; //反時計回りにする
                }
            }
        }
    }
}

p.205 ゲーム画面の底を作成する 前半

①Hierarchyの「+」をクリックし[2D Object][Sprites][Square]をクリック
②名前を「Bottom」に変更
③[Position]のXを「0」Yを「-6」に変更し、[SpriteRenderer]の[Sprite]を「Background」にする.
※下から7個目にある

p.205 ゲーム画面の底を作成する 後半

①[Add Component][Physics 2D][BoxCollider 2D]を追加
②[Is Trigger]をクリックしてチェックをオンにする

p.206 ゲーム画面の底を作成する 前半

①[Transform]の[Scale]のXを「100」Yを「4」に変更
※ここでScene上でCtrlキーを押しながらマウスホイールを手前に回すことで表示を縮小すると下の方に「底」が見えてくる

p.206「ゲーム画面の底を作成する 後半

①[Add Component][New Script]で「Bottom」と入力し[Create and add][:][Edit Script]

p.206 Bottom.cs

using UnityEngine;
public class Bottom : MonoBehaviour {
    private void OnTriggerEnter2D(Collider2D other) { //衝突したら
        Destroy(other.gameObject); //何であろうと破棄(消去)する
    }
}

提出:p.206 Bottom.cs

コメントを残す

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