ゲームエンジン基礎⑩(2025/08/29)

■Unityの「参照」(基本)

①GameObject.Find ⇒ ゲームオブジェクトを「探す」(GameObjectへの参照)

②GetComponent  ⇒ コンポーネントを「探す」(Componentへの参照)

Drag&Drop参照ー
変数を宣言した後にInspector内にアタッチできる「型」が表示されている。
rivalDicdText.gameObject.name = “…”でオブジェクト名も変えられる。

オブジェクト参照は、オブジェクト内の要素をなんでも参照できる
コンポーネント参照は※録音確認15’00くらい

ドラッグ&ドロップ参照は「Sceneに置かれているオブジェクト」しか参照できない。
つまり動作中にInstanciateしたオブジェクトには参照できない。


①と②は、「スクリプト側から参照する」方法。


(例)
GameObject rivalDiceTextObj = GameObject.Find(“string型の「検索値」(オブジェクト名)”);
⇒ゲームオブジェクトの「検索」(参照)
⇒戻り値を「GameObject型」として受けることができる。


(例)
rivalDiceText = rivalDiceTextObj.GetComonent<TextMeshProUGUI>();

                        欲しいコンポーネントを指定
                      (RigidBodyでもColliderでも。)

ー1行でやるならー
rivalDiceText = GameObject.Find(“RivalValueText”).GetComponent<TextMeshProUGUI>();
※同じオブジェクトの場合、一つのオブジェクトしか参照できない。
 先頭の一つを参照したら終わり。
 配列を使えば複数取得は可能。↓
GameObject[] objects = GameObject.FindObjects.FindOf~(様々な種類があるので調べる)

※キャラクターがたくさんいる場合、Findで検索すると「処理落ちの原因」になる。
 オブジェクトが多い場合にはUpdate()内では使わないことを推奨。

Attribute(アトリビュート):見易くするためのオプション(変数の上とか下等に設置できる)
[Header(“項目名”)]:Inspector上の変数の「カテゴリ」を作れる。
[SerializeField]:privateの変数をInspectorに表示させる。
[HideInInspector]:設置した行の変数をInspectorから隠す。
[Range(最低値,最大値)]:数値指定をスライダー方式にできる。
  ・
  ・
  ・

■シューティングゲーム制作

・前提知識

Instantiate関数
オブジェクトの「複製」に使う。
オブジェクト型の戻り値 ⇒ 変数に保存しておいて、後から使う、など。

Instantiate(第一引数,第二引数,第三引数);
・第一引数:Object (コピー元)
・第二引数:Vector3 (配置座標)
・第三引数:Quaternion(配置時の角度)

Prefab
ゲームオブジェクトをアセットとして保存する機能

プレハブ化:オブジェクトをプレハブにすること。
プレハブアセット:プレハブ化したオブジェクトのこと
プレハブインスタンス:シーンに配置されたプレハブのこと

・プロジェクト作成。
Playerオブジェクト(Circle)を作成。
Scriptsフォルダを作成してC#スクリプトを作成。Playerにアタッチ。

Bulletオブジェクト(Triangle)を作成。
Assets配下にPrefabsフォルダを作成。

BulletをPrefab化。

Prefabインスタンス側を変更した場合、Inspector内の「Override」タブ内から⇒ApplyAllを押すとPrefabアセット側に反映される。

逆に、Prefabアセット側を変更すると、Prefabインスタンス側に反映される。

※Prefabアセットを破棄すると、Prefabインスタンスは壊れる。
 この場合、Prefab>Unpacを選択して、Prefabを外すことができる。

using UnityEngine;

public class Player : MonoBehaviour{
        [Header("---Bullet Settings---")]
        public GameObject bulletPrefab;


    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {

    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Instantiate(bulletPrefab, new Vector3(0, 0, 0), Quaternion.identity);
        }
    }
}

Playerオブジェクト内のbulletPrefabにbulletプレハブをアタッチ。
これで射出できる。

今日はここまで。

※UIToolKitが今後の主流の為、こちらを押さえておくこと。

コメント

タイトルとURLをコピーしました