ホーム > カテゴリ > ゲーム開発・Unity・C# >

3Dマップでキャラ(プレイヤー)の移動方法とカメラ設定 [Unity]

初期準備

キャラに追尾するカメラを使用する為に、次のアセットのダウンロードを行い、プロジェクトにインポートすることが必要です。

Standard Assets
※Unityが提供する無償の標準アセットです。

個人的には Third Person Camera (25ドル)がおススメです。
※この記事ではStandard Assetsを使用した例をご紹介します。

キャラ及び地面を設定する

今回のキャラは3Dオブジェクトの「キューブ」、地面は「キューブ」または「Terrain(地形)」のどちらかを設定してください。

キャラのキューブはインスペクターにあるタグを「Player」に変更します。

更にキャラのキューブはインスペクターの下部にある「コンポーネントの追加」で[物理][キャラクターコントローラー]を追加します。

カメラの追加

Unityの下部にある[プロジェクト]タブの[Assetes][Standard Assets][Cameras][Prefabs]の「MultipurposeCameraRig」を「ヒエラルキー」へドロップします。

さきほど、キャラのキューブのタグを「Player」にしたので自動的にそのキューブをカメラが追尾するようになります。

スクリプトを作成する

C#スクリプトを作成します。名前は「playerController」とします。

スクリプト(ソースコード)

WASDキーでキャラを移動。スペースキーでジャンプします。

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

public class playerController : MonoBehaviour
{
    private Vector3 moveDirection;
    private Vector3 addForceDownPower = Vector3.zero;
    private CharacterController controller;

    private float speed;        // 移動速度    
    private float rotateSpeed;  // 回転速度
    private float gravity;      // 重力
    private float jumpPower;    // ジャンプ力

    // Start is called before the first frame update
    void Start()
    {
        this.rotateSpeed = 60.0f;
        this.gravity = 10f;   
        this.jumpPower = 6;
        this.speed = 6.0f;

        this.controller = this.gameObject.GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {
        this.addForceDownPower = Vector3.zero;
        if (controller.isGrounded)
        {
            transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed * Time.deltaTime, 0);
            this.moveDirection = transform.forward * speed * Input.GetAxis("Vertical");

            if (Input.GetButtonDown("Jump"))
            {
                this.addForceDownPower = Vector3.zero;
                moveDirection.y = this.jumpPower;
            }
        }
        else
        {
            this.moveDirection.y -= this.gravity * Time.deltaTime;
        }
        controller.Move(this.moveDirection * Time.deltaTime + this.addForceDownPower);
    }
}

スクリプトをアタッチ

スクリプトをキャラのキューブの「ゲームオブジェクト」へドロップ。

後はゲームを実行して遊んでみましょう。

調整

キャラのキューブに追加した「キャラクターコントローラー」の半径などの設定、スクリプトの移動速度、回転などは各自で調整して下さい。

参考サイト

CharacterControllerをつかってプレーヤーを動かす
UnityのCharacterControllerの接地が判断出来ない時にスクリプトを使う
※今回のスクリプトは上記2サイトのコードの組み合わせ+αです。





関連記事



公開日:2019年05月04日
記事NO:02749