プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

Unity3D RPG風のキャラ移動方法

■ロールプレイングゲームでおなじみの方向キーを押した方向に進みつつ、カメラも追随する方法

 
 
①プレイヤーとなるモデルを用意
モデルが無い場合はこちらからダウンロード→簡易3Dモデル


 
 
②Unity3Dプロジェクトを作成してモデルをインポート
「Assets」⇒「Import New Asset…」を押下し、モデルをインポート
 



 
 
③②でインポートしたモデルをヒエラルキーウィンドウにドラッグして、インスペクター内のRotationY軸に「180」と入力して、モデルを正面に向ける
 


 
 
④モデルに「RigidBody」と「Box Collider」のコンポーネントを追加して、「Box Collider」の「Center」・「Size」を調整
 


 
 
⑤ヒエラルキーウィンドウの「Create」⇒「3D Object」⇒「Plane」を押下して地面を作成し、インスペクターの「TransForm」の「Scale」で大きさを調整
 


 
 
⑥ヒエラルキーウィンドウから「Main Camera」を選択し、インスペクターの「TransForm」の「Position」を「Y:5 Z:-20」に設定
 


 
 
⑦プロジェクトウィンドウで「Create」⇒「C# Script」を押下し、スクリプト名を「Walk」としてスクリプトを作成
 


 
 
⑧⑦で作成したスクリプトの内容は下記のとおりとする
 


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

public class Walk : MonoBehaviour
{
    // プレイヤーの向き
    Vector3 playerPos;
    // 左右キー
    float x;
    // 上下キー
    float z;
    // プレイヤーが倒れないようにする準備
    Rigidbody rd;
    // 移動スピード係数
    float speed = 0.05f;
    // カメラオブジェクト
    GameObject mainCamera;
    // カメラの位置
    Vector3 cameraPos;

    // Start is called before the first frame update
    void Start()
    {
        // プレイヤーの重力コンポーネントを取得し、倒れないように回転を制御        
        rd = GetComponent();
        rd.constraints = RigidbodyConstraints.FreezeRotation;

        // カメラオブジェクトを取得
        mainCamera = GameObject.Find("Main Camera");
    }

    // Update is called once per frame
    void Update()
    {
        // 左右キーを押した時の値(0~1)
        x = Input.GetAxis("Horizontal");
        // 上下キーを押した時の値(0~1)
        z = Input.GetAxis("Vertical");

        // 方向キー(十字キー)を押した方向
        playerPos = new Vector3(x, 0, z);

        if (playerPos.magnitude > 0.1) {
            // 方向キー(十字キー)を押した方向にプレイヤーの向きを変更
            transform.rotation = Quaternion.LookRotation(playerPos);

            // プレイヤーを移動
            transform.Translate(Vector3.forward * speed);

            // 重力ベクトルを変更して移動する場合
            // rd.velocity = new Vector3(x * speed, 0, z * speed);

            // プレイヤーを追随するようにカメラの位置を設定 ※高さと奥行きも調整
            cameraPos = this.gameObject.transform.position;
            cameraPos.y += 5f;
            cameraPos.z += -20f;
            mainCamera.transform.position = cameraPos;
        }
    }
}

 


 
 
⑨「Walk.cs」をヒエラルキーウィンドウのプレイヤーにアタッチ
 


 
 
⑩再生して、方向キーを押すとその方向に進みつつ、カメラも追随していることを確認