Collision을 통해 충돌을 감지했는데, 게임을 만들면서
충돌 하지 않았어도, 앞에 있는 물체를 미리 감지해야할때가 있다. 그럴때 사용하는것이 RyacastHit이다.
먼저 게임오브젝트에서 레이를 눈에 보이게 그려보자.
1) Debug.DrawRay()
-------------------
레이그리기(지금위치에서, 벡터값만큼, 색깔)
=>
Debug.DrawRay(transform.position,new Vector3(1,0,0), new Color(0,1,0));
-------------------
보통 ray는 초록색으로 그린다. new Color(0,1,0)=초록색
화면에 보이게 그려보자.
============
public class PlayerMove : MonoBehaviour
{
void Start()
{
}
void Update()
{
Debug.DrawRay(transform.position,new Vector3(1,0,0), new Color(0,1,0));
}
}
============
플레이 버튼을 누르면 오른쪽에 Scene View에서 플레이어 오브젝트에서 오른쪽1만큼 초록색으로 레이가 생겼다.
** 더해보기
레이케스트를 밑으로 0.9f만큼 초록색으로 그어보자.
정답!
Debug.DrawRay(transform.position,new Vector3(0,-1,0)*0.9f, new Color(0,1,0));
2) RaycastHit2D
레이케스트는 하나에 컴포넌트라고 생각하면 될것같다.
레이캐스트히트는 선언하고, 초기화 해줘야한다. 파라미터 값에 대해 알아보자.
캐스트는 보통 연애인들 캐스팅한다고 생각하면 이해가 쉬울것같다.
-------------------
레이케스트히트2D 레이이름 = 믈리2D.레이캐스트(현재위치에서, 벡터값, 크기);
=>
RaycastHit2D rayHit= Physics2D.Raycast(transform.position, new Vector3(0,-1,0), 0.9f);
-------------------
hit.collider는 충돌이 감지 되지 않으면 null 값을 갖게 된다.
레이케스트를 이용해서 감지가 되었을때 감지된 오브젝트 이름을 메세지로 찍어보는 코딩을 해보자.
====================
public class PlayerMove : MonoBehaviour
{
void Start()
{
}
void FixedUpdate()
{
Debug.DrawRay(transform.position,new Vector3(0,-1,0)*0.9f, new Color(0,1,0));
RaycastHit2D hit = Physics2D.Raycast(transform.position,new Vector3(0,-1,0)*0.9f);
if(hit.collider != null){
Debug.Log(hit.collider.name);
}
}
}
====================
플레이버튼을 누르고 실행을하면 플레이어 자기 자신이 감지 되는 것을 볼 수 있다.
3) RaycastHit2D 캐스팅 조건 추가
레이히트가 플레이어를 감지하도록 하고 싶은 것이 아니다. 그래서 캐스트 조건을 붙여줘야하는데
보통 캐스트는 레이어로 관리한다.
----------------------------------
레이어마스크.마스크가져오기("레이어이름")
=>
LayerMask.GetMask("Water")
----------------------------------
====================
public class PlayerMove : MonoBehaviour
{
void Start()
{
}
void FixedUpdate()
{
Debug.DrawRay(transform.position,new Vector3(0,-1,0)*0.9f, new Color(0,1,0),LayerMask.GetMask("Water"));
RaycastHit2D hit = Physics2D.Raycast(transform.position, new Vector3(0,-1,0), 0.9f, LayerMask.GetMask("Water"));
if(hit.collider != null){
Debug.Log(hit.collider.name);
}
}
}
====================
바닥타일에 레이어를 Water로 바꿔보자.
플레이어 레이어는 Water가 아니어야한다.
플레이 버튼을 누르면 Water 레이어에 닿은 오브젝트에 이름을 가져오는 것을 볼 수 있다.
이번 chapter에서는 레이캐스트의 사용 방법에 대해서 배워봤다.
다음 장에는 마우스, 키보드로 값을 입력받아서 플레이어를 제어해보자!
'Unity Basic > 03. Unity C# script basic' 카테고리의 다른 글
Unity Basic ch. 18] C#Script__Input.GetAxisRaw (0) | 2020.04.28 |
---|---|
Unity Basic ch. 17] C#Script__ Input.GetKeyDown (0) | 2020.04.28 |
Unity Basic ch. 15] C#Script 로 Collider 제어하기 (0) | 2020.04.27 |
Unity Basic ch. 14] C#Script로 제어하기 Rigidbody 2D_Addforce (0) | 2020.04.27 |
Unity Basic ch. 13] C#Script로 제어하기 Rigidbody 2D_Velocity (0) | 2020.04.27 |