>

처음으로 작은 게임을 만들어 지금까지 즐기고 있습니다. 나를 귀찮게하는 유일한 것은 그래픽 레이 캐스터가하는 일에 대한 인간적인 설명을 찾을 수 없다는 것입니다. 차단 마스크 란 무엇입니까, 차단 물체 등은 무엇입니까? 클릭하거나 원하지 않는 것을 숨겨야합니까?

예를 들어 다음 스크린 샷이 있습니다 : http://i.imgur.com/6nkVY7b.png

overlayCanvas는 상단에 분홍색 사각형이 있고 분홍색 사각형에 "버튼"버튼이 있습니다. 그럼에도 불구하고 버튼과 분홍색 사각형 대신 전체 피 묻은 캔버스를 클릭 할 수 있습니다. 이는 캔버스가 자체 카메라가있는 "topLayer"에 있기 때문에 모든 상호 작용이 포착되었음을 의미합니다.

overlayCanvas의 Square + 버튼도 "topLayer"에 있습니다. 그러나 게임이 배경 이미지의 클릭에 의존하기 때문에 버튼과 분홍색 사각형 (및 그 안에 포함 된 것)을 클릭 할 수 있기를 원합니다.

  • 답변 # 1

    레이 캐스트 란 무엇입니까? 물체 차단 및 마스크 마스크 란 무엇입니까? 레이는 원점에서 시작하여 특정 방향으로 영원히 계속되는 수학적 장치입니다.raycast를 사용하면 광선을 던지고 던지는 단어처럼 사용됩니다. 마치 바위를 던지고 그 방향으로 영원히 계속되면 마치 무언가를 칠 때까지 멈추지 않습니다. 물체에 부딪 쳤는지 여부와 물체가 무엇인지에 관심이 있습니다.

    객체 차단은 레이 캐스트가 명중 될 수 있도록 특별히 정의한 객체입니다.
    차단 마스크를 사용하면 수많은 차단 객체를 전달하는 대신 레이 캐스트가 비트 마스크 . 비트 마스크는 코딩되어 각 비트는 레이어를 나타냅니다. 비트 마스크가 0000000000000101 인 경우   (1 | 1<<2) 로 표시  또는 5  그러면 레이 캐스트는 레이어 1과 레이어 3에 의해서만 차단되므로 해당 레이어의 오브젝트 만 타격 할 수 있습니다.

    그래픽 레이 캐스터 및 유니티의 이벤트 시스템
    Unity의 GraphicRaycaster 는 버전 4.6에서 다른 많은 것들과 함께 소개되었습니다. 그것은 Unity의 새로운 이벤트 시스템의 모든 부분입니다. 그런 이유로, GraphicRaycaster  원래는이 시스템을 통해 사용하도록되어있었습니다 (물리 레이 캐스터 및 2D와 동일하며 모두 Physics.Raycast 와 다릅니다)  UI 이벤트에서 발생하는 것이 아니라 일반 레이 캐스트 용입니다. Unity에서이 컴포넌트를 사용하기위한 두 가지 옵션이 있습니다.


    유니티의 이벤트 시스템 을 사용하여 유니티 방식을 최대한 활용하고 싶다면 장면에 하나를 배치해야합니다. GameObject > UI > Event System 에서 찾을 수 있습니다 . 여기에서 이벤트를 캡처하여 원하는대로 사용할 수있는 몇 가지 방법이 있습니다.

    이벤트 트리거 사용 ( Component > Event > Event Trigger 에 있음)  편집기를 사용하여 모든 연결을 만듭니다.

    편집기를 피하려면 MonoBehaviour  캡처하려는 이벤트에 따라 지정된 인터페이스를 구현할 수 있습니다. 이들은 UnityEngine.EventSystems.I...Handler 입니다   IBeginDragHandler 와 같은 인터페이스 인터페이스

    이 동영상 은 각 방법의 구체적인 구현을 보여줍니다.
    이벤트 시스템, 트리거 및 이들이 모두 함께 작동하는 방법에 대한 자세한 내용은 이 동영상 도움이 될 수도 있습니다.

    GraphicRaycaster 를 호출하여 직접 사용할 수도 있습니다. 레이 캐스트 는 이벤트에 대한 응답으로 코드를 작성하는 대신 자체 기능을 수행합니다. 이를 위해 우리는 PointerEventData 를 만드는 다음 코드 스 니펫이 필요합니다.   Raycast 에 보낼 객체  기능.

    //Code to be place in a MonoBehaviour with a GraphicRaycaster component
    GraphicRaycaster gr = this.GetComponent<GraphicRaycaster>();
    //Create the PointerEventData with null for the EventSystem
    PointerEventData ped = new PointerEventData(null);
    //Set required parameters, in this case, mouse position
    ped.position = Input.mousePosition;
    //Create list to receive all results
    List<RaycastResult> results = new List<RaycastResult>();
    //Raycast it
    gr.Raycast(ped, results);
    
    

    results  이제 히트 캔버스 개체가 모두 포함됩니다. 이것은 위즈 위즈와 같은 방식입니다. 는 Unity에서 EventSystem.RaycastAll 을 사용하여 레이 캐스팅합니다 ( 더 많은 캐싱).

    버튼과 관련된 특정 문제
    OverlayCanvas가 레이어에 있지 않도록 설정하십시오. BGCanvas에 차단 마스크가 설정되어 있다고 생각하는 "모든 것"에 의해 그래픽 캐스터의 기본값이 차단되는 것처럼 보이기 때문에 처음에는 레이어에 있다는 사실이 문제를 일으킬 수 있다고 생각합니다.

    PointerInputModule

  • 이전 algorithm - 사용자가 대량 경험치를 얻을 때 벌크 레벨
  • 다음 opengl - 궤도 회전 방정식