注意
本記事で掲載されている動作の実装方法及びプログラムのソースコードは最適な方法ではない可能性があります。今後不具合等が判明した場合には修正及び改良をおこなう可能性があります。
また今後自分で同機能を実装する場合の参考にする可能性もあるためソースコードだけではなく説明しつつ記事を進めていきます。
Unityによる自作ゲーム開発進捗その2になります!
キャラクターの移動とカメラの設定を実装します。
今回はキャラクターの移動は回転動作を入れていないので、ファミリーコンピューターのドラゴンクエスト1のような移動になっています。
以下にソースコードを掲載します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour{
private Vector3 m_vector3;
private Rigidbody m_rigidbody;
private float m_move_speed = 0.01f;
private void Start(){
m_rigidbody = GetComponent<Rigidbody>();
}
private void Update(){
float l_horizontal = Input.GetAxis("Horizontal");
float l_vertical = Input.GetAxis("Vertical");
m_vector3.Set(l_horizontal, 0f, l_vertical);
m_vector3.Normalize();
m_rigidbody.MovePosition(m_rigidbody.position + m_vector3 * m_move_speed);
}
public void PlayerSpeedSet(float a_speed){
m_move_speed = a_speed; // タスク1
}
}
/*
[規則]
p_ 外部アクセス
m_ メンバー変数
l_ ローカル変数
a_ 引数
[説明]
[バージョン]
2020-12-30 キーボードによるプレイヤーキャラの移動実装(回転無し)
[タスク]
タスク1 上限値の制限が必要
*/
キーボードからの入力
移動に使用するWASDと矢印キーの入力を受け取る
移動距離を作成
入力された値を変数に代入する
移動距離を反映
キャラクターが移動する
float l_horizontal = Input.GetAxis("Horizontal");
float l_vertical = Input.GetAxis("Vertical");
キーボードの入力をローカル変数に代入
m_vector3.Set(l_horizontal, 0f, l_vertical);
m_vector3.Normalize();
キーボードからの入力が格納されたローカル変数を使用してVector3に代入し数値を正規化する(斜め移動が有利にならないようにする)
m_rigidbody.MovePosition(m_rigidbody.position + m_vector3 * m_move_speed);
m_move_speedで速度を調整しつつRigidbodyによる移動を実行
public void PlayerSpeedSet(float a_speed){
m_move_speed = a_speed; // タスク1
}
外部からm_move_speedを代入してキャラクターの速度を調整する
戦闘開始前にキャラクターの機動力のステータスを反映させる用途として使用
戦闘中の強化等により機動力が上がる事も想定してスピードに倍率を載せるかどうか試案中…
今後の方針としてカメラの動作はCinemachineを使用して作成する予定です。
今回はCinemachineの自動でオブジェクトを追尾してくれる機能を使用しています。
Followの箇所に追跡するオブジェクト(Player)をアタッチしBodyのプルダウンメニューをFraming Transposerに変更しました。