アフィリエイト広告を利用しています

現在ははてなブログで投稿しています!

広告

posted by fanblog

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軸 は横に引かれます。
それを軸にして回転するので、
縦にグルグルですね。
Document001.png
こんな感じで。



ですが、回って欲しいのは横に、です。
ですので横に回る、y が入っていますね。

横です
Document002.png

縦も同様です。

同様です
Document001.png


z軸 は奥行きの軸です。
それを軸にして動く......。

首を傾ける様な動きになってしまいます。

そんな動きは入りませんね。
ですから、z は0です。





var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;


これは難しそうですね......。

上の回転(var rotation...…の部分)に
新しい位置を掛けています。

これは、奥行きです。

率直にいえば、
プレイヤーからカメラまでの距離です。

「-distance」となっていますが、
これが「distance」となると、
プレイヤーの前にカメラが出ます。

写りませんね、キャラが。

ですのでキャラの後ろに出すために
マイナスを付ける、ということですね。

それで常に後ろに出してます。



なんで最後に target のポジションを
足しているか、というのは
多分カメラの中心を target に合わせる為です。

この処理がないと、プレイヤーが
何処どこはかへ
行ってしまうのではないでしょうか?
(この辺は良く分かりません…!)

残りの2つは、
カメラの位置・角度
求めた位置・角度
代入しているだけですね。

ここで、実際にカメラが動く訳です。



これでひと通り説明し終わりましたが…。
分かって頂けたでしょうか?

分からなければまたコメント下さいね。

それでは、今回はこの辺で………。

部活で疲れました…










投稿コメント
* 気軽にコメントくださいー *

※ ブログに表示されるのは、主の承認が必要なので時間がかかります!
  コメントに気づかない場合もありますので、返信が遅れる場合も...

お名前:

メールアドレス:


ホームページアドレス:

コメント: 必須項目

この記事へのトラックバックURL
https://fanblogs.jp/tb/6439731
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
検索
プロフィール
ピノまっちゃさんの画像
ピノまっちゃ
どうも、ピノまっちゃ(PinoMatcha)です!
ゲーム制作をちょこまか頑張ってる大学生で、プログラミングも独学です。
ですので実力は全然ですが、最善を尽くして頑張っております!

名前の由来はピノの抹茶味が好きだからじゃなくて、ピノと抹茶が好きだからです!


更新 : 不定期!
プロフィール
新着記事
最新のコメント
更新事項
2018/8/2 定期更新への変更の報告に追記しました。

2018/5/10 「続きを読む」機能の使い方がやっと分かりました。

2017/9/14 プレイヤーを動かす:関数の解説の一部を書き直しました。

2017/8/1 【unity5】カメラ移動・回転させる方法に多数の画像を追加しました。
カテゴリーアーカイブ
YouTubeチャンネル
Fantiaリンク
よければ応援お願いします!

Pixivアカウント
現在、調整中です…
×

この広告は30日以上新しい記事の更新がないブログに表示されております。