Closed10

まいにちUnity 2023/2/20 Create-with-Code#1

ふぁゔふぁゔ

繰り返し使用する数値

10、-10などの数値をコードにそのまま書くのはメンテナンス・保守の面でよろしくない。
10,-10などの数値のことをマジックナンバーという。

変数に数値を代入しておき、一箇所の変更で様々な場所をメンテナンスできるようにする。

例)xRangeという変数に10を代入する。
xRangeの頭に - (ハイフン)をつけることで、負の数として扱うことができる!

コード例)transform.position.xが10以上または-10以下になったとき、transform.position.xを10or-10に固定する。

if(transform.position.x < -xRange){
   transform.position = new Vector3(-xRange, transform.position.y, transform.position.z);
}
if(transform.position.x > xRange){
   transform.position = new Vector3(xRange, transform.position.y, transform.position.z);
}
ふぁゔふぁゔ

プレハブとinstantiate

プレハブ

すべての設定とコンポーネントをすぐに使用できる状態にしてシーンで再利用できるようにした、事前構成・構築作成済みのオブジェクト。
prefabricatedの略。

インスタンス化(Instantiate)

オブジェクトの新しいコピーまたはクローン、インスタンスを作成するためのプログラミングの考え方。

使用例)ユーザーがスペースバーを押すと、高速で前進する食べ物の情報を持ったプレハブが生成される。

ふぁゔふぁゔ

プレハブの作成

Projectsウィンドウのフォルダに、Hierarchyからドラッグ&ドロップすると、アイコンが水色に変わり、プレハブの作成が完了する。

ふぁゔふぁゔ

Instantiateメソッド

指定したプレハブのコピーを、指定した座標・角度で生成します。

構文

Instantiate(コピー元プレハブ,生成する座標,生成する角度)

コード例

public GameObject projectilePrefab;

if(Input.GetKeyDown(KeyCode.Space)){
   // launch a projectile from the player
   // Instantiate(コピー元プレハブ,生成する座標,生成する角度)
   Instantiate(projectilePrefab, transform.position, projectilePrefab.transform.rotation);
}
ふぁゔふぁゔ

「このオブジェクトの動き方」に注目するだけでなく、「〇〇の動き」をするためのプログラムというような広い視点でプログラムを書くことで、同じ動きをするオブジェクトに使い回す事ができる!

例)「前方に[speed]の速さで進む命令」を書いておけば、ピザ、動物等前方に進む物体に使い回すことができる上、それぞれで[speed]を設定できる!

ふぁゔふぁゔ

Destroyメソッド

例えば、画面外に飛んでいったオブジェクトは永遠に残り、飛び続けるため、生成するほど処理が発生し続ける。画面外に飛んでいったオブジェクトは消去(Destroy)することで、パフォーマンスを向上させることができる。

構文

Destroy (Object obj, float t= 0.0F);
パラメータ 内容
obj 破壊するオブジェクト
t オブジェクトを破壊するまでのディレイ時間

https://docs.unity3d.com/ja/2021.1/ScriptReference/Object.Destroy.html

コード例

public float topBound = 30;

void Update()
{
    if(transform.position.z > topBound){
        Destroy(gameObject); // 自身を破壊
    }
}
ふぁゔふぁゔ

今日はここまで

GithubCopilotを無効にしてできる限り自力でかけるようにしてみました。継続大事。

ふぁゔふぁゔ

GetKeyDownメソッド

指定したキーが入力されたとき、Trueを返す。
つまり、特定キーが入力されたことは、GetKeyDownメソッドの返り値が真になったことと同義である。
if文の条件式に入れると効果を発揮。

構文

Input.GetKeyDown(string name)
パラメータ 内容
name 対象キーの名前。KeyCode.〇〇のように指定することもできる。

コード例

if(Input.GetKeyDown(KeyCode.S)){
   Vector3 spawnPos = new Vector3(Random.Range(-spawnRangeX,spawnRangeX),0,spawnPosZ);
   int animalIndex = Random.Range(0, animalPrefabs.Length);
   Instantiate(animalPrefabs[animalIndex], 
   spawnPos,
   animalPrefabs[animalIndex].transform.rotation);
}
このスクラップは2023/02/22にクローズされました