2014-11-06 62 views
1

我正在製作2D遊戲,我有一個預製敵人,這個敵人是一門大炮。當玩家改變位置時,我想旋轉這個大炮。將GameObject旋轉到玩家位置?

大炮應該總是旋轉到玩家位置

我正在嘗試這個。

// Update is called once per frame 
    void Update() { 
     float distance = Vector2.Distance(player.position, transform.position); 
     if(distance < 10){ 
      Vector2 dir = player.position - transform.position; 
      float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; 
      Quaternion qto = Quaternion.AngleAxis(angle, Vector3.forward);    
      transform.rotation = Quaternion.Slerp(transform.rotation, qto, 5f * Time.deltaTime); 
     } 
    } 

看到的結果是:https://www.youtube.com/watch?v=REeSNKWLvIQ

大炮沒有旋轉到玩家的位置。

我該如何解決這個問題?

回答

1

你的代碼是精細只是做一個小的變化,你是好去:

void Update() { 
    float distance = Vector2.Distance(player.position, transform.position); 
    if(distance < 10){ 
     Vector2 dir = player.position - transform.position; 
     float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; 
     Quaternion qto = Quaternion.AngleAxis(angle, Vector3.forward); 
     Quaternion qto2 = Quaternion.Euler (qto.eulerAngles.x, 
              qto.eulerAngles.y, 
              qto.eulerAngles.z + 90); 

     transform.rotation = Quaternion.Slerp(transform.rotation, qto2, 5f * Time.deltaTime); 
    } 
} 

我只是添加qto2和球面線性插值到。

+0

非常好,我改變了+90到-90在qto2,​​現在工作!謝謝。 – FernandoPaiva 2014-11-06 15:07:48

1

你可以試試這個代碼:

float turnspeed=1.0f; 

//set a turning speed  
void Update() 
{   
    dir = player.position - transform.position; 
    dir.Normalize(); 
    transform.rotation = Quaternion.Slerp(transform.rotation,Quaternion.LookRotation(dir), turnSpeed *Time.deltaTime);     
} 
+0

我不能使用'Quaternion.LookRotation()'因爲是2D遊戲。 – FernandoPaiva 2014-11-06 09:59:43