Unityチュートリアル学習のポイント


この資料は、Unityを使ってゲーム開発を始めたばかりの初学者を対象にしています。基本的な操作や概念に加え、実際のコードサンプルを通じて具体的な開発手法を学べます。簡単な2Dゲームの開発を通じて、シーン管理、物理演算、アニメーションの制御、オブジェクトの移動を体験します。


学習教材

Unityの教科書(Chapter6)

学習ポイント

1. Unityの基本概念

1.1 GameObjectとコンポーネント

Unityでは、すべてのオブジェクトはGameObjectとして存在します。これにコンポーネント(例: Rigidbody2DAnimatorTransform)をアタッチすることで、物理的な動きやアニメーション、位置の変更を実現します。

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、物理演算、アニメーション制御、シーン管理など、ゲーム開発に必要な基礎を学びました。引き続きこれらの技術を応用して、オリジナルのゲームを開発してください。

Unity

Posted by hidepon