2014-11-06 2 views
1

2D 게임을 만들고 있는데 조립 용의 적을 가지고 있습니다.이 적은 대포입니다. 나는 선수가 위치를 바꿀 때이 대포를 돌리고 싶다.GameObject를 플레이어 위치로 회전 하시겠습니까?

캐논은 항상 플레이어 위치로 회전해야합니다.

나는 이것을 시도하고 있습니다. https://www.youtube.com/watch?v=REeSNKWLvIQ

는 캐논 플레이어 위치로 회전되지 않는다 :

// 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); 
     } 
    } 

그 결과를 참조.

이 문제를 어떻게 해결할 수 있습니까?

답변

1

코드는 그냥 작은 변화가 확인 그리고 당신이 가고 좋은 미세이다 : 나는 그냥 그에게 qto2 및 SLERP을 추가하고있어

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); 
    } 
} 

을 .

+0

아주 좋았어요, qto2에서 +90에서 -90으로 바뀌 었습니다. 이제 작동합니다 !! 감사. – FernandoPaiva

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

2D 게임이기 때문에'Quaternion.LookRotation()'을 사용할 수 없습니다. – FernandoPaiva

관련 문제