게임 패드를 전제로 하는 UI를 설치할 때 특정 클릭이나 터치 조작을 통해 버튼 클래스의 초점이 움직이지 않게 한다
개요
예를 들어 게임 매트 체조를 전제로 다음 UI가 설치되었을 때 버튼 이외의 곳(파란색 배경 부분 등)을 클릭/터치하면 버튼1에 걸린 포커스가 빠진다.
※ 캔버스 리모브'그래픽 레이캐스터'로도 판정이 나고, Bitbucket에 공개된 소스 파일의 해당 위치를 느끼면 이렇게 처리되기 때문에 고장 등이 아닌 의도적인 행동입니다.
이 방법 자체가'마우스/터치 조작과 키보드/게임 패드 조작에 대응하는 두 가지 게임'이므로'원래부터 마우스/터치 조작이 불가능한 환경'이라면 문제없을 것 같다.예컨대 둘 다 조작이 가능한 환경에서'게임 매트 조작만을 전제로 한 게임'을 만들려면 잘못 만든 클릭/터치 판정이 취소되면 버튼의 초점이 사라져 복구가 불가능하다는 문제가 발생할 수 있다.
어쨌든 이 일은 실상부에서 주의를 기울이면 피할 수 있지만 이번에는 "원래 이 규격을 피할 수 없나요?"그러고 보니 조사를 많이 해서 적어놨어요.
※ 경험증의 유니티 버전은 5.6.1p2
마우스/터치 작업 비활성화
다양한 정보를 수집하던 중 아래 슬라이드와 신경 쓰이는 글을 발견했다.
다양한 정보를 수집하던 중 아래 슬라이드와 신경 쓰이는 글을 발견했다.
프로그래머가 Unity에서 STG를 만드는 이야기
우선 문제 자체를 회피할 수 있다.
Controller InputModule 정보
내용을 조사할 때 물품 자체는 기본적으로 준비된 Standalone Input Module에서 마우스/터치와 관련된 처리 형식의 물건을 단순히 삭제했다.
※ Input Module 및 Standalone Input Module에 대해서는 설명서 참조
Standalone Input Module
※ 주의해야 할 점은 Controller InputModule의 출처 자체가 낡았거나 일부는 API 호환성이라고 판단되는 부분에 오류가 발생할 수 있으므로 사용 시 새로운 API를 교체해야 합니다.
"최신 버전의 반영" 및 "컨트롤 로고를 통해 마우스/터치 판정 전환" 설정
상술한 주의점도 기재되어 있지만, Controller Input Module의 원래 소스는 과거의 것이 기본이 되었기 때문에, 최신 버전에 비해 API의 호환성을 제외하고는 처리가 몇 가지 다르다는 것을 발견했다.
이를 바탕으로 마우스/터치 조작 자체도 완전히 삭제되고'마우스/터치 조작의 유효/무효 전환'을 하려면 Standalone Input Module를 사용해야 한다.나는'최신 버전의 반영'과'로고를 제어하는 마우스/터치로 전환'에 대응하는 사용자 정의 유형의 Inpud Module를 직접 만들었다.
소스 자체는 유니티 5.6개의 물건을 기초로 한 것이기 때문에 같은 버전이나 비슷한 버전이면 움직일 수 있을 것이다.
※ 변경 내용은'm Enable Mouse'값에 따라 분할할 수 있도록 내부 처리를 통해 간단하게 진행된 마우스/터치 판정 처리만 변경되었습니다.아래 부분 발췌문.public override void Process()
{
bool usedEvent = SendUpdateEventToSelectedObject();
if (eventSystem.sendNavigationEvents)
{
if (!usedEvent)
usedEvent |= SendMoveEventToSelectedObject();
if (!usedEvent)
SendSubmitEventToSelectedObject();
}
// ※以降がマウス/タッチ関連のイベントとなるので、ここで処理を切り分け
// →m_EnableMouseはInspector上からも設定可能
if (!m_EnableMouse) { return; }
// touch needs to take precedence because of the mouse emulation layer
if (!ProcessTouchEvents() && input.mousePresent)
ProcessMouseEvent();
}
소스 및 테스트 장면이 GiitHub에 업로드되었습니다.
CustomStandaloneInputModule
※ 전체적으로 처리된 느낌은 마우스/터치 판정 자체가 유효하며, 버튼 이외의 버튼을 클릭해도 초점에서 벗어나지 않는 인풋모드도 할 수 없지는 않지만, 여기까지입니다.
참조/관련 웹 사이트
public override void Process()
{
bool usedEvent = SendUpdateEventToSelectedObject();
if (eventSystem.sendNavigationEvents)
{
if (!usedEvent)
usedEvent |= SendMoveEventToSelectedObject();
if (!usedEvent)
SendSubmitEventToSelectedObject();
}
// ※以降がマウス/タッチ関連のイベントとなるので、ここで処理を切り分け
// →m_EnableMouseはInspector上からも設定可能
if (!m_EnableMouse) { return; }
// touch needs to take precedence because of the mouse emulation layer
if (!ProcessTouchEvents() && input.mousePresent)
ProcessMouseEvent();
}
프로그래머가 Unity에서 STG를 만드는 이야기
입력 모듈
Reference
이 문제에 관하여(게임 패드를 전제로 하는 UI를 설치할 때 특정 클릭이나 터치 조작을 통해 버튼 클래스의 초점이 움직이지 않게 한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mao_/items/5d8ea521a49e9790d3e6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)