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

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

広告

posted by fanblog

2017年07月07日

【unity5】カメラ移動・回転 : ClampAngle関数の解説

前書き

今回で最後の解説編になりますね。

解説が終わったら、
全体の処理の流れを確認して終わりにします。

次からは

「プレイヤーの移動」

をやる、と言ったと思います。
......あれ、言いましたよね?

まぁそれはともかく、
解説していきますね。

スポンサードリンク




ClampAngle () : 解説

static float ClampAngle (float angle, float min, float max) {
 if (angle < -360) { angle += 360; }
 if (angle > 360) { angle -= 360; }
 return Mathf.Clamp(angle, min, max);
}


これが、今回説明する
ソースコードになります。

まず関数から見ていきましょう。



static とあります。

これを付ける事によって、
何処どこからでも呼び出せるようになる、
ということだと思います。
(そうであって欲しいです…)

その次はというと……
float とありますよね?

関数なのに少数型のfloat……。
どういう事でしょうね?


少し、関数の最後の方を見て下さい。

そこに、「return」とあります。
これは値を返すという意味で、
いつもの「void」部分にはというと、
返す値の型を void の代わりに記述します。

これをしないとエラーが出ますよ。

以上の事から、
void → float になっているんですね。




ClampAngle (・・・・・・

には、処理が決まっていません。

StartやUpdateのように
呼ばれるタイミングが決まっていない、
と言うことですね。

なので、呼ばないと実行されません!

そこで、前回の未説明部分がでてきますね。
y = ClampAngle(y, yMinLimit, yMaxLimit);

これです。

ここで、呼んでますよね?

そして何やら y だとか yMinLimit だとか、
良く分からないものがあります。

これらが、引数となります。

引数が何か、というのはこちらの
引数を使ってみよう!
をご覧下さい。


話を戻しますが、
現在のカメラの角度を「y」、
それぞれ「縦の角度限界(上、下)」

これらを引数にしています。

受け取りは順に、
y = angle
MinLimit = min
MaxLimit = max
となっています。


この関数でやっている処理は、
簡単に言えば
「縦の角度が360°を超えたら
 0に戻す」
というのをやっているだけです。

これをしないと、
500とか800までいきますからねー。



角度が -360 より下回れば360を足し、
360を上回れば 360 を引いています。

ただただ、それだけです。


そして、

Mathf.Clamp(値, 最小値, 最大値);

これで、最小と最大の間で値を制御出来ます。

今回ではカメラの角度が「値」の部分に
入っているので上下の限界角度として
制限できる、という訳です。

それを返して、yに代入しているんです。

ここまでで、一旦全部ですかね?

スポンサードリンク




全解説まとめ

簡単に今までやってきた部分を
解説していきます。

それでは、順に流していきましょう。

//使うシステムの宣言(?)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//クラス
public class CameraController : MonoBehaviour {

 public Transform target;
 public float distance = 12.0f;
 public float xSpeed = 250.0f;
 public float ySpeed = 120.0f;
 public float yMinLimit = -45f;
 public float yMaxLimit = 85f;
 private float x = 0.0f;
 private float y = 0.0f;

 void Start () {
  var angles = transform.eulerAngles;
  x = angles.y;
  y = angles.x;
 }

 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;
   }
 }

 static float ClampAngle (float angle, float min, float max) {
  if (angle < -360) { angle += 360; }
  if (angle > 360) { angle -= 360; }
  return Mathf.Clamp(angle, min, max);
 }
}


システム宣言は、
「今からこの機能を使いますよ」
と、コンピュータに知らせます。

クラスはプログラムの設計図
みたいな存在ですね。
この中にコードを書きます。

変数宣言です。
  1. カメラの中心となるターゲット
  2. ターゲットからのカメラの距離
  3. カメラの横移動の速さ
  4. カメラの縦移動の速さ
  5. カメラの限界角度(上)
  6. カメラの限界角度(下)
  7. 横の入力 など
  8. 縦の入力 など


Start関数
初期角度として
x. y に代入しています。

Update関数
target が設定されていれば
マウス入力によって
カメラのx, y に反映
y には
上記の処理 + 上限までの制限

カメラの角度・位置を
あらかじめ作っておき、
その後にゲーム内に反映させています。

最後の関数は、
y = ・・・ の所で
実行しています。

限界角度を維持するのと、
カメラの角度が360から抜けない
ようにする為ですね。

終わりに

最後の方、結構走ってしまいましたが…。
分かって頂けたでしょうか?

分かって頂けたのなら幸いです……。

次回からは宣言通り、
「プレイヤーの移動」
をやっていきますね。

ではでは、また次回!



もう少しで夏休み……!
課題地獄です。


スポンサードリンク







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

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

お名前:

メールアドレス:


ホームページアドレス:

コメント: 必須項目

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

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

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


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

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

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

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

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

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