・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は秋です」
}
}