티스토리 뷰


        //먼저 계산을 위해 마우스와 게임 오브젝트의 현재의 좌표를 임시로 저장합니다.

        Vector3 mPosition = Input.mousePosition; //마우스 좌표 저장

        Vector3 oPosition = arrow.GetComponent<Transform>().transform.position; //게임 오브젝트 좌표 저장


        //카메라가 앞면에서 뒤로 보고 있기 때문에, 마우스 position의 z축 정보에 

        //게임 오브젝트와 카메라와의 z축의 차이를 입력시켜줘야 합니다.

        mPosition.z = oPosition.z - Camera.main.transform.position.z;


        //화면의 픽셀별로 변화되는 마우스의 좌표를 유니티의 좌표로 변화해 줘야 합니다.

        //그래야, 위치를 찾아갈 수 있겠습니다.

        Vector3 target = Camera.main.ScreenToWorldPoint(mPosition);


        //다음은 아크탄젠트(arctan, 역탄젠트)로 게임 오브젝트의 좌표와 마우스 포인트의 좌표를

        //이용하여 각도를 구한 후, 오일러(Euler)회전 함수를 사용하여 게임 오브젝트를 회전시키기

        //위해, 각 축의 거리차를 구한 후 오일러 회전함수에 적용시킵니다.


        //우선 각 축의 거리를 계산하여, dy, dx에 저장해 둡니다.

        float dy = target.y - oPosition.y;

        float dx = target.x - oPosition.x;


        //오릴러 회전 함수를 0에서 180 또는 0에서 -180의 각도를 입력 받는데 반하여

        //(물론 270과 같은 값의 입력도 전혀 문제없습니다.) 아크탄젠트 Atan2()함수의 결과 값은 

        //라디안 값(180도가 파이(3.141592654...)로)으로 출력되므로

        //라디안 값을 각도로 변화하기 위해 Rad2Deg를 곱해주어야 각도가 됩니다.

        float rotateDegree = Mathf.Atan2(dy, dx) * Mathf.Rad2Deg;


        //구해진 각도를 오일러 회전 함수에 적용하여 z축을 기준으로 게임 오브젝트를 회전시킵니다.

        arrow.GetComponent<Transform>().transform.rotation = Quaternion.Euler(0f, 0f, rotateDegree)


[펌] 출처 못찾음.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함