Unityはどのようにゲームを構成しますか?
GameObject、Component、ライフサイクルから理解する
本ブログ作成文は、講義を目指して製作されました。 また、作成された文章の情報も間違っている可能性がありますので、ご注意ください。
Unityは、ゲームオブジェクトに必要な機能をComponentに貼り付けてゲームを構成するエンジンです。 継承構造を深くするよりも小さな機能を組み合わせる方法に近い。
GameObjectは空のボウルに近い
Sceneに見えるキャラクター、カメラ、照明はほとんどGameObjectだ。 しかし、GameObject 1つだけでは画面に見えたり動かない。
Player GameObject
├─ Transform
├─ SpriteRenderer
├─ Rigidbody2D
└─ PlayerController
Transform銀の位置および回転、サイズがある。 SpriteRendererはイメージを描き、Rigidbody2Dは物理計算に参加します。 開発者が作ったC#スクリプトも一つのComponentになる。
MonoBehaviourのライフサイクル
Unityは決まった時点でMonoBehaviour関数を呼び出します。
using UnityEngine;
public class PlayerMover : MonoBehaviour
{
[SerializeField] private float speed = 5f;
private void Start()
{
Debug.Log("Player 準備完了");
}
private void Update()
{
float x = Input.GetAxisRaw("Horizontal");
transform.position += Vector3.right * x * speed * Time.deltaTime;
}
}
Awakeは、自分の初期状態を準備するとき、Startは、最初のフレームの前に他のオブジェクトとリンクするときによく使用されます。 Updateはフレームごとに呼び出されるので、入力と一般的な更新を処理するのに最適です。
物理力を適用すると、一定間隔で呼び出されるFixedUpdateを考える。 すべてのコードUpdateに入れるより実際に毎フレーム必要な作業かまず確認しなければならない。
シーンとプリファブ
シーンは、現在画面に配置されているオブジェクトの集まりです。 Prefabは、再利用するGameObject設定をアセットとして保存したものです。
同じ敵を複数回配置するたびに、ComponentをリセットせずにPrefabを複製することができる。 変更した内容も、Prefabを基準にして複数のインスタンスに反映することができる。
Unityを始めるときは、Scene一つにプレイヤー、フロア、目標ポイントだけを作った後、入力から衝突まで1つの流れを完成してみるのが良い。 GameObjectが何であるかより、各Componentがどのような責任を持つかを区別することがより重要です。