【Unity】ゲームの敵の挙動を制御するデバッグツール

このスクリプトは、UIトグルを使用してゲーム内の敵の挙動をデバッグおよび制御するのに役立ちます。これにより、コードを変更したりゲームを再起動したりせずに、さまざまなシナリオをテストできます。

シーンの構成

デバッグ用コード

using UnityEngine;
using UnityEngine.AI;
using UnityEngine.UI;

public class IkinokoDebugger : MonoBehaviour
{
    [SerializeField]
    Toggle isEnemysStop;

    [SerializeField]
    Toggle isEnemysAttackStop;

    private void Start()
    {
        isEnemysStop.onValueChanged.AddListener(OnEnemysStopToggleValueChanged);
        isEnemysAttackStop.onValueChanged.AddListener(OnEnemysAttackStopToggleValueChanged);
    }

    private void OnEnemysStopToggleValueChanged(bool isOn)
    {
        var enemies = FindObjectsByType<EnemyStatus>(FindObjectsSortMode.None);

        if (isOn)
        {
            Debug.Log("敵の移動を止める!");

            foreach (var enemy in enemies)
            {
                enemy.GetComponent<NavMeshAgent>().speed = 0;
            }
        }
        else
        {
            Debug.Log("敵を移動できるようにする");

            foreach (var enemy in enemies)
            {
                enemy.GetComponent<NavMeshAgent>().speed = 1;
            }
        }
    }

    void OnEnemysAttackStopToggleValueChanged(bool isOn)
    {
        var enemies = FindObjectsByType<EnemyStatus>(FindObjectsSortMode.None);

        if (isOn)
        {
            Debug.Log("敵が攻撃しないようにする!");

            foreach (var enemy in enemies)
            {
                enemy.transform.Find("AttackRangeDetector").GetComponent<BoxCollider>().enabled = false;
            }
        }
        else
        {
            Debug.Log("敵が攻撃するようにする!");

            foreach (var enemy in enemies)
            {
                enemy.transform.Find("AttackRangeDetector").GetComponent<BoxCollider>().enabled = true;

            }
        }
    }
}

コードは、Unityでゲームの敵の挙動を制御するデバッグツールを設定しており、ユーザーインターフェースのトグルを使用します。各部分がどのように機能するかを説明します:

クラス宣言

  • IkinokoDebugger: MonoBehaviourクラスで、実行時に敵の挙動を制御するためのデバッグツールを提供します。

シリアライズされたフィールド

  • isEnemysStop: 敵の移動を停止するためのトグルUI要素。
  • isEnemysAttackStop: 敵の攻撃を停止するためのトグルUI要素。

メソッド

  • Start(): トグル要素にリスナーを追加します。トグルの値が変更されると、対応するメソッドが呼び出されます。

トグル値変更ハンドラ

  • OnEnemysStopToggleValueChanged(bool isOn):
    • isOnが真の場合、「敵の移動を止める!」とログに記録し、すべての敵のNavMeshAgentの速度を0に設定して、移動を停止します。
    • isOnが偽の場合、「敵を移動できるようにする」とログに記録し、すべての敵のNavMeshAgentの速度を1に設定して、再び移動を許可します。
  • OnEnemysAttackStopToggleValueChanged(bool isOn):
    • isOnが真の場合、「敵が攻撃しないようにする!」とログに記録し、すべての敵の「AttackRangeDetector」にあるBoxColliderコンポーネントを無効にして、攻撃を阻止します。
    • isOnが偽の場合、「敵が攻撃するようにする」とログに記録し、すべての敵の「AttackRangeDetector」にあるBoxColliderコンポーネントを有効にして、攻撃を許可します。

ユーティリティ

  • FindObjectsByType<T>(FindObjectsSortMode): この行は EnemyStatus タイプのすべての敵オブジェクトを集めることを意図しているようですが、メソッド名はUnityの FindObjectsOfType<T>() として間違っている可能性があります。

Unity

Posted by hidepon