ウィンドウズマックソフトウェア設定セキュリティ生産性リナックスAndroidパフォーマンス設定Apple すべて

Unityでキャラクターの動きを実装する方法

編集済み 1 日前 によって ExtremeHow 編集チーム

ユニティゲーム開発アニメーション3DプログラミングスクリプティングC#物理コントロールウィンドウズマックリナックス

Unityでキャラクターの動きを実装する方法

翻訳が更新されました 1 日前

序論

Unityは、クリエイターがゲームのアイデアを具現化するための人気のあるゲーム開発プラットフォームです。どのゲームにおいても基本的な要素の1つはキャラクターの動きです。シンプルな2Dプラットフォーマーから複雑な3Dワールドまで、キャラクターの動き方はゲームプレイ体験に大きな影響を与えます。このガイドは、Unityでキャラクターの動きを実装する基本的なステップを案内するために設計されています。RigidBodyやCharacterControllerコンポーネント、C#での基本的な動きのスクリプト作成、最適なゲームプレイ感触のための調整など、さまざまな方法をカバーします。

プロジェクトのセットアップ

プログラミングを開始する前に、新しいUnityプロジェクトをセットアップする必要があります。Unity Hubを開き、新しいプロジェクトを作成します。作成するゲームの種類に応じて、2Dまたは3Dテンプレートを選択できます。プロジェクトに名前を付けて保存場所を選択します。プロジェクトが作成されたら、キャラクターの動きの実装を始めることができます。

シーンに新しいGameObjectを追加します。これがあなたのキャラクターになります。3Dモデル、または2Dゲームを扱う場合はキューブやスフィアのような単純な形状、または2Dスプライトを使用できます。簡単にするために、3Dキャラクターとして基本的なキューブを使用していると仮定します。

Rigidbodyを使用したモーション

UnityのRigidBodyコンポーネントは、物理ベースのモーションを扱う方法を提供します。これには、重力、ドラッグ、衝突が含まれます。キャラクターにRigidBodyを追加するには、GameObjectを選択し、コンポーネントを追加をクリックして、Rigidbodyを見つけて追加します。

        // Rigidbodyを使った移動のC#スクリプト例
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
    public float speed = 5f;
    private Rigidbody rb;
    void Start() {
        rb = GetComponent<Rigidbody>();
    }
    void Update() {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        rb.AddForce(movement * speed);
    }
}
    

このコードは、矢印キーまたはWASDを使用して基本的なモーションを設定します。speed変数はキャラクターの移動速度を制御します。RigidBodyコンポーネントは、衝突と重力を自動的に処理します。モーションの感触を得るために、質量やドラッグなどのRigidBody設定を調整することを忘れないでください。

CharacterControllerを使用した移動

UnityのCharacterControllerは、キャラクターの動きを実装する別の方法です。このコンポーネントは非物理ベースであり、力やトルクに反応しませんが、オブジェクトとの衝突は可能です。通常、プレイヤーキャラクターのスムーズでコントロールされた動きを実現するために使用されます。

CharacterControllerコンポーネントをゲームオブジェクトに追加するには、それを選択し、コンポーネントを追加をクリックしてCharacterControllerを選択します。

        // CharacterControllerを使った移動のC#スクリプト例
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
    public float speed = 6.0f;
    public float jumpSpeed = 8.0f;
    public float gravity = 20.0f;
    private Vector3 moveDirection = Vector3.zero;
    private CharacterController controller;
    void Start() {
        controller = GetComponent<CharacterController>();
    }
    void Update() {
        if (controller.isGrounded) {
            float moveHorizontal = Input.GetAxis("Horizontal");
            float moveVertical = Input.GetAxis("Vertical");
            moveDirection = new Vector3(moveHorizontal, 0.0f, moveVertical);
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
            if (Input.GetButton("Jump")) {
                moveDirection.y = jumpSpeed;
            }
        }
        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);
    }
}
    

この例では、スクリプトはやや複雑です。CharacterControllerは独自のMoveメソッドを使用し、より洗練された制御を可能にします。この例にはジャンプが含まれており、キャラクターを地面に留めるために重力を使用します。speed、jumpSpeed、gravityを変更してニーズに合わせて調整できます。

移動ロジックのスクリプト化

RigidBodyとCharacterControllerの両方の方法には、移動を制御するスクリプトが必要です。以前に提供されたスクリプトは開始点ですが、ランニング、しゃがみ、環境との相互作用など、より多くの機能を含むようにこれらを拡張することができます。

動きを洗練するための便利な方法は、加速と減速を適用し、キャラクターが急に停止または始動するのではなく、徐々に速度を得たり失ったりすることを可能にします。加速を組み込む簡単な方法は次のとおりです:

        // 加速を使用したC#スクリプトの例
public class PlayerMovement : MonoBehaviour {
    public float speed = 6.0f;
    public float acceleration = 5.0f;
    private Vector3 velocity = Vector3.zero;
    private Rigidbody rb;
    void Start() {
        rb = GetComponent<Rigidbody>();
    }
    void Update() {
        float targetSpeed = Input.GetAxis("Vertical") * speed;
        velocity.z = Mathf.MoveTowards(velocity.z, targetSpeed, acceleration * Time.deltaTime);
        Vector3 move = transform.TransformDirection(velocity);
        rb.velocity = new Vector3(move.x, rb.velocity.y, move.z);
    }
}
    

このスクリプトは、`Mathf.MoveTowards`を使用して現在のモーションとターゲットのモーション間をスムーズに補間し、より洗練された現実的なモーション体験を作成します。

高度な移動機能

基本的な動きが実装された後、キャラクターにさらに高度な機能を追加したいかもしれません。これにはランニング、ダブルジャンプ、クライミングなどが含まれます:

スプリントの実装方法は次のとおりです:

        // スプリントのためのC#スクリプト例
public class PlayerMovement : MonoBehaviour {
    public float speed = 6.0f;
    public float sprintSpeed = 12.0f;
    public float acceleration = 5.0f;
    private Vector3 velocity = Vector3.zero;
    private Rigidbody rb;
    void Start() {
        rb = GetComponent<Rigidbody>();
    }
    void Update() {
        float currentSpeed = Input.GetKey(KeyCode.LeftShift) ? sprintSpeed : speed;
        float targetSpeed = Input.GetAxis("Vertical") * currentSpeed;
        velocity.z = Mathf.MoveTowards(velocity.z, targetSpeed, acceleration * Time.deltaTime);
        Vector3 move = transform.TransformDirection(velocity);
        rb.velocity = new Vector3(move.x, rb.velocity.y, move.z);
    }
}
    

このスクリプトは左のShiftキーが押されているかどうかを確認して、スプリント速度を適用するかどうかを判断します。

チューニングと最適化

ゲームを開発するとき、動きを洗練するのに多くの時間を費やします。キャラクターの動きの感触がプレイヤーの経験を定義することがあります。動きを洗練するためのヒントをいくつか示します:

結論

Unityでのキャラクターの動きの実装は、ゲーム開発における基本的なスキルです。物理ベースの動きであるRigidBodyを使用するか、CharacterControllerによる制御された動きを使用するかに関わらず、基本を理解し、高度な機能で拡張することが重要です。スクリプトと動きの微調整を通じて、驚異的で楽しいプレイヤー体験を作成できます。

記事の内容に誤りがある場合, あなたは


コメント