2014-09-02 2 views
0

유니티 2d에서 비전 필드를 생성하려고합니다. 캐릭터가보고있는 위치에 따라 회전하는 회전하는 게임 개체에서 레이 캐스트를 투사합니다. 그러나이 캐릭터는 앞뒤로 움직이므로 왼쪽으로 움직일 때 transform.scale을 -1로 설정합니다. 문제는 내가 이것을 할 때 레이 캐스트가 캐릭터와 함께 방향을 바꾸지 않고 오른쪽으로 향하는 것을 유지하지 않는다는 것입니다! 여기에 코드가 있는데, 나는 분명히 뭔가 빠져있다! 어떤 도움을 주시면 감사하겠습니다!회전 변환에서 유니티 2D 레이캐스팅

 Transform parent; 
    float vision_angle_ = 50; 
    float direction; 
    Vector3 angle; 
    Vector2 position; 
    Quaternion q; 
    int x = 10; 

    void Start() 
    { 
      parent = transform.parent; 
    } 

    void Update() 
    { 

      direction = parent.GetComponent<Behaviour>().direction; 

      angle = new Vector2 (x, Mathf.Tan ((vision_angle_) * .5f * Mathf.Deg2Rad) * x); 
      q = Quaternion.AngleAxis (1, -transform.forward);  
      position = new Vector2 (transform.position.x, transform.position.y); 

      for (float i = 0; i < 50; i++) { 
        angle = q * angle; 
        RaycastHit2D tile_hit = Physics2D.Raycast (position, transform.TransformDirection (angle), 10); 
        Debug.DrawRay (position, transform.TransformDirection (angle), Color.green); 
      }  

    } 

답변

0

TransformDirection 변환 규모를 고려하지 않았습니다. 보정하려면 다음을 조정하십시오.

Vector2 direction = transform.TransformDirection(angle); 
if (transform.localScale.x < 0f) { 
    direction.x = -direction.x; 
} 

RaycastHit2D tile_hit = Physics2D.Raycast(position, direction, 10);