Unity3D で物理ベースのキャラクター コントローラーをコーディングする方法

Unity3D で物理ベースのキャラクター コントローラーをコーディングする方法
あなたのような読者は、MUO のサポートを支援します。当サイトのリンクを使用して購入すると、アフィリエイト手数料が発生する場合があります。 続きを読む。

キャラクター コントローラーを使用すると、ゲームに単純な動作物理を実装できます。





サウンドがWindows10で機能しない

Unity3D キャラクター コントローラーには、いくつかの角度からアプローチできます。強力なクラスと関数を備えたライブラリを使用する場合、物理ベースのキャラクター コントローラーを作成することは、ゲーム開発を開始する楽しい場所になる可能性があります。





ステップ 1: プレイヤーと地形オブジェクトを使用してシーンを作成する

  ユニティ キャラクター コントローラー 3D スペース

Unity を開き、新しいプロジェクトを作成したら、いくつかのオブジェクトをシーンに追加することから始めることができます。これらのオブジェクトは任意の順序で作成できますが、正しい設定を使用するように注意してください。このプロジェクトは基本的なものですが、 Unity を始める .





地形の 3D 平面オブジェクト

シーンに追加する最初のオブジェクトは平面です。階層ペイン内を右クリックし、 3D オブジェクト を選択 飛行機 リストから。平面のサイズを調整して、より大きなテスト領域を提供できますが、他に何もする必要はありません。

キューブ オブジェクト プレーヤー モデル

次に、立方体をシーンに追加して、プレイヤー モデルとして機能させます。階層ペイン内を右クリックし、 3D オブジェクト を選択 キューブ ドロップダウンメニューから。追加した平面の上に新しい立方体が位置するように配置します。また、立方体を物理オブジェクトにするために Rigidbody コンポーネントを追加する必要があります。



立方体を選択し、インスペクターに移動します。クリック コンポーネントを追加 ペインの下部で、rigidbody を検索し、選択します。 剛体 表示されたらリストから。にチェックを入れます 重力を使う チェックボックスをオンにして、残りの設定はそのままにします。

発見できる 無料の Unity アセットをオンラインで あなたのプロジェクトを盛り上げます。





三人称カメラ

シーンには、三人称カメラとして使用できるカメラが既にあるはずです。立方体の上に快適な三人称の位置になるようにカメラを配置します。カメラを立方体にドラッグ アンド ドロップして親子関係を作成する前に、階層ペインに移動します。これが完了すると、カメラはキューブを自動的に追跡します。

簡単なテスト

シーンにはまだコードがありませんが、これまでに行った作業をテストできます。クリック 演奏する 画面上部のボタンをクリックしてゲームをロードします。立方体が落下して平面の上に着地するのが見えるはずです。カメラは立方体が落下するのを追うはずです。





ステップ 2: C# ファイルを設定する

動きのプログラミングを開始できるように、C# ファイルを作成します。 [プロジェクト] セクションに移動し、右クリックして [作成] にカーソルを合わせ、リストから [フォルダー] を選択します。フォルダに Scripts などの名前を付けます。

新しいフォルダー内を移動してプロセスを繰り返しますが、リストから [C# スクリプト] を選択します。このファイルには任意の名前を付けることができますが、これはその中のメイン関数の名前にもなります。新しい C# が次のようになっていることを確認してください。

 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Character_Control: MonoBehaviour {
    void Start() {
    }

    void Update() {
    }
}

ステップ 3: C# を使用して、速度を伴う前後のモーションを作成する

スクリプト ファイルの関数に追加する前に、いくつかのパブリック変数を宣言します。最初に、プレイヤー モデルを格納するための Rigidbody を作成します。また、移動速度を追跡するために float を宣言します。これらの変数は、関数の外のメイン クラスに入ります。

 public Rigidbody rigidbody; 
public float speed;

次に、Start 関数に 1 行のコードを追加します。これは、GetComponent 宣言を使用して、作成した Rigidbody 変数に Cube の Rigidbody コンポーネントを割り当てます。

 void Start() { 
    rigidbody = GetComponent < Rigidbody > ();
}

これで、プレーヤ モデルを動かすコードを追加できます。このコードは素晴らしくシンプルです。 2 つの if ステートメントが必要なだけです。1 つは前方への移動用、もう 1 つは後方への移動用です。 Input.GetKey を使用して、キーが押されているかどうかを判断できます。この場合、W キーと S キーの押下を探しています。

これらのキーのいずれかを押すと、rigidbody.AddForce を使用して立方体の剛体に力が追加されます。追加された力の方向と速度は、Z 軸の位置 (transform.forward) に速度変数を掛けることで計算できます。逆方向の動きに使用する transform.backward クラスはありませんが、これは transform.forward に -1 を掛けることで実現できます。

 if (Input.GetKey("w")) { 
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

C# ファイルを保存し、Unity に戻ります。プロジェクト ペイン内でスクリプトを見つけ、それを階層内のキャラクター モデル キューブにドラッグ アンド ドロップして、スクリプトをそのオブジェクトに割り当てます。キューブを選択すると、インスペクター ペインにスクリプトがコンポーネントとして表示されます。 Rigidbody 変数ボックス内をクリックし、立方体の Rigidbody を選択します。

[再生] ボタンを使用してゲームを起動し、コードをテストできます。ちょっと待って!問題がある;キューブはまっすぐ進むのではなく転がります。 Cube のインスペクタに戻り、Rigidbody コンポーネントを見つけて、X 軸と Z 軸の Freeze Rotation のボックスにチェックを入れてから、ゲームを再度起動します。これで動作するはずです。

ステップ 4: C# を使用してトルクのある左右の回転を作成する

前後に移動するのとは異なり、Cube プレーヤー モデルを回転させるには、トルクと呼ばれる力が必要です。これには別の変数が必要です。トルク値を割り当てる public float です。

 public float torque;

このスクリプトで左右に曲がるコードは、前後に移動するために使用されるコードと非常によく似ています。ある もしも D キー (右回転) または A キー (左回転) のいずれかが押されたことを検出する各方向のステートメント。

各 if ステートメントの最初のステップは、Input.GetAxis メソッドを使用してターンの方向を決定し、結果を float 変数に割り当てることです。これに続いて、rigidbody.AddTorque を使用して、立方体のトルク、回転、および Z 軸を乗算することにより、立方体のキャラクター モデルに回転力を適用します。

 if (Input.GetKey("d")) { 
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

コードを保存し、Unity に戻ってテストします。キューブを選択し、スクリプトでリジッドボディの質量、ドラッグ、およびトルク変数を編集することで、プレイヤー モデルの回転の速度とランプアップ時間を調整できます。このサンプル プロジェクトは、質量 1、抗力 1、トルク 2 に落ち着きます。

ステップ 5: C# を使用してジャンプをプログラムする

この Unity キャラクター コントローラーの最後の要素として、ジャンプを作成します。ジャンプの高さを制限する必要があるため、ジャンプの作成は、これまで取り組んできた他の基本的なコントロールよりも複雑です。まず、プレーヤーがジャンプしているかどうかを追跡するプライベート ブール変数を追加します。

 private bool isJumping = false;

この変数は、それをテストするステートメントがなければ何もしません。この場合、変数が false かどうかをチェックする基本的な if ステートメントでうまくいきます。同じ条件を他の動き if ステートメントに追加すると、ジャンプ中にプレーヤーが動かなくなります。

 if (!isJumping) { 
}

同じ条件を他の動き if ステートメントに追加すると、ジャンプ中にプレーヤーが動かなくなります。

 if (Input.GetKey("w") && !isJumping) { 
    rigidbody.AddForce(transform.forward * speed);
}

!isJumping if ステートメント内に、別の if ステートメントが必要です。今回は、ジャンプ ボタンのキー押下を確認します。 isJumping 変数を true に設定することは、この if ステートメントで最初に行うことです。次に、rigidbody.angularVelocity 宣言を作成して、現在立方体に適用されている力を削除します。

これで、rigidbody.AddForce 宣言を使用して、立方体の Z 軸に力を加え、ジャンプの上向きの動きを作成できます。最後に、invoke 宣言を使用して、0.8 秒後に別の関数を呼び出します。

 if (!isJumping) { 
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 120);
        rigidbody.angularVelocity = Vector3.zero;
        Invoke("Move_Setter", 0.8 f);
    }
}

この関数は isJumping 変数を false に戻して移動/ジャンプが再び可能になるように設定し、0.8 秒の遅延によりトリガーが早すぎるのを防ぎます。

 void Move_Setter() { 
    isJumping = false;
}

ステップ 6: キャラクター コントローラー コードをテストする

ファイルを保存して Unity に戻り、作成したコードをテストします。ほとんどのコンパイラと同様に、Unity はコードのエラーやその他の問題に関する情報を提供して、何を変更する必要があるかを簡単に確認できるようにします。このプロジェクトの完全なコードは、 GitHub ページ。

Unity キャラクター コントローラーの作成

Unity でキャラクター コントローラーを作成するときは、さまざまなアプローチから選択できます。物理演算を使用することも 1 つのオプションですが、必要に応じて組み込みのキャラクター コントローラー システムを使用することもできます。

このようなさまざまなオプションを調べることは、Unity のようなツールについて学ぶための優れた方法です。