Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ダッシュステート | 敵の行動
Unityでの格闘ゲーム

bookダッシュステート

メニューを表示するにはスワイプしてください

アニメーターコントローラー

public class AnimatorController : MonoBehaviour
{
    [SerializeField] Enemy enemy;

    public void FinishMovement()
    {
        enemy.FinishMovement();
    }

    public void EndCurrentState()
    {
        enemy.EndCurrentState();
    }
}

AnimatorController の目的

AnimatorController クラスは、アニメーターイベントを通じて敵キャラクターの挙動を管理およびトリガーするために設計されています。これにより、アニメーションの遷移や状態変更がシームレスに統合され、敵キャラクターの挙動がアニメーションと一致するようになります。

クラス定義とメンバー変数

クラス定義: public class AnimatorController : MonoBehaviour は、MonoBehaviour を継承したクラスを定義しており、Unity の GameObject にアタッチ可能です。

メンバー変数: [SerializeField] Enemy enemy; はシリアライズされたフィールドであり、Unity インスペクターから EnemyAnimatorController オブジェクトを直接リンクできます。 enemy 変数は敵キャラクターのスクリプトへの参照であり、敵の挙動を制御する関数を含みます。

メソッド

FinishMovement メソッド: public void FinishMovement(): このメソッドは enemy.FinishMovement() を呼び出します。アニメーターイベントによって呼び出され、移動アニメーションの終了を通知するために設計されています。

EndCurrentState メソッド: public void EndCurrentState(): このメソッドは enemy.EndCurrentState() を呼び出します。アニメーターイベントによって呼び出され、現在のステートの終了を通知するために使用されます。

アニメーターイベントとの連携

アニメーターイベント: アニメーターイベントは、Unity の Animator 内のアニメーションタイムライン上に配置できる特別なイベントです。 これらのイベントは、同じ GameObject またはその子オブジェクトにアタッチされたスクリプト内の関数を呼び出すことができます。

仕組み: ランニングや攻撃などのアニメーション中に、タイムライン上の特定のポイントでイベントをトリガーできます。

Dash State

public class DashState : State
{
    Rigidbody2D rb;
    Animator animator;
    Transform player;
    float speed;
    Vector2 scale;
    Vector2 velocity;

    bool stopDashing = false;

    public DashState(Rigidbody2D rb, Animator animator, Transform p, float DashSpeed)
    {
        this.animator = animator;
        player = p;
        this.speed = DashSpeed;
        this.rb = rb;
        scale = rb.transform.localScale;
        velocity = new Vector2();
    }

    public override void StartState()
    {
        isStateFinished = false;
        animator.SetBool("dash", true);
        stopDashing = false;
    }

    public override void FinishMovement()
    {
        stopDashing = true;
    }

    public override void UpdateState(float deltaTime)
    {
        if (stopDashing) return;

        scale.x = rb.position.x > player.position.x ? -1 : 1;
        rb.transform.localScale = scale;

        velocity.x = scale.x * speed;
        rb.velocity = velocity;
    }

    public override void EndState()
    {
        animator.SetBool("dash", false);
    }
}

DashStateクラスの説明

DashStateクラスは、敵キャラクターのダッシュ動作を管理する特定のステートです。このクラスはStateクラスを継承し、ダッシュステートの開始、更新、終了、および移動完了イベントの処理を行うメソッドを含みます。

コンストラクター

コンストラクターは、移動用のDashStateRigidbody2D、プレイヤー用のAnimator、およびダッシュ速度など、必要なコンポーネントでTransformを初期化します。初期スケールを設定し、速度ベクトルを初期化します。

StartStateメソッド

このメソッドはisStateFinishedfalseに設定し、アニメーターの"dash"ブールパラメータをtrueにすることでダッシュアニメーションを開始します。また、stopDashingフラグもfalseにリセットします。

FinishMovement メソッド

このメソッドは stopDashingtrue に設定し、UpdateState メソッド内でダッシュ動作を停止させます。

UpdateState メソッド

このメソッドは、プレイヤーの位置に基づいて敵の位置と向きを更新します。stopDashingtrue の場合、メソッドは早期にリターンし、以降の更新を停止します。敵のスケールを調整してプレイヤーの方向を向かせ、速度をスピードに基づいて計算し、この速度を Rigidbody2D に適用します。

EndState メソッド

このメソッドは、アニメーター内の "dash" ブールパラメータを false に設定することでダッシュアニメーションを停止します。

なぜこの方法を採用したのか

stopDashing フラグは、ダッシュを停止するタイミングを正確に制御できるため、ゲームイベントへの応答性が向上します。敵の位置と方向を継続的に更新することで、DashState は敵がプレイヤーに素早く正確にダッシュできるようにします。アニメーターパラメータを使用することで、敵のアニメーションが動きと正しく同期し、滑らかでリアルな体験を提供します。

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 3.  6

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 3.  6
some-alt