Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ パーティクルを追加 | ゲームを改良する
Unityでの格闘ゲーム

bookパーティクルを追加

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

Updateメソッドの変更点の説明

private void Update()
{
    stateManager.UpdateStates(Time.deltaTime);
    scale.x = transform.position.x > player.position.x ? -1 : 1;
    transform.localScale = scale;
}

敵スクリプトのUpdateメソッドには、ステートマネージャーの更新、敵がプレイヤーの方向を向く処理、そして敵がDeathStateの場合の特別な処理が追加されています。このロジックにより、敵が死亡後もプレイヤーの方向を向き続けることを防ぎます。

メソッドの構成要素

StateManagerの更新

stateManager.UpdateStates(Time.deltaTime)

この行は、前フレームからの経過時間(Time.deltaTime)を渡してステートマネージャーを更新します。これにより、現在のステートが毎フレーム正しく更新されます。

DeathStateの判定

if (stateManager.GetCurrentState() is DeathState) return;

この行は、現在のステートがDeathStateかどうかを判定します。 敵がDeathStateの場合、メソッドは早期にリターンし、プレイヤーの方向を向く処理や他の挙動の更新を防ぎます。

プレイヤーの方向を向く処理

以下の行で、敵が常にプレイヤーの方向を向くようにしています:

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

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

この行は、敵のx座標がプレイヤーのx座標より大きいかどうかを判定します:

  • trueの場合、scale.x-1となり、敵は左を向きます;
  • falseの場合、scale.x1となり、敵は右を向きます。

transform.localScale = scale;

この行で、更新されたスケールを敵のtransformに適用し、正しい方向を向くようにします。

このように実装した理由

死亡状態の処理

DeathState のチェックを追加することで、敵キャラクターが死亡後に行動や向きを更新し続けないようにしています。これは、ゲームロジックを維持し、敵が非アクティブになるべきタイミングで予期しない挙動を防ぐために重要です。

ロジックの一元化

プレイヤーの方向を向くロジックを Update メソッドに移動することで、この挙動を一元化し、冗長性を減らしコードの保守性を向上させています。 これにより、敵は現在の状態に関係なく常にプレイヤーの方向を向くようになり、状態ごとのコードが簡素化されます。

敵の死亡処理の解説

public class DeathState : State
{
    Animator animator;

    public DeathState(Animator animator)
    {
        this.animator = animator;
    }

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

    public override void EndState()
    {
    }
}

DeathState クラスは、敵キャラクターが死亡した際の挙動を処理するための特定の状態です。

この方法を選んだ理由

死亡時の挙動管理

DeathState クラスは、敵が死亡した際の挙動を管理し、死亡アニメーションの再生と状態の完了を確実に行う。

アニメーションの統合

アニメーターのパラメーターを使用することで、死亡アニメーションと状態遷移が正しく同期され、滑らかでリアルな演出を実現する。

敵死亡時のパーティクル生成

if (health <= 0)
{
    stateManager.ChangeState(deathState);
    var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
    deathParticle.Play();
    Destroy(deathParticle.gameObject, 5);
}

このコードは、敵の体力がゼロになったときの死亡処理を示している。DeathState へ遷移し、死亡時のパーティクルエフェクトを再生する。

コードの詳細解説

ヘルスチェック

if (health <= 0)

この条件は、敵のヘルスが0以下になったかどうかを判定します。

DeathStateへの遷移

stateManager.ChangeState(deathState)

この行は、DeathStateを使用して敵をStateManagerに遷移させます。

デスパーティクルの生成

var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)

この行は、敵の位置にデスパーティクルエフェクトのインスタンスを生成します。 deathParticlesは、死亡エフェクト用のパーティクルシステムを含むプレハブです。 Quaternion.identityは、パーティクルに回転がないことを保証します。

デスパーティクルの再生

deathParticle.Play()

この行は、生成されたパーティクルエフェクトを再生します。

デスパーティクルの破棄

Destroy(deathParticle.gameObject, 5)

この行は、パーティクルエフェクトのGameObjectを5秒後に破棄するようにスケジュールし、ゲーム内に無限に残らないようにします。

この方法を選んだ理由

ステート管理: DeathStateへの遷移により、敵の死亡時の挙動が適切に管理され、死亡状態専用のロジックが実行されます。

ビジュアルエフェクト: 死亡時のパーティクルエフェクトを再生することで、プレイヤーに視覚的なフィードバックを与え、ゲーム体験を向上させます。

question mark

ヘルスが0以下になったとき、パーティクルシステムはどうなりますか?

正しい答えを選んでください

すべて明確でしたか?

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

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

セクション 4.  1

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 4.  1
some-alt