반응형
Raycast 를 사용하여 타겟에게 ray 를 쏴서 처리하고 있을때
자신과 타겟사이에 오브젝트가 끼어들면 ray를 쏘지 못하게 되죠.
당연한 말이지만, raycast 사용중 자신과 타겟사이에 오브젝트가 끼어들어도 계속 타겟에게 ray를 쏘고 싶을때가 있습니다.
이럴경우 layermask를 쓰면 아주 좋은데요 , 우선 Raycast 오버로딩된 함수에 layermask를 어덯게 넣고 쓰는지 알아 보겟습니다.
우선 아래 사진처럼 타겟대상(사진에선 Player) 에게 Layer 를 설정해주세요
이제 자신에 해당하는 스크립트에 raycast 사용시 아래와같이 layermask 변수를 넣어주세요
1 2 3 4 | //특정 Layer만 raycast하기 RaycastHit hit; float distance = 10f; int layerMask = 1 << LayerMask.NameToLayer("Player"); // Player 레이어만 충돌 체크함 Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), out hit, distance ,layerMask); | cs |
그러면 raycast시 타겟 사이에 다른 오브젝트가 껴도 타겟만 쏘게 됩니다.
아래에 layermask 다른 예시가 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //특정 Layer만 raycast하기 int layerMask = 1 << LayerMask.NameToLayer("Player"); // Player 레이어만 충돌 체크함 Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), hit, Mathf.Infinity, layerMask); //두개 레이어 raycast하기 int layerMask = (1 << LayerMask.NameToLayer("Player")) + (1 << LayerMask.NameToLayer("MyTeammate")); // Player 와 MyTeammate 레이어만 충돌체크함 Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), hit, Mathf.Infinity, layerMask); //특정 layer만 raycast제외하기 (1) int layerMask = (-1) - (1 << LayerMask.NameToLayer("Player")); // Everything에서 Player 레이어만 제외하고 충돌 체크함 Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), hit, Mathf.Infinity, layerMask); //특정 layer만 raycast제외하기 (2) int layerMask = (1 << LayerMask.NameToLayer("Player")); // Everything에서 Player 레이어만 제외하고 충돌 체크함 layerMask = ~layerMask ; Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), hit, Mathf.Infinity, layerMask); //특정 2개이상 layer raycast 제외하기 int layerMask = ((1 << LayerMask.NameToLayer("Player")) | (1 << LayerMask.NameToLayer("GUN"))); // Everything에서 Player,GUN 레이어만 제외하고 충돌 체크함 layerMask = ~layerMask ; Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), hit, Mathf.Infinity, layerMask); | cs |
이상입니다.
반응형
'유니티 > 프로그래밍' 카테고리의 다른 글
[Unity] OnTriggerStay() 사용시 주의 (0) | 2019.03.25 |
---|---|
[Unity] UnityWebRequest 예제 (0) | 2019.02.19 |
[Unity] 기준RectTransform 으로 로컬 Bounds 구하기 (0) | 2019.01.15 |
[Unity] Quaternion.FromToRotation 이해 (0) | 2019.01.03 |
[Unity] ugui 스킬쿨타임 구현하기 (0) | 2018.12.06 |