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」をヒエラルキーウィンドウのプレイヤーにアタッチ
⑩再生して、方向キーを押すとその方向に進みつつ、カメラも追随していることを確認