#はじめに
本記事では、Unityでキャラクターを動かすまでの手順を備忘録として残す。
移動方法はいくつかあるが、今回はRigitbodyのvelocityを利用する。
手順通りに進めると、以下のようなものができあがる。
↑:前進
↓:後退
←:左回転
→:右回転
カメラがキャラクターを追従
#Rigitbody.velocityによる移動
Rigitbodyのvelocity(速度)を直接書き換えることで移動する
######メリット
物理演算が適用される
一定の速度で移動するので扱いやすい
単調なゲームに向いている
######デメリット
質量や重力を考慮していないので挙動が非現実的
リアルな動作を追求したい場合は向かない
#手順
######0.前準備
Cube等で床を作り、ColliderをAdd Componentする
(Cube等をCreateした場合、Colliderはデフォルトでセットされている)
######1.キャラクターを設置
キャラクターを用意する(めんどくさければとりあえずCubeでもOK)
メインカメラで見える位置に設置する
######2.RigitBodyを追加
キャラクターにRigitBodyをAdd Compornentする
Use Gravity ☑
Is Kinematic ☐
※再生してキャラクターが床をすり抜けて落ちれば成功
######3.Colliderを追加
キャラクターにColliderをAdd Compornentする
キャラクターと同じくらいの大きさを設定する
Is Trigger ☐
※再生してキャラクターが床をすり抜けなくなれば成功
######4.スクリプトを追加
キャラクターに下記スクリプトをAdd Compornentする
InspectorからspeedとrotateSpeedを設定する
※再生してキャラクターを操作できれば成功
public float speed;
public float rotateSpeed;
private Transform tr;
private Rigidbody rb;
private Vector3 charactorForward;
private Vector3 moveVector;
private float vertical;
private float horizontal;
void Start()
{
tr = this.transform;
rb = GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
//上下の入力
vertical = Input.GetAxis("Vertical");
//左右の入力
horizontal = Input.GetAxis("Horizontal");
//回転
if (horizontal > 0)
transform.Rotate(0, rotateSpeed * Time.fixedDeltaTime, 0);
if (horizontal < 0)
transform.Rotate(0, (-1) * rotateSpeed * Time.fixedDeltaTime, 0);
//移動ベクトル
moveVector = tr.forward * vertical * Time.fixedDeltaTime * speed;
//移動
rb.velocity = new Vector3(moveVector.x, rb.velocity.y, moveVector.z);
}
######5.カメラを追従させる
メインカメラをキャラクターの子オブジェクトにする
※再生してカメラが3人称視点になっていれば成功