상세 컨텐츠

본문 제목

[Unity] 유니티 마우스 클릭 canvas UI랑 Terrain이 겹칠때 또는 canvas외의 오브젝트 겹칠때 관련

게임엔진관련/유니티 엔진

by AlrepondTech 2020. 2. 3. 00:56

본문

반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

 

//IsPointerOverGameObject 함수는 캔버스 클릭터치선택이 되었을때 알려주는 함수이다.

//(터치클릭선택시 캔버스오브젝트와 그외의 오브젝트 구분할 때 좋은 함수)

//IsPointerOverGameObject() 을 사용하여 모바일에 적용할때 모바일에서 인식이 안될수가 있다 이럴때에는

//아래코드와 같이 포이터ID를 설정해서 IsPointerOverGameObject(포인트아이디)를 따로 넣어주어야 한다

//아래 코드 pointerID의 변수에 각 디바이스의 설정에 따른 포인트아이디를 넣어주자. 

 

void Test()

{

   int pointerID = 0;

#if UNITY_EDITOR || UNITY_STANDALONE || UNITY_WEBPLAYER
        pointerID = -1;
#elif UNITY_IOS || UNITY_ANDROID || UNITY_WP8 || UNITY_IPHONE
        pointerID = 0;
#endif

        bool bTouchCanvasUI = false;
        if (EventSystem.current.IsPointerOverGameObject(pointerID)) //캔버스가 선택되었을때 이벤트 시스템이다.
        {
            bTouchCanvasUI = true;
        }

 

//... 코드들

 

}

 

 

 

 

=================================

=================================

=================================

 

 

 

출처: https://blog.naver.com/PostView.nhn?blogId=yys3110&logNo=220659474124&parentCategoryNo=&categoryNo=24&viewDate=&isShowPopularPosts=false&from=postView

 

Unity UI - Blocking clicks (예 : Canvas의 버튼등 있을때 뒤에 raycast 막기)

 

----------------------------------------------------------------------------------------------------------------------------------------------

 

//캔버스를 먼저 클릭하면 if문이 지나치게 된다.

//캔버스와 다른 예로들어 3D오브젝트를 클릭하면 if문이 들어갈수 있겠끔 된다.

 

using UnityEngine.EventSystems;

 

//캔버스를 먼저 선택클릭을 제외했을때..
if (!EventSystem.current.IsPointerOverGameObject()){

//내용

}

 

//캔버스를 먼저 선택클릭하였을때...

if (EventSystem.current.IsPointerOverGameObject()){ 

내용 

}

 

----------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

=================================

=================================

=================================

 

 

 

 

출처: https://www.devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=80881

 

안녕하세요 3d로 간단한 rpg게임 만드는 중입니다

마우스 왼쪽 버튼을 누르면 캐릭터가 공격하도록 만들었습니다.

 

그리고 Canvas를 추가해서 판넬 3개와 버튼을 UI로 만들었는데

UI 쪽을 클릭해도 왼쪽버튼으로 인식해서 캐릭터가 계속 공격합니다 ㅠㅠ

 

저는 UI랑 world화면 상에 마우스 클릭했을 때 공격하는 거랑 구분하고싶습니다 ㅠㅠㅠ

어떻게 구현해야할까요?? ㅠ.ㅠ 

 

현재 메인 카메라가 월드 내에서 캐릭터를 따라다니고 있으면서

Canvas는 오버레이 쓰고있습니다 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

layer값을 통해서 원하는 layer만 선택할 수 있습니다. raycast 에 layerMask 쪽에 값을 넣어주면 됩니다.
https://docs.unity3d.com/ScriptReference/Physics.Raycast.html
https://docs.unity3d.com/Manual/Layers.html

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

인풋에서 클릭을 받으면 현재 커서의 위치가 UI에 겹치는지 아닌지 검사해주고 겹치지 않으면 월드에 클릭신호 넘겨주면 될거같네요

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------.

 

자문자답합니다..^^
https://answers.unity3d.com/questions/1202359/raycast-against-ui-in-world-space.html
링크 보고 해결했습니다. 디버깅 찍히면 bool함수 사용해서 플레이어 공격과 구분했습니다.

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

기타관련링크

- https://answers.unity.com/questions/1348274/block-physics-raycast-on-gameobjects-if-ui-element.html

 

- https://prosto.tistory.com/97

 

- https://sangh518.github.io/record/block-event-when-ui-click/

 

 

 

=================================

=================================

=================================

 

 

 

 

반응형


관련글 더보기

댓글 영역