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

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

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;
    // 移動スピード係数(重力ベクトルで移動する場合)
    float velSpeed = 10f;
    // カメラオブジェクト
    GameObject mainCamera;
    // カメラの位置
    Vector3 cameraPos;

    // Start is called before the first frame update
    void Start()
    {
        // プレイヤーの重力コンポーネントを取得し、倒れないように回転を制御        
        rd = GetComponent<Rigidbody>();
        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 * velSpeed, 0, z * velSpeed);

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

 
 


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

 

 
 


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