Unity でパルクール システムを実装する

動きを利用して物理的な障害を克服することに焦点を当てたトレーニング分野であるパルクールの概念は、ビデオ ゲームで非常に人気があり、プレイヤーにインタラクティブで魅力的な環境を提供します。 このシステムを実装すると、 Unity ゲームプレイ エクスペリエンスが向上します。 このチュートリアルでは、ウォール ランニングと跳馬に焦点を当てて、 で基本的なパルクール システムをセットアップするプロセスを説明します Unity。

必要な資産

  • 基本的なキャラクター コントローラー:サードパーソン カメラのプレーヤー コントローラーを変更の基本クラスとして使用します。 Unity
  • パルクール アニメーション: 壁走り、跳馬など。

1. シーンを設定する

  • 環境に壁と障害物が適切にタグ付けされていることを確認し、 "Wall" 壁と "Obstacle" 保管可能な障害物に使用します。

2. 'SC_TPSController' 壁面ランニング用のスクリプトの変更

2.1. 壁の検出:

bool IsBesideWall(Vector3 direction)
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, direction, out hit, 1f))
    {
        if (hit.transform.CompareTag("Wall"))
        {
            return true;
        }
    }
    return false;
}

2.2. ウォールランニング

  • このコルーチンはウォールランニングを処理します。
public float wallRunTime = 2f; // Duration of the wall run.

IEnumerator WallRun(Vector3 direction)
{
    float startTime = Time.time;
    canMove = false; // Disable regular movement during wall run.

    while (Time.time - startTime < wallRunTime)
    {
        characterController.Move(direction * speed * Time.deltaTime);
        yield return null;
    }

    canMove = true; // Enable regular movement after wall run.
}
  • 壁ランニングを次の 'Update()' 方法に統合します。
// Wall Run
if (IsBesideWall(transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(transform.right));
}
else if (IsBesideWall(-transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(-transform.right));
}

3. 'SC_TPSController' Vault 用に を変更する

3.1. 障害物の検出

  • キャラクターの前に金庫室の障害物がないか確認してください。
bool IsObstacleInFront()
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
    {
        if (hit.transform.CompareTag("Obstacle"))
        {
            return true;
        }
    }
    return false;
}

3.2. ボールティング

  • ボールトメソッドを追加します。
void Vault()
{
    canMove = false; // Disable regular movement during vaulting.
    
    // Translate the player over the obstacle.
    Vector3 vaultMovement = (Vector3.up + transform.forward) * speed * Time.deltaTime;
    characterController.Move(vaultMovement);
    
    canMove = true; // Enable regular movement after vaulting.
}
  • メソッドにヴォールティングを統合します 'Update()'
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

結論

これらの修正により、既存のサードパーソン プレイヤー コントローラーにウォール ランニング 機能と跳躍機能が導入されます。 これらの新しい動作をさまざまなシナリオでテストし、意図したとおりに動作することを確認します。ゲームの特定の環境や目的のパルクールの仕組みに応じて、調整が必要になる場合があります。

おすすめの記事
Unity用ヘリコプターコントローラー
Unity の 2D プラットフォーマー キャラクター コントローラーにダブル ジャンプ サポートを追加する
Unityでクレーンコントロールを作る方法
Unity用カーコントローラー
キャラクター コントローラー Unity でリジッドボディをプッシュする機能を追加する方法
Unity用飛行機コントローラー
Unity の FPS プレーヤーにしゃがみを追加する