Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://tam21979.blog95.fc2.com/tb.php/357-cd05a912
この記事にトラックバックする(FC2ブログユーザー)

もしやUnityのInputがあかんのか?

と思ってホイール以外のGetAxisをMousepositionに変えてみた
単品でドラッグの値を出すコードがわかんなかったので変数がアホみたいに増えたけどシカタナイネ…
ついでにマウスホイールのコードもいまいちよくわかんなかったので
キーボード入力も入れてみた
jlikで回転
adwsで平行移動
qzで前後移動
これでどうにもならなかったらもうわけわからんので次行こ
<追記>
そいやキーボードに頼らんでもGUI付ければよかったんだった
という訳で追加


現状コードは下記に
//**********メタセコ準拠のカメラ回転スクリプト**********
//現状の問題:マウスホイールがUSBマウスだと受け付けない
var target : Transform; //起点となるGameObjectを設定して下さい
//初期位置の指定
var ResetDistance = 10.0;
var ResetPosX = 0.0;
var ResetPosY = 0.0;
var ResetX = 0;
var ResetY = 0;
//回転倍率
var RevXSpeed = 0.5;
var RevYSpeed = 0.5;
//並行移動倍率
var PosXSpeed = 0.05;
var PosYSpeed = 0.05;
//キー入力倍率
var KeyRevSpeed = 2;
var KeyPosSpeed = 0.1;
var KeyZomSpeed = 0.1;
//Y軸の回転制限
var YMinLimit = -20;
var YMaxLimit = 80;
//ズーム制限
var MinDistance = 1;
var MaxDistance = 30;
//焦点位置
private var Distance = ResetDistance;
private var PosX = ResetPosX;
private var PosY = ResetPosY;
private var LoPX = ResetPosX;//
private var LoPY = ResetPosY;//

//Obit用変数
private var RevX = ResetX;
private var RevY = ResetY;
private var LoX = ResetX;//
private var LoY = ResetY;//

private var ClX:float;//
private var ClY:float;//
private var DrX:float;//
private var DrY:float;//
private var ClPX:float;//
private var ClPY:float;//
private var DrPX:float;//
private var DrPY:float;//



@script AddComponentMenu("Camera-Control/Mouse Orbit")

function Start () {
var angles = transform.eulerAngles;
RevX = angles.y;
RevY = angles.x;

// Make the rigid body not change rotation
//if (rigidbody)
// rigidbody.freezeRotation = true;
}

//カメラリセットGUI
function OnGUI () {
if (GUI.Button (Rect (5,5,100,50), "カメラリセット")) {
Distance = ResetDistance;
PosX = ResetPosX;
PosY = ResetPosY;
RevX = ResetX;
RevY = ResetY;
LoX = ResetX;
LoY = ResetY;
LoPX = ResetPosX;
LoPY = ResetPosY;
}
}

function Update () {
//角度とり
var rotation = Quaternion.Euler(RevY, RevX, 0);
var position = rotation * Vector3(PosX, PosY, -Distance) + target.position;
transform.rotation = rotation;
transform.position = position;
if (target) {
Distance -= Input.GetAxis("MouseWheele") * 10; //マウスホイールでZ軸移動
//Distance = ClampAngle(Distance, MinDistance, MaxDistance); //距離の上限下限
}
//マウスホイールが効かなかった時の対処
if (Input.GetKey("q")){Distance -= KeyZomSpeed;}
if (Input.GetKey("z")){Distance += KeyZomSpeed;}
//右ボタンドラッグで回転
if (Input.GetMouseButtonDown(1)){ //クリック位置取得
ClX = Input.mousePosition.x;
ClY = Input.mousePosition.y;
}
if (Input.GetMouseButton(1)) { //ドラッグ計算
DrX = Input.mousePosition.x;
DrY = Input.mousePosition.y;
RevX = (ClX - DrX) * -RevXSpeed + LoX;
RevY = (ClY - DrY) * RevYSpeed + LoY;
// RevX += Input.GetAxis("Mouse X") * RevXSpeed;
// RevY -= Input.GetAxis("Mouse Y") * RevYSpeed;
//回転制御
//RevY = ClampAngle(RevY, YMinLimit, YMaxLimit);
}
if (Input.GetMouseButtonUp(1)){ //ドラッグ解除時に数値記憶
var angles = transform.eulerAngles;
LoX = angles.y;
LoY = angles.x;
}
//マウスが効かなかった時の対処
if (Input.GetKey("j")){RevX -= KeyRevSpeed;LoX -= KeyRevSpeed;}
if (Input.GetKey("l")){RevX += KeyRevSpeed;LoX += KeyRevSpeed;}
if (Input.GetKey("i")){RevY -= KeyRevSpeed;LoY -= KeyRevSpeed;}
if (Input.GetKey("k")){RevY += KeyRevSpeed;LoY += KeyRevSpeed;}

//中ボタンドラッグで平行移動
if (Input.GetMouseButtonDown(2)){ //クリック位置取得
ClPX = Input.mousePosition.x;
ClPY = Input.mousePosition.y;
}
if (Input.GetMouseButton(2)) { //ドラッグ計算
DrPX = Input.mousePosition.x;
DrPY = Input.mousePosition.y;
PosX = ((ClPX - DrPX) * PosXSpeed) + LoPX;
PosY = ((ClPY - DrPY) * PosXSpeed) + LoPY;
//PosX -= Input.GetAxis("Mouse X") * PosXSpeed;
//PosY -= Input.GetAxis("Mouse Y") * PosYSpeed;
}
if (Input.GetMouseButtonUp(2)){ //ドラッグ解除時に数値記憶
LoPX = PosX;
LoPY = PosY;
}
//マウスが効かなかった時の対処
if (Input.GetKey("a")){PosX -= KeyPosSpeed;LoPX -= KeyPosSpeed;}
if (Input.GetKey("d")){PosX += KeyPosSpeed;LoPX += KeyPosSpeed;}
if (Input.GetKey("w")){PosY -= KeyPosSpeed;LoPY -= KeyPosSpeed;}
if (Input.GetKey("s")){PosY += KeyPosSpeed;LoPY += KeyPosSpeed;}

}
//一回転したら角度リセット
static function ClampAngle (angle : float, min : float, max : float) {
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}
スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://tam21979.blog95.fc2.com/tb.php/357-cd05a912
この記事にトラックバックする(FC2ブログユーザー)

Appendix

外部ツール

ブログ内検索

最近の記事

カウンタ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。