2017年07月05日
【unity5】カメラ移動・回転 : Update関数の解説
はじめに
今回でUpdate関数の説明が終わり、
次回で最後の関数の説明が終わり......
という訳で、もうすぐで
カメラ編は終わり、となりますね。
その次からは、
「プレイヤーの移動」
の記事を書いていこうかな、と
思っています。
大事ですねー、移動。
カメラだけ動かせても楽しくないですからね(笑)
それでは、やっていきます!
スポンサードリンク
Update関数の解説
Update関数は、ここですね。
void Update () {
if (target) {
x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
y = ClampAngle(y, yMinLimit, yMaxLimit);
var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;
transform.rotation = rotation;
transform.position = position;
}
}
この関数も処理が決まっていて、
ゲーム実行中は呼ばれ続ける関数です。
常に更新されている訳ですね。
そしていよいよ、2行目の
if (target) { ・・・・・・
とあると思います。
if の () の中が「true」なら{ }内を実行します。
ですが、() 内の target は Transform型ですよね?
Transform型はpositionとかrotationを
扱うもの……。
それでtrueとか意味が分かりません。
ですので、分かり易くいうと
「存在していたら」
みたいな感じでしょうか?
だいぶ分かり易くなったと思います。
ですから存在していたら {} 内を実行と
なりますね。
target が設定されてなければ
何も動かない、という事になります。
その次、x, y がそれぞれあります。
ここで復習しておきましょう。
「+=」と「-=」、覚えていますか?
左の値に足す(から引く)でしたね?
これは、頭に入れておいて下さいね。
それで x, y ですが、
Start関数で何かを入れてましたよね?
そう、開始直後のカメラの角度でした。
これは始めた瞬間にカメラの向きが
0に戻らないように、
現在の角度のまま始めれるように、の
処理です。
進んで、
Input.GetAxis("Mouse X") * xSpeed * 0.02f;
となっています。
1つずつ分けて考えていくと、
Input.GetAxis("Mouse X")
でマウスの横のみの動きを取得します。
縦の動きは取得しません。
これは軸とか関係ないので
直で X を取得していますね。
-1〜1の間の少数でマウスの移動を
取得する事ができます。
xSpeed
これは、初期値が設定されていたと
思います。
確か、250.0fでしたっけ。
その x に、0.02f を掛けています。
ですので…5 になるんでしょうか?
これら全てを合算して考えると、
最大のマウス入力で、5 まで取得されます。
→ -5〜5
こうですかね?
多分、こうです!(笑)
マウスの動きに対して、-5〜5の間で
カメラを動かせますね。
縦も一緒ですが、
y の方は何故か引いていますね…。
何故でしょうか?
今の僕には分かりません…。
わかり次第、追記しますね。
それの次ですが……。
y = ClampAngle(y, yMinLimit, yMaxLimit);
これは次回の最後の関数を解説する
時に一緒に解説したいと思います。
最後の関数を実行している部分が
入っていますので。
関数が分からないと
この意味も分からない訳です。
そして、次の
var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;
これらですが、カメラに設定するための
角度・位置を作っています。
実際にカメラに動き・回転を反映させるのは
これらの後の処理ですね。
まず作っているのが......角度ですね。
Quaternion.Euler(x, y, z);
で x, y, z にそれぞれ入れた値だけ回ります。
(ここでの x, y, z は、ただの軸を表しています。
本編の変数とは関係ありません。)
例えば、
Quaternion.Euler(10, 0, 0);
とすれば x軸 を中心に10ずつ回転します。
x軸 は横に引かれます。
それを軸にして回転するので、
縦にグルグルですね。
こんな感じで。
ですが、回って欲しいのは横に、です。
ですので横に回る、y が入っていますね。
横です
縦も同様です。
同様です
z軸 は奥行きの軸です。
それを軸にして動く......。
首を傾ける様な動きになってしまいます。
そんな動きは入りませんね。
ですから、z は0です。
var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;
これは難しそうですね......。
上の回転(var rotation...…の部分)に
新しい位置を掛けています。
これは、奥行きです。
率直にいえば、
プレイヤーからカメラまでの距離です。
「-distance」となっていますが、
これが「distance」となると、
プレイヤーの前にカメラが出ます。
写りませんね、キャラが。
ですのでキャラの後ろに出すために
マイナスを付ける、ということですね。
それで常に後ろに出してます。
なんで最後に target のポジションを
足しているか、というのは
多分カメラの中心を target に合わせる為です。
この処理がないと、プレイヤーが
何処はかへ
行ってしまうのではないでしょうか?
(この辺は良く分かりません…!)
残りの2つは、
カメラの位置・角度に
求めた位置・角度を
代入しているだけですね。
ここで、実際にカメラが動く訳です。
これでひと通り説明し終わりましたが…。
分かって頂けたでしょうか?
分からなければまたコメント下さいね。
それでは、今回はこの辺で………。
部活で疲れました…
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
この記事へのトラックバックURL
https://fanblogs.jp/tb/6439731
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック
※ ブログに表示されるのは、主の承認が必要なので時間がかかります!
コメントに気づかない場合もありますので、返信が遅れる場合も...