まいにちUnity 2023/2/20 Create-with-Code#1
(ほぼ)まいにちUnityチュートリアルをこなしてスキルアップしようの会
Create with Code チュートリアルに挑戦します。
繰り返し使用する数値
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 | オブジェクトを破壊するまでのディレイ時間 |
コード例
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);
}