2015-12-09 41 views
1

我有一個遊戲,你需要旋轉clocks.I無法弄清楚如何旋轉兩個或更多時鐘箭頭toghether.Arrows不在同一時鐘。箭頭有不同的旋轉,他們必須保持自己的旋轉diffrences.IE一箭頭180另一個90打完90度的大轉彎拳之一應該是270,另一個180.Here是我的代碼:如何將兩個遊戲對象一起旋轉?

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 

public class MoveClock : MonoBehaviour 
{ 

public GameObject root; 
public Transform arrow; 
public CircleCollider2D circleCollider; 
public BoxCollider2D boxColliderTrigger; 
public List<MoveClock> connectedClocks; 
public GameManger gameManager; 
public BoxCollider2D[] colliders; 
public int n; 
public BoxCollider2D[] disabledTriggers; 
public bool equal; 
const float initialValue = 90; 
static public int k; 

public float angle; 
public float snapAngle; 
public float dif; 
public Vector3 mousepos; 
public Vector3 dir; 
public int[] zAngles; 
void Start() 
{ 
    zAngles = new int[n]; 
    SetAngles(); 
    CalculateDiffrence(); 
} 
void Update() 
{ 
} 
public void MoveArrow(out float snapAngle) 
{ 
    snapAngle = 0; 
    if (Input.GetMouseButton(0)) 
    { 
     mousepos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
     dir = transform.position - mousepos; 
     angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg + initialValue; 
     transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward); 
     snapAngle = SnapAngle(angle); 
     SetAngleTo(angle); 
    } 
} 
private void SetAngles() 
{ 
    int angle = 360/n; 
    for (int i = 0; i < n; i++) 
    { 
     zAngles[i] = angle * i; 
    } 
} 
private float SnapAngle(float target) 
{ 
    float minDiffrence = float.MaxValue; 
    float closest = float.MaxValue; 
    for (int i = 0; i < zAngles.Length; i++) 
    { 
     float diff = Mathf.Abs(zAngles[i] - target); 
     if (minDiffrence > diff) 
     { 
      minDiffrence = diff; 
      closest = zAngles[i]; 
     } 
    } 
    return closest; 
} 
public void SetAngleTo(float a) 
{ 
    for (int i = 0; i < connectedClocks.Count; i++) 
    { 
     if(equal==true) 
      connectedClocks[i].arrow.rotation = Quaternion.AngleAxis(a, Vector3.forward); 
     else 
      connectedClocks[i].arrow.rotation = Quaternion.AngleAxis(a + connectedClocks[i].dif, Vector3.forward); 
    } 
} 
public void CalculateDiffrence() 
{ 
    for (int i = 0; i < connectedClocks.Count; i++) 
    { 
     Vector3 dir = connectedClocks[i].transform.position - transform.position; 
     dir = connectedClocks[i].transform.InverseTransformDirection(dir); 
     dif = SnapAngle(Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg+initialValue); 
     Debug.Log(string.Format("{0} {1}", dif, connectedClocks[i].circleCollider.name)); 
    } 
} 
} 
+0

在編輯器中將對象作爲父母對象來做這種事情可以說比較容易。這樣,您可以調整箭頭的轉換而不影響其他箭頭。但是,如果您旋轉時鐘,則箭頭隨之移動。 – MickyD

+0

您使用全球或本地空間嗎? – Minzkraut

回答

1

簡單的把對象作爲另一個孩子,會做的一個。

A   //or B 
|__B  //  |__A 

或以編程方式:

A.transform.parent = B.transform; //or 
A.transform.SetParent(B.transform); 

在這種背景下,如果旋轉角度任意,B將會跟進,無需計算,並保持他們的角度差的代碼。

+0

謝謝,我會嘗試。我可能會像往常一樣顛覆它 –

+0

忘了提及箭頭在不同的時鐘 –

相關問題