2013年2月12日火曜日

Unity 3Dのカメラを作成(win,mac)

Unity3Dのカメラスクリプトを作成しました。
マウスのみ対応で、pan,zoom,orbitが可能です。
https://gist.github.com/hiko9lock/4760161

using UnityEngine;
using System.Collections;
public class AimCamera : MonoBehaviour {
public Transform target;
Vector3 f0Dir= Vector3.zero;
Vector3 upVal= Vector3.zero;
float zoomDistance= 5;
float theta= 0.0F;
float fai= 0.0F;
float loc_x= 0.0F;
float loc_y= 0.0F;
float panWeight= 0.5F;
void Update() {
if( Input.GetMouseButton(0) && !Input.GetKey("left alt" ) ) {
f0Dir= new Vector3(Input.GetAxis("Mouse X")*5.0F, -Input.GetAxis("Mouse Y")*5.0F, 0);
if( Input.GetKey("left alt")) {
loc_x= -Input.GetAxis("Mouse X")*1;
loc_y= -Input.GetAxis("Mouse Y")*1;
f0Dir= Vector3.zero;
}
} else if( Input.GetMouseButton(1)&& Input.GetKey("left alt") ) {
zoomDistance= zoomDistance+(-Input.GetAxis("Mouse X")+Input.GetAxis("Mouse Y"))*0.1F;
} else if( Input.GetMouseButton(2) ) {
loc_x= -Input.GetAxis("Mouse X")*panWeight;
loc_y= -Input.GetAxis("Mouse Y")*panWeight;
} else {
f0Dir= Vector3.zero;
loc_x= 0.0F;
loc_y= 0.0F;
}
theta+= Mathf.Deg2Rad*f0Dir.x*1;
fai+= -Mathf.Deg2Rad*f0Dir.y*1;
upVal.z= zoomDistance*Mathf.Cos(theta)*Mathf.Sin(fai+Mathf.PI/2);
upVal.x= zoomDistance*Mathf.Sin(theta)*Mathf.Sin(fai+Mathf.PI/2);
upVal.y= zoomDistance*Mathf.Cos(fai+Mathf.PI/2);
transform.position= upVal;
target.transform.Translate( Camera.main.transform.up*loc_y+Camera.main.transform.right*(loc_x), Space.World);
transform.position+= target.position;
Camera.main.transform.LookAt(target.position);
}
}
view raw AimCamera.cs hosted with ❤ by GitHub
使い方

  1. maimCameraにスクリプトをアタッチ
  2. targetに注視点用のgameObjectを設定
  • middleボタンでパン
  • LeftButtonでローテート
  • alt+RightButtonでズーム
transform.LookAtを使用しているため注視点用の
gameObjectを設定してください。

Unity3Dのassetのカメラスクリプトを拡張しようとしましたが
思ったとおりに制御できなかったので球座標系で位置を
計算しています。

0 件のコメント:

コメントを投稿