우리가 감지하는 것은 RaycastHit2D 로 basic에서 살펴보았다.
참고 :
https://allaboutmaker.tistory.com/17
1) 레이캐스트 그리기
여기에서 Mouse 스크립트에서 레이캐스트를 그려보자.
레이를 대각선으로 짭게 그려보겠다.
-----------------------
void Update()
{
Vector3 vecPo = new Vector3(0.1f,0.1f,0);
Debug.DrawRay(transform.position, vecPo, new Color(0,1,0));
}
-----------------------
플레이하면 아래와 같이 레이를 확인할 수 있다.
2) 레이캐스트히트
레이어 이름이 Water인 게임오브젝트를 감지하고 감지한 오브젝트의 이름을 찍어보자.
-------------------------
RaycastHit2D hit = Physics2D.Raycast(transform.position, vecPo, 1f, LayerMask.GetMask("Water"));
if(hit.collider != null){
Debug.Log(hit.collider.name);
}
-------------------------
==============
void Update()
{
Vector3 vecPo = new Vector3(0.5f,0.5f,0);
Debug.DrawRay(transform.position, vecPo, new Color(0,1,0));
RaycastHit2D hit = Physics2D.Raycast(transform.position, vecPo, 1f, LayerMask.GetMask("Water"));
if(hit.collider != null){
Debug.Log(hit.collider.name);
}
}
==============
에너미 오브젝트를 Water로 바꾸자.
에너미 오브젝트에 Box Collider2D 가 있어야 감지가된다.
플레이 버튼을 누르고 에너미 오브젝트를 이동해서 감지가 되는지 확인해보자.
3) 함수로 모듈화하기
이제 함수로 바꿔보자.
==============
void Update()
{
FindObject();
}
void FindObject()
{
Vector3 vecPo = new Vector3(0.5f,0.5f,0);
Debug.DrawRay(transform.position, vecPo, new Color(0,1,0));
RaycastHit2D hit = Physics2D.Raycast(transform.position, vecPo, 1f, LayerMask.GetMask("Water"));
if(hit.collider != null){
Debug.Log(hit.collider.name);
}
}
==============
4) 마우스 클릭했을때만 FindObject() 실행하기
여기에서 항상 감지하는 것이 아니라, 마우스를 클릭했을대만 FindObject() 함수가 실행되도록해보자.
------------------
마우스 클릭했을때
=>
if (Input.GetMouseButtonDown (0)) {
실행문
}
------------------
실행문에 FindObject();를 넣어보자.
==============
void Update()
{
if (Input.GetMouseButtonDown (0)) {
FindObject();
}
}
void FindObject()
{
Vector3 vecPo = new Vector3(0.5f,0.5f,0);
Debug.DrawRay(transform.position, vecPo, new Color(0,1,0));
RaycastHit2D hit = Physics2D.Raycast(transform.position, vecPo, 1f, LayerMask.GetMask("Water"));
if(hit.collider != null){
Debug.Log(hit.collider.name);
}
}
==============
5) 마우스 움직일때 냥발도 같이 따라 움직이게 해보자.
==============
void Update()
{
if (Input.GetMouseButtonDown (0)) {
FindObject();
}
objectMove(gameObject);
}
void FindObject()
{
Vector3 vecPo = new Vector3(0.5f,0.5f,0);
Debug.DrawRay(transform.position, vecPo, new Color(0,1,0));
RaycastHit2D hit = Physics2D.Raycast(transform.position, vecPo, 1f, LayerMask.GetMask("Water"));
if(hit.collider != null){
Debug.Log(hit.collider.name);
}
}
void objectMove(GameObject obj)
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 vec = new Vector3(mousePosition.x, mousePosition.y, 0);
obj.transform.position = vec;
}
==============
여기까지 잘 따라 오셨습니다.
그런데 이렇게 하면 레이캐스트가 감지가 잘 안될 수 있습니다.
다음 시간에 레이캐스트 감지가 더 잘 될 수 있도록 해봅시다.
Unity Beginner ch. 08] 마우스 버튼을 클릭했을때 이벤트 (0) | 2020.05.06 |
---|---|
Unity Beginner ch. 07-1] 레이캐스트 분신술! 벡터 배열 (0) | 2020.05.05 |
Unity Beginner ch. 06-1] 마우스 커서 만들기 (0) | 2020.05.05 |
Unity Beginner ch. 06] 게임 오브젝트 마우스 팔로잉 (0) | 2020.05.05 |
Unity Beginner ch. 05] 다른 오브젝트 다른 클래스의 변수/함수 접근 (0) | 2020.05.05 |