일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코루틴
- Generic
- InputManager
- 비선형자료구조
- c#
- skybox
- LINQ
- 유한상태머신
- inputsystem
- 람다식
- 배열
- 장애물달리기
- unity
- script
- BGM
- 스파르타내일배움캠프
- 자료구조
- soundmanager
- delegate
- 직렬화
- 유니티
- FSM
- 메서드
- invokec#events
- 효과음
- ObjectPool
- 스택
- UI
- 인터페이스
- 프로그래머스
- Today
- Total
Unity 개발일지
[Unity] RayCast(레이캐스트) 본문
[RayCast 란?]
눈에 보이지 않는 광선(Ray)에 맞은 물체가 무엇인지 여부를 판단한 뒤 여러 가지 후처리를 하는 방식.
Ray, RaycastHit, MaxDistance, LayerMask 등의 옵션을 가지고 있다.
카메라(출발점) 에서 Ray를 쏜 후 Collider에 부딪히면 RayCastHit으로 검출된 객체의 정보를 알 수 있다.
Collider(충돌)을 검출해야하므로 Physics를 이용한다.
[한번 쏴보자]
Laycast를 관리해줄 Manager를 하나 만들어주었고,
RaycastSceneManager 스크립트를 만들어 붙여주었다.
아래 스크립트설명에 작성하겠지만
Ray는 Square에서 쏠 것이므로 SquareTransform은 Square로 해주었다.
Square 2D오브젝트를 만들어주었고 BoxCollider2D를 붙여주었다.
Wall 2D오브젝트를 만들어주었고 BoxCollider2D를 붙여주었다.
Camera와 Transform을 정의해주고 Start에서 카메라를 가져와주었다.
RaycastHit2d는 부딪힌 물체의 정보를 알 수 있다.
아래 Scene을 보면 알 수 있겠지만 Physics2D.Raycast로 Square의 왼쪽으로 Ray를 쏴주었고,
부딪힌 물체의 이름을 출력하도록 Debug해주었다.
[왜 나랑 부딪히지?]
시작해주었더니 Square가 뜬다.
그 이유는 Ray의 시작 위치가 Square 중앙이기 때문에
Square의 Collider와 부딪혀서 검출된 것
raySquare로 ray의 시작 위치를 바꿔주었다.
Square의 x좌표에서 Square Sprite의 size의 0.6배 만큼 빼준(왼쪽으로 쏠거니까) 지점으로 설정했다.
Wall이 잘 나온다!
[여러명을 맞추고 싶어요!]
RaycastHit2D[] 배열로 만들어준 후 RaycastAll을 사용해주었고,
반복문을 이용하여 Debug해주었다.
Wall, Wall(1), Wall(2) 가 모두 검출되었다.
BoxCast, CapsuleCast, CircleCast 등을 사용한 후
파라미터 값을 조절해주면 Ray의 굵기도 조절해줄 수 있다.
[특정 오브젝트만들만 맞추고 싶어요!]
Object의 Inspector창에서 Add Layer로
각 Wall마다 Layer를 설정해주었다.
int형 변수 layerMask를 정의하고 GetMask로 LayerMask를 가져왔고, 그 값을 Physics2D.Raycast에 넣어주었다.
Wall Layer로 설정해준 오브젝트만 검출되는 것을 볼 수 있다.
[응용하기]
아래 스크립트는 중복점프를 방지하는 OnJump를 구현하는 스크립트이다.
Script에서 LayerMask에 직접 접근하여
검출할 LayerMask를 설정할 수도 있다.
'Unity 개발' 카테고리의 다른 글
[Unity] 코딩하다가 뜬금없이 미술하게된 썰(Terrain) (0) | 2024.06.03 |
---|---|
[Unity] SkyBox로 낮과 밤 구현하기 1 (0) | 2024.05.28 |
[Unity] 충돌에 대해 알아보자 (0) | 2024.05.24 |
[Unity] Coroutine(코루틴)에대해 알아보자 (0) | 2024.05.22 |
[Unity] 오브젝트풀(ObjectPool) 만들기 복습 (0) | 2024.05.21 |