■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が今後の主流の為、こちらを押さえておくこと。
コメント