2014-11-06 60 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