RayCast, BoxCast, SphereCast에 Gizmo 그리기
[스토리]
Cast 관련 작업을 하다 보면, 가시적으로 닿는 부분을 확인할 필요가 있다. 어떤 방법이 있을까, 여러 자료를 찾아보다가.
RayCast, BoxCast, SphereCast에 관련하여 예시 코드와 결과물을 적절하게 정리해 놓은 블로그를 발견했다.
자세한 설명과 코드의 결과를 보고자 한다면, 아래의 블로그를 참조하자.
출처: http://theeye.pe.kr/archives/2764
[소스코드]
RayCast)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class RayCaster : MonoBehaviour { void OnCreate() {} void OnUpdate() {} void OnDrawGizmos() { float maxDistance = 100; RaycastHit hit; // Physics.Raycast (레이저를 발사할 위치, 발사 방향, 충돌 결과, 최대 거리) bool isHit = Physics.Raycast (transform.position, transform.forward, out hit, maxDistance); Gizmos.color = Color.red; if (isHit) { Gizmos.DrawRay (transform.position, transform.forward * hit.distance); } else { Gizmos.DrawRay (transform.position, transform.forward * maxDistance); } } } | cs |
BoxCast)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class BoxCaster : MonoBehaviour { void OnCreate() {} void OnUpdate() {} void OnDrawGizmos() { float maxDistance = 100; RaycastHit hit; // Physics.BoxCast (레이저를 발사할 위치, 사각형의 각 좌표의 절판 크기, 발사 방향, 충돌 결과, 회전 각도, 최대 거리) bool isHit = Physics.BoxCast (transform.position, transform.lossyScale / 2, transform.forward, out hit, transform.rotation, maxDistance); Gizmos.color = Color.red; if (isHit) { Gizmos.DrawRay (transform.position, transform.forward * hit.distance); Gizmos.DrawWireCube (transform.position + transform.forward * hit.distance, transform.lossyScale ); } else { Gizmos.DrawRay (transform.position, transform.forward * maxDistance); } } } | cs |
SphereCast)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class SphereCaster : MonoBehaviour { void OnCreate() {} void OnUpdate() {} void OnDrawGizmos() { float maxDistance = 100; RaycastHit hit; // Physics.SphereCast (레이저를 발사할 위치, 구의 반경, 발사 방향, 충돌 결과, 최대 거리) bool isHit = Physics.SphereCast (transform.position, transform.lossyScale.x / 2, transform.forward, out hit, maxDistance); Gizmos.color = Color.red; if (isHit) { Gizmos.DrawRay (transform.position, transform.forward * hit.distance); Gizmos.DrawWireSphere (transform.position + transform.forward * hit.distance, transform.lossyScale.x / 2); } else { Gizmos.DrawRay (transform.position, transform.forward * maxDistance); } } } | cs |
'C# Unity3D' 카테고리의 다른 글
[Transform] 두 Vector 사이의 각도 구하기 (-180~+180) (0) | 2019.03.22 |
---|---|
[Physics] 빠르게 움직이는 Object의 충돌 감지 (0) | 2019.03.22 |
[Physics] Kinematic Object에서 Velocity 값 얻기 (0) | 2019.03.19 |
[Physics] 마그누스 효과, 공기저항 적용하기 (0) | 2019.03.14 |
[Physics] Raycast를 활용한 충돌감지 (0) | 2019.03.13 |