Unity/문제해결

Handles.DrawSolidArc 고정된 위치로 그리기

minquu 2021. 9. 30. 11:39
반응형

DrawSolidArc 는 Arc를 그리는 메서드임

 

참고 예제

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=gooldare&logNo=221479323579 

 

3. 부채꼴 충돌

부채꼴은 360도인 원을 일정 각도만큼 자른 모양에 해당한다 아래 그림에서 파란 점을 물체라고 하면 원의 ...

blog.naver.com

 

 

 

 

먼저 내가 증명하려고함 예제에서는 움직이는 피사체의 기준으로 드로우를 해주고 있다.

 

 Handles.DrawSolidArc(transform.position, Vector3.up, transform.forward, angleRange/2, distance);

 

이 함수는 시작점, 노멀벡터, 그리는 시작벡터, 각도, 거리(원의 반지름)에 해당한다

 

한다고함

 

문제점 

그리기 시작벡터가 계속 움직이는 물체의 앞으로 보고 있기 떄문에

내꺼는 고정된 하늘을 보게 하려고함

 

해결방법

처음 생성될때  Awake에서 바라보게 하는 위치를 변수로 저장해서 그곳 바라보게 함

 

    public float angleRange = 45f;
    public float distance = 5f;
    public bool isCollision = false;

    Color _blue = new Color(0f, 0f, 1f, 0.2f);
    Color _red = new Color(1f, 0f, 0f, 0.2f);

    Vector3 direction;

    float dotValue = 0f;

    public Vector3 thePosition;

    public Vector3 InitUpVector;
    public Vector3 InitfowardVector;

    private void Awake()
    {
        this.InitUpVector = transform.up;
        this.InitfowardVector = transform.forward;
    }

    void Update()
    {
        dotValue = Mathf.Cos(Mathf.Deg2Rad * (angleRange / 2));
        direction = new Vector3(0, 10, 0);
        if (direction.magnitude < distance)
        {
            if (Vector3.Dot(direction.normalized, transform.up) > dotValue) {
                isCollision = true;
                Debug.Log("큐브 위에 큐브 존재");
            }
            else
                isCollision = false;
        }
        else
            isCollision = false;

    }

    private void OnDrawGizmos()
    {
        Handles.color = isCollision ? _red : _blue;
        Handles.DrawSolidArc(transform.position, InitfowardVector, InitUpVector, angleRange / 2, distance);
        Handles.DrawSolidArc(transform.position, InitfowardVector, InitUpVector, -angleRange / 2, distance);

    }

 

 

 

 

 

 

반응형