본문 바로가기
[ CODING STUDY ]/》유니티 실습

유니티 raycast, 총알효과

by MRG 2024. 1. 19.
728x90
반응형

 

▣ 레이케스트

장면의 모든 충돌체에 대해 지점에서 origin방향으로 direction길이의 광선을 투사합니다. maxDistance

충돌 생성에 관심이 없는 충돌체를 필터링하기 위해 선택적으로 LayerMask를 제공할 수 있습니다.

지정하면 queryTriggerInteraction트리거 충돌체가 적중을 생성하는지 여부 또는 전역 Physics.queriesHitTriggers 설정을 사용할지 여부를 제어할 수 있습니다.

 

 

▣  public static bool Raycast ( Vector3 원점, Vector3방향, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

 

 

▣ Ray ray변수에는 카메라를 통해서 Raycast를 발사하기 때문에 카메라에 위치와 방향으로 지정했습니다.

 

▣ raycast에 거리는 rayDistance 변수로 지정했습니다.

 

https://docs.unity3d.com/ScriptReference/Physics.Raycast.html

 

Unity - Scripting API: Physics.Raycast

Description Casts a ray, from point origin, in direction direction, of length maxDistance, against all colliders in the Scene. You may optionally provide a LayerMask, to filter out any Colliders you aren't interested in generating collisions with. Specifyi

docs.unity3d.com

 

 

 

▣ LayerMask는 원하는 Layer만 충돌하기 위해 변수를 따로 생성했습니다.

그럼 우리가 원하는 Layer만 충돌하게 할 수 있습니다. 

 

▣ QuryTriggetInteraction은 Collide로 지정했습니다.

raycast에 충돌을 어떤 충돌만 가능할지에 대한 여부를 결정합니다.

 

전역 Physics.queriesHitTriggers를 재정의합니다.

전역 Physics.queriesHitTriggers를 재정 의하여 쿼리(레이캐스트, 스피어캐스트, 오버랩 테스트 등)가 기본적으로 트리거에 도달하는지 여부를 지정합니다. 트리거 충돌체를 무시하려면 쿼리에 무시를 사용하십시오.

 

UseGlobal 쿼리는 전역 Physics.queriesHitTriggers 설정을 사용합니다.
Ignore 쿼리는 트리거 적중을 보고하지 않습니다.
Collide 쿼리는 항상 트리거 적중을 보고합니다.

 

 

https://docs.unity3d.com/ScriptReference/QueryTriggerInteraction.html

 

Unity - Scripting API: QueryTriggerInteraction

Overrides the global Physics.queriesHitTriggers to specify whether queries (raycasts, spherecasts, overlap tests, etc.) hit Triggers by default. Use Ignore for queries to ignore trigger Colliders.

docs.unity3d.com

 

▣ DrawRay는 Raycast를 그려주는 코드입니다. 

그냥 raycast를 쏘게 되면 눈에 보이지 않기 때문에 눈으로 확인하기 위함입니다.

 

https://docs.unity3d.com/kr/530/ScriptReference/Debug.DrawRay.html

 

Debug-DrawRay - Unity 스크립팅 API

Draws a line from start to start + dir in world coordinates.

docs.unity3d.com

 

 

 

▣ 저장 후 큐브오브젝트를 두 개 생성하고 하나만 Is Trigger로 지정하고 하나는 지정하지 않습니다.

그리고 둘 다 Rigidbody를 추가하고 중력과 위치는 고정합니다. 

 

 

▣ 스크립트에서 Layer Make로 할지 지정해 주고 큐브오브젝트도 각각 지정합니다. 

 

 

▣ 그럼 이렇게 LayerMask가 지정한 LayerMask이면 raycast에 충돌되고 빨간색선으로 그려지는 걸 확인할 수 있습니다. 

아니면 초록색 선이 나오게 됩니다.

 

 

▣ 스크립트로 돌아가서 다시 Ignore로 변경하고 저장 후

 

 

▣ Trigger로 지정된 큐브오브젝트가 충돌하면 이제 충돌하지 않는 걸 확인할 수 있습니다. 

 

 

▣ 그리고 아까와 반대로 Trigger가 아닌 오브젝트가 충돌됩니다.

 

 

▣ 이번에는 RaycastAll을 사용해 보겠습니다. 

raycast와 동일하지만 다른 점은 여러 개를 충돌합니다. 

그래서 충돌을 여러 개를 받아오기 때문에 배열로 받아오는 코드로 완성했습니다.

 

▣ 장면을 통해 광선을 투사하고 모든 히트를 반환합니다. 결과의 순서는 정의되지 않습니다.

 

 

https://docs.unity3d.com/ScriptReference/Physics.RaycastAll.html

 

Unity - Scripting API: Physics.RaycastAll

Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close

docs.unity3d.com

 

 

▣ 저장 후 플레이해 보면 이렇게 여러 오브젝트를 같이 충돌하고 이름이 출력되는 걸 확인할 수 있습니다.

 

 

▣ 총을 쏠 때 Raycast를 발사해서 그 위치에 원하는 Layer가 충돌하면 총알효과 오브젝트가 생성되고 

그 충돌된 위치로 총알효과가 재생되는 코드를 완성했습니다.

 

▣ Instantiate()는 객체를 복제 original 하고 복제본을 반환합니다.

 

▣ hitInfo.point : 충돌한 곳의 좌표를 반환합니다.


▣ hitInfo.normal : 충돌한 객체의 표면을 반환합니다. 

 

▣ 그렇기 때문에 LookRotation() 함수에 normal을 넣었습니다. 

 

▣  Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

 

 

https://docs.unity3d.com/ScriptReference/Object.Instantiate.html

 

Unity - Scripting API: Object.Instantiate

This function makes a copy of an object in a similar way to the Duplicate command in the editor. If you are cloning a GameObject you can specify its position and rotation (these default to the original GameObject's position and rotation otherwise). If you

docs.unity3d.com

 

 

 

▣ 스크립트에 효과를 넣어주고 저장합니다. 

 

 

▣ 플레이해서 총을 쏘면 이렇게 해당 위치에 효과가 나오는 걸 확인할 수 있습니다. 

728x90
반응형

'[ CODING STUDY ] > 》유니티 실습' 카테고리의 다른 글

유니티 ai NavMeshAgent  (0) 2024.01.20
유니티 배경음악, 레벨유지  (2) 2024.01.19
유니티 3d ui  (0) 2024.01.18
유니티 뛰는 애니메이션  (0) 2024.01.18
유니티 crosshair  (0) 2024.01.18

댓글