UnityでのPlayerオブジェクト移動コードのユニットテスト
目次
概要
この技術資料では、UnityのPlayer
オブジェクトに対する移動コードのユニットテスト方法を解説します。PlayerController
スクリプトに移動コードを追加し、そのコードが入力に応じて正常に動作していることを確認します。
環境設定
- Unityエディタを起動し、プロジェクトを作成または開きます。
- Assetsフォルダ内にScriptsとTestsの2つのフォルダを作成します。
- 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
オブジェクトが右に移動したかどうかを確認するテストです。
テストの実行と確認
- Unityエディタのメニューから Window > General > Test Runner を開きます。
EditMode
タブを選択し、PlayerControllerTests
を表示します。Run All
ボタンをクリックし、テストを実行します。- 成功した場合、テストは緑色で表示され、失敗した場合は赤色でエラー内容が表示されます。
参考: よく使うアサートメソッド
以下のアサートメソッドを使用することで、より多くのテストケースを記述できます。
- Assert.AreEqual(expected, actual):
expected
とactual
の値が一致するか確認します。 - Assert.IsTrue(condition):
condition
がtrue
であるか確認します。 - Assert.IsFalse(condition):
condition
がfalse
であるか確認します。 - Assert.Greater(a, b):
a
がb
より大きいことを確認します。
以上で、UnityのPlayer
オブジェクトの移動コードをテストするためのユニットテスト手法についての解説を終了します。この資料を参考にして、他の入力や方向についてもテストを追加してみてください。
ディスカッション
コメント一覧
まだ、コメントがありません