3.Camera Setup
第3章では、カメラがPlayerの動きを追いかける機能の実装を行います。動画の時間も短いし、サクッとやっていくでー。
MainCameraの設定
Inspectorでの設定
main cameraのPositionを(1,15,-22)、Rotaitonを(30,0,0)に調整し、PeojectionをPerspectiveからOrthographicに変更する。
Perspective:遠くのものは小さく、近くのものは小さく、遠近法にのっとって表示する
Orthographic:距離に関係なく、オブジェクトそのものの大きさをそのまま表示する
という違いがある。こちらに詳しい。
WisdomSoft ”投影法”
http://www.wisdomsoft.jp/645.html
どんなときにどんな基準で使い分けるのかな?と思ったら同サイトにこんな記述が。
カメラの設定を変更することで、同じサイズの物体は、距離に関係なく同じサイズで描画できます。Unity では、主に 2D ゲームの開発で使われるカメラの設定です。
なるほどねー。でもなんで?という部分は解決されず。保留して先へ進もう。
カメラのSizeを4.5に、Backgroundを真っ黒に変更したらInspectorからの設定は完了。次はCameraのスクリプトを書いていく。
MainCameraのスクリプト
変数を宣言していく
public Transform target
カメラが追いかけるプレイヤーのPositionをここに格納する。InspectorからPlayerをD&Dするとき、GameObjectでなくても、Transformで宣言すれば直接Positionが取得できることを初めて知りました。
public float smoothing
カメラの移動の滑らかさ。この時点ではよくわからないが、実装後に数値をいじってみると分かる。
Vector3 offset
プレイヤーからカメラへのベクトルを格納する。カメラとプレイヤーの相対的な位置関係を表す。動画では”vector from the camera to the player”と言っているのに、startメソッドの中でプレイヤーからカメラへのベクトルの式を代入するのが解せない。まあいいや。これも保留。
Startメソッド
上述の通り、offsetにプレイヤーからカメラへと延びるベクトル=プレイヤーとカメラとの相対的な位置関係を表すベクトルを代入する。
FixedUpdateメソッド
カメラは、phisycsな動きをするPlayerを追うので、その移動に関しては同様にFixedUpdateへ記載する。
1 |
Vector3 targetCamPos = target.position + offset; |
カメラを移動させる先のPositionを格納する。Playerが存在するPositionに、両者の位置関係を表すoffsetを加算することでそれが導ける。
1 |
transform.position = Vector3.Lerp(transform.position, targetCamPos, smoothing * Time.detaTime); |
実際にカメラのPositionを移動させる。
Vector3.Lerp(ベクトルa,ベクトルb,float)は、ベクトルaとベクトルbの中間地点のベクトルを返す。floatは0~1の値を取り、0.5ならちょうど真ん中、0.8ならベクトルb側に80%寄った地点のベクトルを返す。下記が詳しい。
PlayerをPrefab化する
なんでこのタイミングなのかはわからないですが、PlayerをPrefab化しておきます。
実装確認
スクリプトをMainCameraにアタッチしたら実装確認です。今回はトラブルなく無事に動く。スムーズにいって何よりです。
ちなみに、Time.deltaTimeは1/50なので、smoothingに500とか設定して1より大きくなるようにしたらどうなるのか試してみましたが、50の時と変わらず。1以上はすべて1として使われるっぽいですね。
第4回はコチラ
第2回はコチラ
「Unity公式チュートリアルSurvival Shooter日本語実践Chapter.3」への2件のフィードバック