Skip to content

doraneko94/GeoHack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

GeoHack

Codes for Geospatial Hackers Program 2019.
Geospatial Hackers Program 2019のハンズオン動画で使用しているC#スクリプトです。
こちらのコードをダウンロードして、ハンズオンに活用してください。

PlayerController

Playerを操作するためのスクリプトです。
public変数speedを外から変更できるため、Unityで実行中に移動・回転スピードが変えられます。

↑キー:前進
↓キー:後退
→キー:右回転
←キー:左回転

の基本操作のほかに、転倒から復帰するための動きとして、

xキー:X軸方向回転
zキー:Z軸方向回転

を追加しています。
基本的には

(移動方向) * speed * Time.deltaTime

で実装できますが、そこに適当な数字(10とか50とか)をかけることによって、詳細な速度設定を行っています。
(適宜変更してみてください)

EyeCameraScript

Cameraが特定のオブジェクトを追尾するためのスクリプトです。

public GameObject target

に追尾対象となるオブジェクトが入ります。
スクリプト内ではnullが渡してあるので、Unityのインスペクタから、追尾させたいオブジェクトを選択してください。

基本的には、Updateごとに追尾対象のオブジェクトのpositionを取得し、そのY座標 +2, 進行方向(forward) -7 の位置にCameraを移動させることで追尾を実現しています。
しかし、これだけだとオブジェクトの回転に合わせてCameraが回転しないので、

float arg_new = ArcTan(forward);
float arg_old = ArcTan(transform.forward);
transform.Rotate(0f, (arg_new - arg_old) % 360f, 0f);

でCameraを適切な角度に回転させています。
Unityでは、rotationを直接変更することはできないため、transform.Rotate関数を用いる必要があります。
そのために、arg_newでオブジェクトの回転角、arg_oldで現在のCameraの回転角を計算し、その差の分だけ回転させています。
(360度以上回転するのは無駄なため、360で割った余りの分だけ回す)

ArctanはC#標準のMathf.Atanに基づくオリジナル関数です

float ArcTan(Vector3 forward)
{
    float f_x = forward.x;
    float f_z = forward.z;
    if (f_z == 0.0) {
        f_z += 1e-7f;
    }
    float arg = Mathf.Atan(f_x / f_z) / (2f * Mathf.PI) * 360f;

    if (f_z < 0 & f_x > 0) arg += 180f;
    if (f_z < 0 & f_x < 0) arg -= 180f;

    return arg;
}

オブジェクトまたはCameraの進行方向(forward)を受け取り、そのXとZの値から回転角を計算します。
具体的には、横Z・縦Xの直角三角形を考え、その三角形の角度を求めます。
この時、Mathf.Atanを用いれば、arctan(forward.x/forward.z)の値を取得することができます。
(arctan(A)とは、tanθ=Aを満たすθの値を返す関数です)
ここで、0で除算するのを避けるため、if文を挿入しています。

また、Mathf.Atanは

-π/2 < θ < π/2

の範囲でしか値を返さない(第1・4象限=forward.zが正の時しか正当に評価されない)ので、forward.zが負の値をとる場合の調整を加え、またラジアンではなく度に変換し、

-180 < θ < 180 

の値が返るようにしています。

About

Codes for Geospatial Hackers Program 2019.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages