반응형

레이 케스트 기본 형태이다.


아래 소스는 화면을 터치했을 때, 하당 지점으로 레이를 발사 

레이에 콜라이더가 걸리면 처리하게 된다.


주의 점! 


1. 콜라이더 체크이므로 해당 오브젝트에 콜라이더가 있어야한다.

2. null체크가 필요하다 - 해당 체크를 안하면 레이가 쭉 나가다가 아무것도 없어서 에러를 마구 마구 뱉어내는 경우가 발생했었다.


1
2
3
4
5
6
7
8
9
10
11
    if (Input.GetMouseButtonDown(0))
        {
            Vector2 _vec = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            RaycastHit2D rh2d = Physics2D.Raycast(_vec, Vector2.zero);
            if (rh2d.collider != null)
            {
                ///상태 처리 
            }
            Debug.Log("Nothing");
            return;
        } 
cs


반응형

'개발이야기 > Unity & C# 코딩' 카테고리의 다른 글

unity shake(혼들림)  (0) 2018.07.12
특정 방향 바라보면서 이동  (0) 2018.07.11
Unity OtherSetting 접근  (0) 2018.07.10
시스템 언어 찾기(System Language)  (0) 2018.07.10
2단 점프 구현  (0) 2018.07.10
반응형

RayCast를 사용하다보면 충돌을 피하고 싶은 오브젝트들이 생긴다.


Ignore raycast 등을 사용해봤는데 뭔가 맘에 들지 않게 작동한다.


그래서 코드에서 직접 설정하는 부분을 찾았다.


1
2
3
4
5
6
7
1 int layerMask = 1 << LayerMask.NameToLayer("레이어 이름");    // LayerMask
2 layerMask  = ~layerMask ;    // Invert LayerMask
3 RaycastHit hit;
4 Ray ray = Camera.mainCamera.ScreenPointToRay( screenPos );        // screenPos는 화면상 클릭 좌표
5 bool result = Physics.Raycast( ray, out hit, Infinity, layerMask );
cs


중간에 Ivvert LayerMask는 상황에 따라서 사용하면된다.


중요한점은 첫번째 라인의 내용은 체크하고 싶은 레이어를 선택하는 것이다.

두번째줄을 사용하면 해당 레이어는 체크를 안하는 것으로 된다.


직접 컨트롤 해보면 바로 이해가 될것이다.


1
2
3
4
5
6
int layerMask = (1 << LayerMask.NameToLayer("레이어 명")) + (1 << LayerMask.NameToLayer("레이어 명")); // ignore LayerMask
2 layerMask  = ~layerMask ;    // Invert LayerMask
3 RaycastHit hit;
4 Ray ray = Camera.mainCamera.ScreenPointToRay( screenPos );        // screenPos는 화면상 클릭 좌표
5 bool result = Physics.Raycast( ray, out hit,  Infinity, layerMask );
 
cs


여러 레이어를 설정해야 한다면 + 로 사용하면 됩니다.



반응형

'개발이야기 > Unity & C# 코딩' 카테고리의 다른 글

Unity Scene 정보 받아오기  (0) 2018.07.03
Unity FLOW 설명  (0) 2018.04.07
Unity Sound 옵션  (2) 2018.03.27
Raycast - CircleCast  (0) 2018.03.26
admob 두번째 - 기다려도 광고가 안나와요.... ㅠㅠ  (0) 2018.03.23
반응형

RayCast?


이론적으로 많은 분들이 정리해주셨다.


특정한 포인트 방향으로 레이저?를 발사 - collider를 체크해서 녀석의 정보를 받아올 때 사용한다.

화면을 터치할 때도 사용 가능하며, 캐릭터의 주변에 사물을 검사하거나 할 때도 사용한다.


1
2
3
4
float maxDistance = 100;
// Physics.Raycast (레이저를 발사할 위치, 발사 방향, 최대 거리)
RaycastHit2D rh2d = Physics2D.Raycast (transform.position, transform.forward,maxDistance);
cs



Circle Cast?


레이는 위에 설명했듯이 한 점으로 발사하는 형태를 가지고 있다.


하지만 이번에 특정 범위를 체크할 필요가 생겼다. 처음에는 TriggerEnter, stay등 다른 기능을 활용하여 개발하였지만 체크하는 항목이 많아지고

순간순간에 예외처리가 많아 찾게되었다.


무거워서 그런지 , 다들 게임에 딱히 필요가 없어서 인지는 모르겠지만 많이 언급이 안되고 있었다.


CircleCast = 원 형의 지름을 가진 레이를 발사한다.

BoxCast = 사각형 형태의 레이를 발사한다.


특정 범위만큼 체크하고 싶다면 사용하시면 된다.


1
2
3
4
 float maxDistance = 1.09f;
Vector3 myposition = transform.position;
float mysize = 0.16f; // (시작점, 지름, 방향, 발사 거리)
RaycastHit2D rh2d = Physics2D.CircleCast(myposition, mysize, Vector2.up, maxDistance);
cs

진짜 초보자분들은 쏘고서 어쩌라고? 하시는 분들이 있을 것이다.

위에 소스를 그대로 사용하신다면, rh2d를 찍어보면 rh2d.collider 는 대상 , 이름, 테그, 사이즈등 많은 정보를 얻을 수 있으니, 닷을 찍어서 리스트를 확인해보시면 좋을 듯합니다.


반응형

'개발이야기 > Unity & C# 코딩' 카테고리의 다른 글

RayCast - layerMask 설정  (0) 2018.04.04
Unity Sound 옵션  (2) 2018.03.27
admob 두번째 - 기다려도 광고가 안나와요.... ㅠㅠ  (0) 2018.03.23
코르틴(Coroutine)  (0) 2018.03.10
Rigidbody(2D) constraints 설정  (0) 2018.03.07

+ Recent posts