//구글콘솔 광고 추가가

   // transform.position = 좌표를 변환할때 씀

   // 방향을 가지고 연산을 할때는 transform.TransformDirection() 사용. >> 로컬에서 월드로 변환
  Vector3 look = transform.TransformDirection(Vector3.forward); // 플레이어가 바라보고 있는 방향을 월드로 표현한 벡터.
  Debug.DrawRay(transform.position + Vector3.up, look * 10 ,Color.green); // screen에서 플레이어 레이케스트 그려주기.


< 두가지의 레이케스트 구현 >
        1. 모든애들을 관통하는 레이케스트
        RaycastHit[] hits;
        hits = Physics.RaycastAll(transform.position + Vector3.up, look * 10, 10);
        foreach (RaycastHit _hit in hits)
        {
            Debug.Log($"Raycast : {_hit.collider.gameObject.name} !");
        }

        2. 하나만 타겟팅하는 레이케스트
        RaycastHit hit;
        if (Physics.Raycast(transform.position + Vector3.up , transform.forward * 10, out hit, 10))
        {
            Debug.Log($"Raycast : {hit.collider.gameObject.name} !");
        }


       if (Input.GetMouseButtonDown(0)) //왼쪽 마우스 클릭시
        {
           //클릭한 좌표의 월드좌표를 구하자 //레이가 쏴지는 과정
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane)); //마우스의 월드포지션
            Vector3 dir = mousePos - Camera.main.transform.position; //카메라 위치에서 화면까지 가는 방향벡터.
            dir = dir.normalized; //크기를 강제로 1로 해줘서 방향은 똑같지만 크기는 1로 만들어 둔다.


            //  dir * 100f >> Debug.DrawRay( , 방향 * 거리)를 넣어줘야 하니까 레이케스트에서 max 거리해준 만큼 곱하자
            Debug.DrawRay(Camera.main.transform.position, dir * 100f, Color.red, 1.0f);
         

            if (Physics.Raycast(Camera.main.transform.position, dir, out hit, 100.0f))  // 값이 true 일경우 무언가 충돌한거지
            {
                Debug.Log($"Raycast Camera : {hit.collider.gameObject.name}");
            }
        }


   < 마우스 좌표 확인 >

        // 최종적으로 화면안에 나오게 하려면 
        // Local <-> World <-> Viewport <-> Screen (2D 화면) Viewport 와 Screen 는 거의 비슷

       

        // Input.mousePosition >> 현재 마우스 좌표를 픽셀 좌표로 뽑아온다.
        Debug.Log(Input.mousePosition); // screen 좌표 출력(픽셀좌표가 곧 screen) 

 

        // Viewport 좌표 출력(픽셀과 상관없이 화면 비율의 좌표)
        Debug.Log(Camera.main.ScreenToViewportPoint(Input.mousePosition)); 
       


< 이미 유니티에 만들어 져있는 Ray를 이용해서 깔끔하게 작업하기 >

if (Input.GetMouseButtonDown(0)) //왼쪽 마우스 클릭시
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            Debug.DrawRay(Camera.main.transform.position, ray.direction * 100f, Color.red, 1.0f);

            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100f))
            {
                Debug.Log($"Raycast Camera : {hit.collider.gameObject.name}");
            }       
        }


 

728x90
반응형

+ Recent posts