はじめに
興味を持っていただきありがとうございます。
ここでは、キャラクターの自由自在に操る2通りの方法に関してわかりやすく解説していきます。
シチュエーションに合わせてうまく使い分けできるよう両方とも修得していただけると嬉しいです。
では解説していきましょう!
今回はキャラクターに見立てた球を用いて作成していきます。
キャラクター操作について
キャラクターを操作する方法は簡単に2通りの方法があります。
1つはキャラクターに追加されているTransform情報を変えていくことで、キャラクターを自由自在に操る方法。
2つ目は、キャラクターにゲームオブジェクト を物理特性によって制御することが可能になるrigidbodyを追加して、物理挙動を与えてあげることでキャラクターを自由自在に操る方法。
<イメージ>
・前者は、キャラクターをつまんで好きな場所に動かしていく
・後者は、指でキャラクターを押して好きな場所に動かす
transform情報を使った操作方法
環境設定
環境設定は簡単で球を適当な位置に配置するだけです。
位置を中心に持っていきたい方は下記を参照して、transform情報をresetすることで中心に配置させることができます。
C#コードの解説
まず public float moveSpeedでinspector上で動くスピードを動かせるようにmovesSpeedという適当な名前を付けてスピードを調整できるようにする。
次にinputX/inputZにunityに元から備わっているInputManagerの情報を与えてあげると、初期設定の状態であればHorizontal=A/Dキーに対応し、vertical=W/Sキーに対応して値が入るようになる。
そして、moveX/moveYにフレームごとのスピードが当てはめられるように設定した。
最後にmoveX/moveYの値がフレームごとにキャラクターのtoransform情報に上書きされるようにすることで、自由自在に動かすことができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class NewBehaviourScript : MonoBehaviour { public float moveSpeed; private void Update() { float inputX = Input.GetAxis("Horizontal"); float inputZ = Input.GetAxis("Vertical"); float moveX = inputX * moveSpeed * Time.deltaTime; float moveZ = inputZ * moveSpeed * Time.deltaTime; transform.Translate(moveX, 0f, moveZ); } } |
結果
AWSDキーに対応してキャラクターに見立てた球が自由に動かすことができるようになっていると思います。
rigidboby情報を使った操作方法
rigidbobyの編集に関する説明はこちらを参照ください
【unity】Rigidbodyの使用方法~基本編~
興味を持っていただきありがとうございます。 こちらでは、Rigidbodyの簡単な説明をしていきます <Rigidbody> 物体の質量(kg) 空気抵抗の大きさ 回転する際の空気抵抗の大きさ(トルク使用時) 重力の影響を受けるか/受けないか 物理挙動には反応せず、transform情報によって操作可能にする Rigidbobyの反応が良くないときの改善策 設定なし(特に問題がないとき) …
環境設定
rigidbodyを用いて動かす場合、重力が生じるので何もない空間で球を動かそうとすると下記の動画ように球が落ちてしまいます。
そこで今回は、planeを球の下に配置して現実世界でいう床を作成します
C#コードの解説
基本的にはtransformを使った方法と一緒です。しかし動かしてあげる方法が違います。今回は力を与えることでキャラクターを操作できるようにしていきます。
まず、rdodyにキャラクターのrigidbody情報を代入します。
次に、Transform情報を使ったときと同じようにしてmoveX/moveZに値が代入されるようにします。
最後に、rigid.AddForceによって力を加え物理挙動を起こすことでキャラクターを動かせるようにしています。
rigid.AddForce(rigid=キャラクターのrigidbody情報)に(AddForce(X軸方向,Y軸方向,Z軸方向)=各軸に力をくわえる)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class NewBehaviourScript1 : MonoBehaviour { public float moveSpeed; private Rigidbody rigid; private void Start() { rigid = GetComponent<Rigidbody>(); } private void Update() { float inputX = Input.GetAxis("Horizontal"); float inputZ = Input.GetAxis("Vertical"); float moveX = inputX * moveSpeed * Time.deltaTime; float moveZ = inputZ * moveSpeed * Time.deltaTime; rigid.AddForce(moveX, 0f, moveZ); } } |
結果
さっきのやり方と同じように、AWSDキーに対応してキャラクターに見立てた球が自由に動かすことができるようになっていると思います。