본문 바로가기

Unity

[UI] 키보드 입력만 받는 버튼

우측 하단: 키보드 입력에 따라 어떤 동작을 수행하는지 보여주는 버튼 UI

주로 ARPG 게임에서 볼 수 있는 그 버튼이다. Q, E, R 등 지정된 키를 입력하면 할당된 버튼이 눌리는 간단한 동작 방식이다.

이렇게 간단한데 왜 쓰게 됐냐면... 

Button Component에서 Navigation을 잘못 연결하면 Horizon, Vertical 키를 눌러도 해당 키가 눌러진 것처럼 보이기 때문이다. 사실 그렇게 보인 이유도 Highlighted Sprite랑 Selected Sprite가 Pressed Sprite와 동일한 스프라이트라 그런 거지만 아무튼 알아둬서 나쁠 건 없다.

결론은 키 입력으로만 버튼의 상태를 바꿀 것이기 때문에 Navigation 기능이 필요 없다는 것이다. 그러므로 Navigation을 None으로 세팅한다. 

 

보통 Interact 가능한 UI를 처음 생성하면 Navigation이 Automatic으로 설정되어 있을 것이다. 그럴 때에는 Visualize를 눌러 Horizon, Vertical 키로 어떻게 UI 오브젝트간 이동이 가능한지 확인할 수 있다.

 

그리고 None으로 설정하였으므로 Visualize를 해도 이동 경로가 보이지 않는다. 

 

using System.Collections;
using UnityEngine;
using UnityEngine.UI;

void Update()
    {
        DoComboAttack();
        ConditionControl();

        if (Input.GetKeyDown(KeyCode.Z))
        {
            objButtonZ.OnPointerDown(new UnityEngine.EventSystems.PointerEventData(UnityEngine.EventSystems.EventSystem.current));
        }
        else if (Input.GetKeyUp(KeyCode.Z))
        {

            objButtonZ.OnPointerUp(new UnityEngine.EventSystems.PointerEventData(UnityEngine.EventSystems.EventSystem.current));
            PerformComboAttack(KeyCode.Z);
        }

        if (Input.GetKeyDown(KeyCode.X))
        {
            objButtonX.OnPointerDown(new UnityEngine.EventSystems.PointerEventData(UnityEngine.EventSystems.EventSystem.current));
        }
        else if (Input.GetKeyUp(KeyCode.X))
        {
            objButtonX.OnPointerUp(new UnityEngine.EventSystems.PointerEventData(UnityEngine.EventSystems.EventSystem.current));
            PerformComboAttack(KeyCode.X);
        }
    }

그래서 연결하면 입력에 따라 버튼 상태가 바뀌는 것을 볼 수 있다.

'Unity' 카테고리의 다른 글

Slider와 HPBar  (0) 2024.08.26
애니메이션에서 TextMeshPro 컬러가 바뀌지 않는 문제  (0) 2024.08.15
FSM  (0) 2024.04.26
텍스트 타이핑 효과 내기  (0) 2024.03.27
Shader Graph Vector1  (0) 2023.11.09