UnityでのPlayerオブジェクト移動コードのユニットテスト

概要

この技術資料では、UnityのPlayerオブジェクトに対する移動コードのユニットテスト方法を解説します。PlayerControllerスクリプトに移動コードを追加し、そのコードが入力に応じて正常に動作していることを確認します。


環境設定

  1. Unityエディタを起動し、プロジェクトを作成または開きます。
  2. Assetsフォルダ内にScriptsTestsの2つのフォルダを作成します。
  3. Testsフォルダはテストスクリプト用のフォルダです。Unityではこのフォルダを使用して、テストコードを適切に整理します。

PlayerController スクリプトの作成

PlayerControllerは、プレイヤーオブジェクトが移動するためのスクリプトです。このスクリプトをScriptsフォルダにPlayerController.csとして保存します。

// PlayerController.cs
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed = 5f;

    void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(horizontal, 0, vertical) * speed * Time.deltaTime;
        transform.Translate(movement);
    }
}

解説

  • speed: 移動速度を管理するパブリック変数です。値をUnityエディタ上で設定できます。
  • Update(): フレームごとに呼び出され、Input.GetAxisで取得した入力に基づき、プレイヤーの位置を更新します。

PlayerControllerTests スクリプトの作成

PlayerControllerスクリプトの動作を確認するためのテストスクリプトをTestsフォルダにPlayerControllerTests.csという名前で作成します。

// PlayerControllerTests.cs
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;

public class PlayerControllerTests
{
    private GameObject player;
    private PlayerController playerController;

    [SetUp]
    public void SetUp()
    {
        // テスト用のPlayerオブジェクトを作成
        player = new GameObject();
        playerController = player.AddComponent<PlayerController>();
    }

    [TearDown]
    public void TearDown()
    {
        // テスト後にPlayerオブジェクトを削除
        GameObject.Destroy(player);
    }

    [UnityTest]
    public IEnumerator PlayerMovesRightWithHorizontalInput()
    {
        // Arrange
        playerController.speed = 5f;

        // Act: Horizontal入力をシミュレーション
        Input.simulateMouseWithTouches = true; // エディタ内でのInputテストに必要
        Input.GetAxis("Horizontal").Returns(1f); // 右方向への入力値を設定

        Vector3 initialPosition = player.transform.position;

        yield return new WaitForSeconds(0.1f); // 少し待機して移動を確認

        Vector3 finalPosition = player.transform.position;

        // Assert
        Assert.Greater(finalPosition.x, initialPosition.x, "Player should have moved to the right.");
    }
}

解説

  • SetUp(): 各テストが実行される前に呼び出され、PlayerControllerを持つplayerオブジェクトを生成します。
  • TearDown(): 各テストの終了後に呼ばれ、テスト用のオブジェクトを削除します。
  • PlayerMovesRightWithHorizontalInput(): 右方向の入力(Horizontal軸での1の入力)をシミュレーションし、Playerオブジェクトが右に移動したかどうかを確認するテストです。

テストの実行と確認

  1. Unityエディタのメニューから Window > General > Test Runner を開きます。
  2. EditModeタブを選択し、PlayerControllerTestsを表示します。
  3. Run All ボタンをクリックし、テストを実行します。
  4. 成功した場合、テストは緑色で表示され、失敗した場合は赤色でエラー内容が表示されます。

参考: よく使うアサートメソッド

以下のアサートメソッドを使用することで、より多くのテストケースを記述できます。

  • Assert.AreEqual(expected, actual): expectedactualの値が一致するか確認します。
  • Assert.IsTrue(condition): conditiontrueであるか確認します。
  • Assert.IsFalse(condition): conditionfalseであるか確認します。
  • Assert.Greater(a, b): abより大きいことを確認します。

以上で、UnityのPlayerオブジェクトの移動コードをテストするためのユニットテスト手法についての解説を終了します。この資料を参考にして、他の入力や方向についてもテストを追加してみてください。

Test,Unity

Posted by hidepon