Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ プレイヤー攻撃 | プレイヤー挙動
Unityでの格闘ゲーム

bookプレイヤー攻撃

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

ギズモ

private void OnDrawGizmos()
{
    Gizmos.DrawLine(transform.position, ((Vector2)transform.position + 4f * Vector2.right * localScale.x));
}
  • private void OnDrawGizmos(): OnDrawGizmosコールバックのメソッド宣言。Unityがシーンビューでギズモを描画する際に自動的に呼び出される;
  • Gizmos.DrawLine(...): ギズモを使って線を描画するコード。2つの点を引数として線を定義する;
  • transform.position: このスクリプトがアタッチされているGameObjectの現在位置;
  • ((Vector2)transform.position + 4f * Vector2.right * localScale.x): 線の2点目を計算。GameObjectの現在位置(transform.position)に、右方向へ4単位分のベクトル(4f * Vector2.right)を加算する。localScale.xでGameObjectのx軸方向のスケールに応じて線の長さと方向を調整する。

このコードは、シーンビューでGameObjectの現在位置から右方向に4単位分、x軸方向におけるGameObjectのスケールに基づいて長さと方向を調整した点まで線を描画します。プレイヤーの各攻撃範囲を可視化するために使用します。

攻撃スクリプト

bool isAttacking;
float range;
[SerializeField] LayerMask enemyLayer;

private void Start()
{
    isAttacking = false;
    range = 0f;
}

public void StartAttacking(float attackRange)
{
    isAttacking = true;
    range = attackRange;
}

public void EndAttacking()
{
    isAttacking = false;
    range = 0f;
}

private void Update()
{
    if (isAttacking)
    {
        RaycastHit2D rayCastHit = Physics2D.Raycast(transform.position, Vector2.right * transform.localScale.x, range, enemyLayer);
        if (rayCastHit)
        {
            Debug.Log(rayCastHit.transform.name);
            isAttacking = false;
        }
    }
}

攻撃を開始する際は、StartAttacking 関数を呼び出します。この関数は攻撃の射程をパラメータとして受け取ります。各攻撃ごとに射程が異なるため、攻撃を開始し、射程を適切に設定します。

Update 関数内では、プレイヤーが攻撃中の場合、プレイヤーの位置からプレイヤーが向いている方向に向かって、攻撃の射程分だけRayCastを作成し、enemyLayer のみをフィルタリングします。

敵にヒットした場合、現時点ではその名前をデバッグ出力しますが、将来的には敵の体力を取得して攻撃を行います。 また、攻撃を終了するための EndAttacking 関数があります。

アニメーションイベント

イベントの追加

Unityのアニメーションウィンドウでは、特定のフレームにアニメーションクリップへイベントを追加できます。 アニメーションカーブやキーフレームを右クリックしてアニメーションイベントを追加し、関数やオプションのパラメータを指定します。

関数の定義

アニメーションイベントから呼び出される関数はpublicである必要があります。 Unityのアニメーションイベントシステムは、オプションのfloat型およびstring型パラメータをサポートしており、アニメーション再生中に指定された関数を自動的に呼び出して、アニメーションとゲームプレイロジックの同期やさまざまなアクションのトリガーを実現します。

すべて明確でしたか?

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

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

セクション 2.  3

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 2.  3
some-alt