2014年7月21日月曜日

Unity+diveで視線の角度に合わせて、特定のオブジェクトにカメラを向け続ける

Unity+diveで「踊っている初音ミクさんを好きな角度から見ることができるAndroidアプリ」を開発しました。
https://play.google.com/store/apps/details?id=com.mypaceengine.mmdtest&hl=ja 
このアプリで使用している「特定の座標を中心に視線の角度に合わせて、カメラを移動するアルゴリズム」は以下をご参照ください。ちなみにこの例ですと座標(0,0.9,0)を中心としています。

適用方法は下記です。
①diveをAssetとしてUnityにImport
②「Open Dive Sensor(Script)」を追加する。
③ScriptのOpenDiveSensorを開き、それぞれ下記のように追記する。

 フィールドへ下記を追記
//カメラの回転角の格納
Quaternion rot;

void Start ()に下記を追記
//カメラの回転角を取得
rot=Quaternion.identity;

void Update ()に下記を追記
//カメラの回転角を反映
transform.rotation = rot;
//カメラのデフォルトの高さを0.9、上下の半径は1.2として、カメラの高さ(Y座標)を演算
float yp=(float)(0.9+(UnityEngine.Mathf.Sin(rot.eulerAngles.x* UnityEngine.Mathf.Deg2Rad)*1.2));
//球の平行の半径は1.6とし、カメラの高さに合わせて、球の平面円の半径を演算
float hankei=(float)(UnityEngine.Mathf.Cos(rot.eulerAngles.x* UnityEngine.Mathf.Deg2Rad)*1.6);
//半径とカメラの角度からX座標を演算
float xp=(float)(UnityEngine.Mathf.Sin(-rot.eulerAngles.y* UnityEngine.Mathf.Deg2Rad)*hankei);
//半径とカメラの角度からZ座標を演算
float zp=-(float)(UnityEngine.Mathf.Cos(-rot.eulerAngles.y* UnityEngine.Mathf.Deg2Rad)*hankei);
//カメラにXYZ座標を設定
transform.position=new UnityEngine.Vector3(xp,yp,zp);

移動しているオブジェクトに追従する場合は、追従したいオブジェクトのXYZ座標を(xp,yp,zp)に足しこめば、実現できます。

0 件のコメント:

コメントを投稿