2017-09-09 3 views
0

これは1週間ほどの間問題となっています。私はそれを把握していないようだ。私は、逆さまになると私の潜水艦をそのy軸上で反転しようとしています。マウスの位置で回転します。c#ユニティエラーは、私の潜水艦をy軸上に回転させることができません

このコードは私の潜水艦をマウスの位置で回転させますが、これは完璧です。

Vector3 RayPos = cam.WorldToScreenPoint(transform.position); 
Vector3 dir = Input.mousePosition - RayPos; 
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; 
Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward); 
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 
rotateSpeed * Time.deltaTime);[sub flipping y][1] 

このコードは私の問題です。私のサブが逆さまになると、それは反転する(y)が、 それは一度だけそれをやり直し、正しい方法でそれを反転させないと、 はもう(y)になります。

Debug.Log(Mathf.Abs(Vector3.Dot(transform.up, Vector3.up))); 
if (Mathf.Abs(Vector3.Dot(transform.up, Vector3.down)) < 0.125f) 
{ 
    if (Mathf.Abs(Vector3.Dot(transform.right, Vector3.down)) > 0.825f) 
    { 
     SubTrans.localScale = new Vector3(transform.localScale.x, -1, 
     transform.localScale.z); 
    } 
    else 
    { 
     SubTrans.localScale = new Vector3(transform.localScale.x, 1, 
     transform.localScale.z); 
    } 
} 
+1

この質問は2回目です。あなたの問題を理解することが難しいので、答えが得られていません。たぶんあなたは問題がどのように見えるのアニメーションgifを表示する必要があります。 – Programmer

答えて

0
if (Mathf.Abs(Vector3.Dot(transform.up, Vector3.down)) < 0.125f) 

私は、これはあなたのコードはサブグラウンドへ〜90度である場合にのみ、スワップを行わせると仮定します。絶対値は左辺ともに&の右側にあることを意味するので、これは問題ありません。

if (Mathf.Abs(Vector3.Dot(transform.right, Vector3.down)) > 0.825f) 

しかしこれは、絶対値で間違っています。これは、&を同じように扱います(transform.rightを使用しているので比較的です)。前の条件が有効な場合、abs(transform.right)は常に> 0.8です。

あなたはサブが上を向いているか、ダウンこの

if (Mathf.Abs(Vector3.Dot(transform.up, Vector3.up)) > 0f) //less than 90deg angle with up 
//flip sub upwards 
else 
//flip downwards 

のような上方向を確認することで、あなたはそれが特定の時間に反転する場合は、条件付きの場合は、外側を保つことができるが、これはあるかどうかをチェックする必要があります

必要なものすべて。

関連する問題