Unity2020.2.1f1
点(0,0)を中心に円柱を回転させて、そのあと動く角度の範囲を制限したいです。
回転量は画面上でのマウスの移動量で決めています。
C#
1 void Start() 2 { 3 oldMouseScrPos = Input.mousePosition; 4 } 5 6 Vector3 getMouseMoveScreen() 7 { 8 //マウスのスクリーン座標を取得 左下が(0,0,0) 9 Vector3 screenPos = Input.mousePosition; 10 //前回の位置との差を計算 11 Vector3 def; 12 def.x = screenPos.x - oldMouseScrPos.x; 13 def.y = screenPos.y - oldMouseScrPos.y; 14 def.z = 0; 15 //現在の位置を保存 16 oldMouseScrPos = screenPos; 17 return def; 18 }
オブジェクトの現在の角度(localAngle)を取得し、そこに回転する角度(rotx)を足して
オブジェクトの角度を変更しています。
C#
1 //現在の角度 2 Vector3 localAngle = obj.gameObject.transform.localEulerAngles; 3 //角度を加算 4 float rx = localAngle.x - rotx; 5 localAngle.x = rx; 6 7 //角度を変更 8 obj.transform.localEulerAngles = localAngle; 9 //↓同様の結果になる 10 //Quaternion angle=Quaternion.identity; 11 //angle.eulerAngles = localAngle; 12 //obj.transform.rotation = angle;
Y軸の回転(水平方向)はうまくいくのですが
X軸の回転(垂直方向)では270(Y軸+方向真上)と90(Y軸―方向真下)に達すると
それ以上同じ方向にマウスを動かしても角度が変化しなくなります(プルプル微動はする)。
そのまま同じ方向に回転させ続けるにはどうすればいいのでしょうか?
また、インスペクター上のTransformのRotationとスクリプト上のlocalEulerAnglesの角度の範囲が違う値になっているのですが同じ値は取得できないのでしょうか?
- インスペクターでは‐180~180
- localEulerAnglesは0~360
回答1件
あなたの回答
tips
プレビュー