【文法編】p.144 & 168 構造体
・C言語などの構造体は変数をまとめたもので、例えば、座標という構造体の中にX座標とY座標を置ける。 ・C#の構造体はこの上位バージョンで軽量クラスになっている ・Unityでは3次元座標を担うVector3構造体(p.144)などが提供されている ・クラスとの最も大きな違いは継承ができないこと、値型(データそのものを持つ形式)なこと。
【文法編】p.144 Vector3構造体
・https://docs.unity3d.com/ja/2021.2/ScriptReference/Vector3.htm ・「struct in UnityEngine」とある通り、構造体で「using UnityEngine;」により利用可能 ・Vevtor3構造体を型とする変数posを定義して(Vector3 pos)位置情報を代入している。 ・MonoBehaviourクラスにはtransformオブジェクト(コンポーネント)があるので、MonoBehaviourクラスを継承した Shooterクラスに引き継がれている ・transformオブジェクトは(Unityにより)Transformクラスから生成されたメンバなので利用可能 ・https://docs.unity3d.com/ja/2021.2/ScriptReference/Transform.html ・Transformクラスにはpositionプロパティが含まれているので利用可能であり、現在の座標情報が入手可能になっている ・positionプロパティはVevtor3構造体を型としているので、Vevtor3構造体型のposに代入できる (つまり、プロパティのgetによりVevtor3構造体型のオブジェクトが返される) ・なお、Vevtor3の中に、X座標を示す変数xがあり「オブジェクト名.x」で利用できる ・よって、代入後に「pos.x」とすることでx座標が得られる ・変数xはfloat型なので、加算するためのフィールド変数moveもfloat型にすると良い
アレンジ演習:p.142 Shooter.cs
・Startメソッドを復活させて下記を記入し、動作を確認しよう ① transformオブジェクトのpositionプロパティで得たVector3オブジェクトを変数posに代入 ② posをDebug.Logで表示すると(0.00, 4.00, 0.00)となる。 ※ 内部的に「pos.ToString()」が呼ばれて編集され「(X座標, Y座標, Z座標)」が出力される
作成例
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座標に移動単位を足し込む(右移動)
transform.position = pos; //位置情報に書き戻す(実際に移動する)
}
void Start() { //【以下追加】起動時のみ実行する
Vector3 work = transform.position; //位置情報を得る
Debug.Log(work);
}
}
ミニ演習:Shooter.cs
※Shooter.csをメモ帳などにコピーしてUSBに保存し、演習の後に戻せるようにしておくこと ・Shooterが右斜め下に動き、壁で反射するようにしよう ・moveをmovexとmoveyにすると良い ・右端、左端に来たらmovexの符号を反転すれば良い(0.05⇔-0.05) ・上端、下端に来たらmoveyの符号を反転すれば良い(0.05⇔-0.05)
提出:ミニ演習:Shooter.cs