前回はモデリングをした。
[どうぶつの森 自作する]— 2357 (@95s7k84695a) March 29, 2020
昨日の午後の進捗
・WASDの移動の実装
・装備(?) 系の切り替えUI作成
切り替えUIはアークタンジェントつかって、マウス座標から、角度を計算して、どの装備アイコンの方向にマウスがあるか求めてる
(リプ欄にスクリプト) pic.twitter.com/QEMq3cHN4Y
WASD移動実装までの道のり
プレイヤーにはRigidbody、Box Collideを取り付け、転倒防止のためx,z のFreezeRatationにチェックを入れた。そして次に移動に取り掛かったのだが、
・PlayerをMain Cameraの子オブジェクトにし、Main Cameraを動かす。
↓問題発生
・Main CameraをPlayerの子オブジェクトにし、Playerを動かす
↓問題発生
・Playerを動かし、その動きをMain Cameraに連動させる
となった。↓問題発生
・Main CameraをPlayerの子オブジェクトにし、Playerを動かす
↓問題発生
・Playerを動かし、その動きをMain Cameraに連動させる
その経緯を書いていきます。
1つ目の問題点
PlayerをMain Cameraの子オブジェクトに。Main Cameraを動かして、その子であるPlayerが自動的に動く。
という私がUnity1week「逆」(ReverseString)の時につかった手法である。
しかし、これではPlayerがなにかにぶつかって進めなくなった時、カメラだけ動き、Playerが取り残されるという状態になってしまった。
2つ目の問題点
先程の問題点を改善しようと、PlayerとMain Cameraの親子関係を逆にしてみた。これで移動は良かった。
ただ、Playerを、「Playerが移動している方向に向ける処理」が問題であった。
Playerのrotationを変更すると同時にMain Cameraのrotationも変更する必要がででしまうのだ。
PlayerのスクリプトにMain Cameraに関する処理は出来るだけ書きたくない。(1つのスクリプトには1つの役割にしたい)
この方法も破棄になった
解決
ここで、PlayerとMain Cameraに親子関係を持たせること事態を止めることにした。と言うのも後々のことを考えて、だ。
今後、Main Cameraの動きは Player追従だけではなくなってくる。
例えば、
・バック(アイテム欄)も操作する時にカメラの位置が、Playerに近くなり、角度も変わる。
・家の中に入る時、Playerは動くけどカメラ位置は変わらない。
・家の中ではカメラの動きに制限がかかる
だったら、Main Cameraを独立させてしまおうと言うことだ。
追従機能は、PlayerのX座標とZ座標を取得して、Main Cameraの位置を決定していく。
その他の処理を入れる時は、Playerの座標取得のフラグをfalseにする。
ということにした。
C#スクリプト
Main Cameraのスクリプト
using UnityEngine; public class CamaraController : MonoBehaviour { public Transform player; const float offset = -7; void Start() { if(player == null) player = GameObject.Find("Player").transform; } void Update() { transform.position = new Vector3(player.position.x, transform.position.y, player.position.z + offset); } }
0 件のコメント:
コメントを投稿