Unityチュートリアル学習のポイント
この資料は、Unityを使ってゲーム開発を始めたばかりの初学者を対象にしています。基本的な操作や概念に加え、実際のコードサンプルを通じて具体的な開発手法を学べます。簡単な2Dゲームの開発を通じて、シーン管理、物理演算、アニメーションの制御、オブジェクトの移動を体験します。
学習教材
Unityの教科書(Chapter6)
学習ポイント
1. Unityの基本概念
1.1 GameObjectとコンポーネント
Unityでは、すべてのオブジェクトはGameObjectとして存在します。これにコンポーネント(例: Rigidbody2D
、Animator
、Transform
)をアタッチすることで、物理的な動きやアニメーション、位置の変更を実現します。
1.2 Transformと座標系
Transform
コンポーネントは、オブジェクトの位置や回転、スケールを管理します。以下はプレイヤーのY座標に基づいてカメラの位置を更新するコードです。
void Update()
{
Vector3 playerPos = this.player.transform.position;
transform.position = new Vector3(transform.position.x, playerPos.y, transform.position.z);
}
2. 入力処理
Unityでは、Input
クラスを使ってキーボードやマウスからの入力を取得します。以下は、スペースキーでジャンプ、左右の矢印キーでプレイヤーを移動させる例です。
void Update()
{
// スペースキーでジャンプ
if (Input.GetKeyDown(KeyCode.Space) && this.rigid2D.velocity.y == 0)
{
this.rigid2D.AddForce(transform.up * this.jumpForce);
}
// 矢印キーで移動
int key = 0;
if (Input.GetKey(KeyCode.RightArrow)) key = 1;
if (Input.GetKey(KeyCode.LeftArrow)) key = -1;
if (Mathf.Abs(this.rigid2D.velocity.x) < this.maxWalkSpeed)
{
this.rigid2D.AddForce(transform.right * key * this.walkForce);
}
}
3. 物理演算とRigidbody2D
Unityの2D物理エンジンはRigidbody2D
コンポーネントによって制御されます。このコンポーネントを使ってオブジェクトに力を加えたり、重力に従わせたりします。以下のコードは、Rigidbody2Dを使ったジャンプの例です。
void Start()
{
this.rigid2D = GetComponent<Rigidbody2D>();
}
void Update()
{
// スペースキーでジャンプ
if (Input.GetKeyDown(KeyCode.Space) && this.rigid2D.velocity.y == 0)
{
this.rigid2D.AddForce(transform.up * this.jumpForce);
}
}
4. アニメーション制御
キャラクターの動きにアニメーションを適用するには、Animator
コンポーネントを使用します。以下は、プレイヤーがジャンプする際にアニメーションをトリガーする方法です。
void Start()
{
this.animator = GetComponent<Animator>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && this.rigid2D.velocity.y == 0)
{
this.animator.SetTrigger("JumpTrigger");
}
}
アニメーションの速度はプレイヤーの移動速度に応じて調整できます。
5. シーン管理
Unityでは、SceneManager
クラスを使ってシーンの切り替えを行います。例えば、プレイヤーがゴールに到達したり、画面外に落ちたりした場合にシーンを切り替えるコードは以下の通りです。
void OnTriggerEnter2D(Collider2D other)
{
SceneManager.LoadScene("ClearScene");
}
void Update()
{
if (transform.position.y < -10)
{
SceneManager.LoadScene("GameScene");
}
}
6. イベント処理とトリガー
ゲーム内でのイベント処理は、OnTriggerEnter2D
メソッドを使って実現できます。このメソッドは、プレイヤーが特定のオブジェクトに触れた時に呼び出されます。
7. 実践コードサンプル
以下は、実際のゲームに使える3つの重要なスクリプトです。
7.1 カメラの追従
プレイヤーを追従するカメラのコードは以下の通りです。
void Start()
{
this.player = GameObject.Find("cat");
}
void Update()
{
Vector3 playerPos = this.player.transform.position;
transform.position = new Vector3(transform.position.x, playerPos.y, transform.position.z);
}
7.2 プレイヤーの移動とジャンプ
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && this.rigid2D.velocity.y == 0)
{
this.animator.SetTrigger("JumpTrigger");
this.rigid2D.AddForce(transform.up * this.jumpForce);
}
int key = 0;
if (Input.GetKey(KeyCode.RightArrow)) key = 1;
if (Input.GetKey(KeyCode.LeftArrow)) key = -1;
float speedx = Mathf.Abs(this.rigid2D.velocity.x);
if (speedx < this.maxWalkSpeed)
{
this.rigid2D.AddForce(transform.right * key * this.walkForce);
}
if (key != 0)
{
transform.localScale = new Vector3(key, 1, 1);
}
if (transform.position.y < -10)
{
SceneManager.LoadScene("GameScene");
}
}
7.3 シーン切り替え
void Update()
{
if (Input.GetMouseButtonDown(0))
{
SceneManager.LoadScene("GameScene");
}
}
8. まとめ
この資料では、Unityにおける基本的なゲーム開発のスクリプト要素を説明しました。特にGameObject、物理演算、アニメーション制御、シーン管理など、ゲーム開発に必要な基礎を学びました。引き続きこれらの技術を応用して、オリジナルのゲームを開発してください。
ディスカッション
コメント一覧
まだ、コメントがありません