講義メモ

・p.148「RigidBody2Dコンポーネント」から

提出フォロー:ミニ演習:Shooter.cs

※Shooter.csをメモ帳などにコピーしてUSBに保存し、演習の後に戻せるようにしておくこと
・Shooterが右斜め下に動き、壁で反射するようにしよう
・moveをmovexとmoveyにすると良い
・右端、左端に来たらmovexの符号を反転すれば良い(0.05⇔-0.05)
・上端、下端に来たらmoveyの符号を反転すれば良い(0.05⇔-0.05)

アレンジ前

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooter : MonoBehaviour {
    float move = 0.05f; //単精度変数を初期化して移動単位とする
    void Update() { //フレーム表示ごとに実行する
        Vector3 pos = transform.position; //位置情報を得る
        pos.x += move; //得たX座標に移動単位を足し込む(右移動)
        if (pos.x < -2.5f) { //左端に達した?
            move = 0.05f; //移動単位を正に(次回は右移動に)
        }
        if (pos.x > 2.5f) { //右端に達した?
            move = -0.05f; //移動単位を負に(次回は左移動に)
        }
        transform.position = pos; //位置情報に書き戻す(実際に移動する)
    }
    void Start() {

    }
}

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooter : MonoBehaviour {
    float movex = 0.05f; //単精度変数を初期化して移動単位とする
    float movey = 0.05f; //単精度変数を初期化して移動単位とする
    void Update() { //フレーム表示ごとに実行する
        Vector3 pos = transform.position; //位置情報を得る
        pos.x += movex; //【変更】得たX座標に移動単位を足し込む(右移動)
        pos.y += movey; //【追加】得たY座標に移動単位を足し込む(下移動)
        if (pos.x < -2.5f) { //左端に達した?
            movex = 0.05f; //【変更】移動単位を正に(次回は右移動に)
        }
        if (pos.x > 2.5f) { //右端に達した?
            movex = -0.05f; //【変更】移動単位を負に(次回は左移動に)
        }
        if (pos.y > 5.0f) { //【追加】上端に達した?
            movey = -0.05f; //【追加】移動単位を負に(次回は下移動に)
        }
        if (pos.y < -5.0f) { //【追加】下端に達した?
            movey = 0.05f;   //【追加】移動単位を負に(次回は上移動に)
        }
        transform.position = pos; //位置情報に書き戻す(実際に移動する)
    }
    void Start() { //起動時のみ実行する
    }
}

p.148 RigidBody2Dコンポーネント

・コンポーネントは主にプログラム部品のことで、Unityの場合、システムが提供するものと、自作するものがある
・参照: https://docs.unity3d.com/ja/2022.2/ScriptReference/Rigidbody2D.html

p.148 野菜のゲームオブジェクトを作成

①「Scene」に切り替える
②「Hierarchy」の「+」
③「2D Object」「Sprites」「Square」
 ※名前の変更は、戻ってしまうことがあり、後でリトライすると良い
④「Sprites」の「Square」の右の◎をクリックし「tomato」をダブルクリック
⑤ 名前を「Square」から「Vegetable」に変更
⑥「Add Compornent」をクリックしテキストボックスを空にすると一覧が表示される
⑦「Physics 2D」「RigidBody 2D」をクリック
⑧「Position」のXを「-1」Yを「1」にする
⑨ プレイボタンで動作を確認

p.150 ゲームの背景色を変更する

・色の表現はRGB(Red,Green,Blue)のそれぞれの配合割合で決められる
・通常、各256段階で0,0,0が黒、255,255,255が白、全16,777,216色から選択できる。
 例:au(KDDI)のロゴ色規定:RGB値 R235 G85 B5
・なお、RGBは光の三原色で、ディスプレイの色指定用。
・プリンタ等では色の三原色(CMY)を用いる。C=シアン(水色)、M=マゼンタ(赤紫)、Y=イエロー(黄)
・実際は全色混ぜても黒にならないので、プリンタではK=ブラックを追加して4色インクが主流。

p.153 プレハブを作成する

・まず「Scene」に切り替えること

p.154 プレハブを継承したプレハブを作る

・p.154下から1行目の「Base」は「Variant Parent」に変わっている
・p.155上から2行目の「Open Prefub」は「Open」に変わっている

p.156 列挙型を利用して野菜の種類を表す型を作ろう

・p.156下から1行目の「Open Prefub」は「Open」に変わっている
・p.157上2行は「Add Component」「New Script」で「Vegtable」と入力し「:」「Edit Script」

p.157 Vegetable.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Vegetable : MonoBehaviour {
    public enum Type { //Type列挙型の定義
        Tomato, Gpepper, Broccoli, Potato //列挙メンバの定義
    }
    public Type type; //Type列挙型のパブリック変数typeの定義
}

補足:列挙型の利用法

・プログラム中で複数の要素を連続して扱いたい場合、要素に番号を振ることが多い
・この番号に名前を付けるのが列挙で、まとめたグループが列挙型名になる
・列挙型名に含まれる要素が列挙メンバ(列挙子)で、自動的に先頭から順に0,1,2,3,…の整数が与えられている
・なお、先頭の列挙メンバに「 = 初期値」を記述することで、開始番号を変更できる
例:先頭のjanを1にする
    public enum Mname { //月名の列挙
        jan = 1, feb, mar, apl, may, jun, jul, org, sep, oct, nov, dec
    }
 こうすると、Debug.Log("Sepは" + (int)Mname.sep + "月"); で「Sepは9月」と出力する
・列挙メンバをintにキャストすることで、それぞれにあてはめられた整数値が得られる
・これを配列の添字として利用することもできる
例:
   string[] season //季節の配列(先頭[0]はダミー)
   = { "", "冬", "冬", "春", "春", "春", "夏", "夏", "夏", "秋", "秋", "秋", "冬" };
   Debug.Log("Sepは" + season[(int)Mname.sep] + "です"); //「Sepは秋です」

作成例(上記をshooter.csに書き加えて試す場合)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooter : MonoBehaviour {
    float move = 0.05f; //単精度変数を初期化して移動単位とする
    void Update() { //フレーム表示ごとに実行する
        Vector3 pos = transform.position; //位置情報を得る
        pos.x += move; //得たX座標に移動単位を足し込む(右移動)
        if (pos.x < -2.5f) { //左端に達した?
            move = 0.05f; //移動単位を正に(次回は右移動に)
        }
        if (pos.x > 2.5f) { //右端に達した?
            move = -0.05f; //移動単位を負に(次回は左移動に)
        }
        transform.position = pos; //位置情報に書き戻す(実際に移動する)
    }
    public enum Mname { //【追加】月名の列挙
        jan = 1, feb, mar, apl, may, jun, jul, org, sep, oct, nov, dec
    }
    void Start() {
        string[] season //【以下追加】季節の配列(先頭[0]はダミー)
        = { "", "冬", "冬", "春", "春", "春", "夏", "夏", "夏", "秋", "秋", "秋", "冬" };
        Debug.Log("Sepは" + (int)Mname.sep + "月"); //「Sepは9月」
        Debug.Log("Sepは" + season[(int)Mname.sep] + "です"); //「Sepは秋です」
    }
}

コメントを残す

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