Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Quaternion.Euler
- 유니티 시야 가림
- 깊이 우선 탐색
- 오브젝트 풀링
- LayerMask
- Mathf.Clamp
- 너비 우선 탐색
- 소스코드 줄번호
- 유니티 오브젝트 풀링
- git-lfs
- Raycast
- 이진트리
- unity
- ML-Agents
- 유니티
- InputManager
- eulerAngles
- 알고스팟
- LookRotation
- 유니티 Rotate
- c++
- c++ 문자열 자르기
- 유니티 머신러닝
- 유니티 Collision
- 유니티 리소스매니저
- 유니티 Vector3
- 유니티 InputManager
- LFS
- 유니티 ResourceManager
- 코드블럭 테마
Archives
- Today
- Total
무민은귀여워
[유니티] 충돌 Collision / Trigger / Raycast / LayerMask 본문
반응형
1. 충돌 OnCollisionEnter
// 1) 나 혹은 상대한테 RigidBody 있어야 한다 (IsKinematic : off) // 2) 나한테 Collider가 있어야 한다 (IsTrigger : off) // 3) 상대한테 Collider가 있어야 한다 (IsTrigger : off) private void OnCollisionEnter(Collision collision) { Debug.Log($"Collision @ {collision.gameObject.name} !"); }
2. 트리거 OnTriggerEnter
// 1) 둘 다 Collider가 있어야 한다 // 2) 둘 중 하나는 IsTrigger : on // 3) 둘 중 하나는 RigidBody가 있어야 한다 private void OnTriggerEnter(Collider other) { Debug.Log($"trigger @ { other.gameObject.name} !"); }
주석외의 상황은 유니티 문서 참고
https://docs.unity3d.com/Manual/CollidersOverview.html
Unity - Manual: Introduction to collision
Continuous collision detection (CCD) Introduction to collision Unity handles collision between GameObjects with colliders, which attach to GameObjects and define the shape of a GameObjectThe fundamental object in Unity scenes, which can represent character
docs.unity3d.com

3. 투영 ( Local - World - Viewport - Screen )
Screen - 마우스 포인트에 해당하는 Screen 좌표 출력
* 화면에서 좌측하단이 (0, 0), 우측 상단으로 갈수록 값 증가
Debug.Log(Input.mousePosition); // Screen
ViewPort - 마우스 포인트에 해당하는 ViewPort좌표 출력
Debug.Log(Camera.main.ScreenToViewportPoint(Input.mousePosition)); // Viewport
월드공간은 아래 레이캐스트에서...
4. 레이캐스트 Raycast
카메라에서부터 좌클릭한 지점으로 레이캐스트를 이용해 부딪힌 오브젝트 출력

1. 첫번째 방법
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; Debug.DrawRay(Camera.main.transform.position, dir * 100.0f, Color.red, 1.0f); RaycastHit hit; if (Physics.Raycast(Camera.main.transform.position, dir, out hit, 100.0f)) { Debug.Log($"Raycast Camera @ {hit.collider.gameObject.name}"); }
2. 두번째 방법
// 2. 두번째 방법 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100.0f)) { Debug.Log($"Raycast Camera @ {hit.collider.gameObject.name}"); }
5. LayerMask
레이어를 지정해, 원하는 레이어에서만 레이캐스트 동작하게끔 한다
ex) Add Layer로 8번 "Monster" 9번 "Wall" 추가

// 1. 비트연산으로 mask 확인 int mask = (1 << 8) | (1 << 9); // 2. 이름으로 mask 확인 LayerMask mask = LayerMask.GetMask("Monster") | LayerMask.GetMask("Wall");
// 2. 두번째 방법 (mask 추가) Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f); LayerMask mask = LayerMask.GetMask("Monster") | LayerMask.GetMask("Wall"); //int mask = (1 << 8) | (1 << 9); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100.0f, mask)) { Debug.Log($"Raycast Camera @ {hit.collider.gameObject.name}"); }
* Tag 태그도 레이어마스크 비슷하게 지정해서 사용 가능
반응형
'IT > Unity' 카테고리의 다른 글
[유니티] 오브젝트 풀링 (0) | 2022.05.24 |
---|---|
[유니티] 시야를 가리는 물체 판별 및 카메라 이동 (0) | 2022.05.19 |
[유니티] ResourceManager (0) | 2022.05.17 |
[유니티] InputManager (0) | 2022.05.17 |
[유니티] 회전 rotation (0) | 2022.05.16 |