講義メモ 後半

【文法編】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

コメントを残す

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