// 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}");
}
}
'유니티' 카테고리의 다른 글
유니티 UI버튼 클릭 안될 때 (0) | 2022.09.13 |
---|---|
Layer Mask 와 Layer Tag (0) | 2022.08.16 |
Collision, Trigger, RigidBody 에 대하여 공부해보자. (0) | 2022.08.12 |
ResourceManager 클래스를 만들어 보자. (0) | 2022.08.11 |
Input Manager 클래스를 만들어보자. (0) | 2022.08.10 |