1인 개발 게임 (Unity)/UNITY

[UNITY] 버튼 BUTTON 기능

Z46 2024. 8. 9. 09:30

안녕하세요, 인친님들! 오늘은 Unity에서 버튼을 만들고 활용하는 방법에 대해 아주 기초부터 심화 단계까지 자세히 알아보겠습니다.

1. 기본 버튼 만들기

먼저, 가장 기본적인 버튼을 만드는 방법부터 시작해봅시다.

단계별 가이드:

  1. 히에라키 창에서 우클릭합니다.
  2. UI -> Button - TextMeshPro를 선택합니다.
  3. 'TMP Essentials' 가 필요하다는 팝업이 뜨면, 'Import TMP Essentials'를 클릭합니다.
  4. 짜잔! 버튼이 생성되었습니다.

주의: TextMeshPro는 Unity의 고급 텍스트 렌더링 시스템입니다. 일반 Text 컴포넌트보다 더 나은 품질과 성능을 제공합니다.

2. 버튼에 기능 연결하기

이제 버튼을 눌렀을 때 어떤 동작을 할지 정해봅시다.

단계별 가이드:

  1. 만든 버튼을 선택합니다.
  2. Inspector 창에서 Button 컴포넌트를 찾습니다.
  3. OnClick() 영역에서 '+' 버튼을 클릭하여 새 이벤트를 추가합니다.
  4. 원하는 게임 오브젝트를 드래그앤드롭으로 None 필드에 넣습니다.
  5. 오른쪽 드롭다운 메뉴에서 실행할 메서드를 선택합니다.

이렇게 하면 버튼을 눌렀을 때 지정한 메서드가 실행됩니다!

3. 버튼 커스터마이징

이미지 변경:

  1. Button 컴포넌트의 'Source Image' 필드에 원하는 스프라이트를 드래그앤드롭합니다.

색상 변경:

  1. Button 컴포넌트에서 'Colors' 섹션을 찾습니다.
  2. Normal Color, Highlighted Color 등을 조정하여 다양한 상태의 색상을 설정합니다.

텍스트 수정:

  1. 버튼의 자식 오브젝트인 Text 컴포넌트를 선택합니다.
  2. Inspector에서 텍스트, 폰트, 크기 등을 조정합니다.

Unity 버튼 생성 및 사용 가이드

4. 고급 기능: 버튼 상태 활용하기

버튼에는 여러 상태가 있습니다. 이를 활용하면 더 동적인 UI를 만들 수 있어요!

  • Normal: 기본 상태
  • Highlighted: 마우스를 올렸을 때
  • Pressed: 버튼을 누르고 있을 때
  • Selected: 선택되었을 때 (예: 탭 메뉴)
  • Disabled: 비활성화 상태

각 상태별로 다른 이미지나 색상을 지정할 수 있습니다. 이렇게 하면 사용자에게 시각적 피드백을 줄 수 있답니당.

버튼 상태별 사용 예시

  1. Normal (기본 상태)
    • 사용 예: 대부분의 시간 동안 버튼이 표시되는 기본 모습
    • 구현 방법:
      • 적당한 대비의 색상 사용 (예: 밝은 배경에 어두운 텍스트)
      • 게임의 전체적인 UI 디자인과 조화를 이루는 디자인
    • 예시: 메인 메뉴의 "시작하기" 버튼
  2. Highlighted (마우스 오버 상태), Touched(손가락을 올린 상태, 스마트폰 환경)
    • 사용 예: 사용자가 버튼 위에 마우스 커서를 올렸을 때
    • 구현 방법:
      • 색상을 약간 밝게 하거나 테두리를 추가
      • 작은 애니메이션 효과 (예: 버튼 크기 살짝 확대)
    • 예시: "설정" 버튼에 마우스를 올리면 버튼이 밝아지면서 살짝 커짐
  3. Pressed (클릭 상태)
    • 사용 예: 사용자가 버튼을 클릭하고 있는 동안
    • 구현 방법:
      • 버튼 색상을 어둡게 하거나 위치를 살짝 아래로 이동
      • 클릭 효과음 추가
    • 예시: "공격" 버튼을 누르고 있는 동안 버튼이 눌려 보이는 효과
  4. Selected (선택된 상태)
    • 사용 예: 여러 옵션 중 현재 선택된 항목을 표시할 때
    • 구현 방법:
      • 다른 버튼들과 구분되는 강조 색상 사용
      • 선택 표시 아이콘 추가 (예: 체크 마크)
    • 예시: 설정 메뉴에서 현재 선택된 해상도 옵션 버튼
  5. Disabled (비활성화 상태)
    • 사용 예: 특정 조건에서 버튼 기능을 사용할 수 없을 때
    • 구현 방법:
      • 버튼 색상을 회색조로 변경
      • 투명도를 낮추어 흐리게 표시
    • 예시: 재료가 부족할 때 "제작" 버튼 비활성화

 

사용 예시는 아래와 같다!

using UnityEngine;
private ColorBlock colors;

void Start()
{
    if (myButton == null) myButton = GetComponent<Button>();
    colors = myButton.colors;
    myButton.onClick.AddListener(OnButtonClick);
    SetNormalState();
}

// 1. Normal (기본 상태)
// 설명: 버튼의 기본적인 모습. 대부분의 시간 동안 표시되는 상태.
// 사용 예: 메인 메뉴의 "시작하기" 버튼
void SetNormalState()
{
    buttonImage.color = colors.normalColor;
    buttonText.text = "일반 상태";
}

// 2. Highlighted (마우스 오버 상태)
// 설명: 사용자가 버튼 위에 마우스 커서를 올렸을 때의 상태.
// 사용 예: "설정" 버튼에 마우스를 올리면 버튼이 밝아지는 효과
public void SetHighlightedState()
{
    buttonImage.color = colors.highlightedColor;
    buttonText.text = "하이라이트 상태";
}

// 3. Pressed (클릭 상태)
// 설명: 사용자가 버튼을 클릭하고 있는 동안의 상태.
// 사용 예: "공격" 버튼을 누르고 있는 동안 버튼이 눌려 보이는 효과
public void SetPressedState()
{
    buttonImage.color = colors.pressedColor;
    buttonText.text = "눌림 상태";
}

// 4. Selected (선택된 상태)
// 설명: 여러 옵션 중 현재 선택된 항목을 표시할 때의 상태.
// 사용 예: 설정 메뉴에서 현재 선택된 해상도 옵션 버튼
public void SetSelectedState()
{
    buttonImage.color = colors.selectedColor;
    buttonText.text = "선택됨 상태";
}

// 5. Disabled (비활성화 상태)
// 설명: 특정 조건에서 버튼 기능을 사용할 수 없을 때의 상태.
// 사용 예: 재료가 부족할 때 "제작" 버튼 비활성화
public void SetDisabledState()
{
    myButton.interactable = false;
    buttonImage.color = colors.disabledColor;
    buttonText.text = "비활성화 상태";
}

void OnButtonClick()
{
    Debug.Log("버튼이 클릭되었습니다!");
    // 여기에 클릭 시 실행할 로직 추가
}

// 상태 변경 예시
void ExampleUsage()
{
    // 일반 상태로 설정
    SetNormalState();

    // 3초 후 버튼 비활성화
    Invoke("SetDisabledState", 3f);

    // 조건에 따라 상태 변경
    if (PlayerHasEnoughMana())
        SetHighlightedState();
    else
        SetDisabledState();
}

bool PlayerHasEnoughMana()
{
    // 플레이어의 마나 체크 로직
    return true; // 예시로 항상 true 반환
}

 

추가 팁:

  • 상태 변화를 부드럽게 하기 위해 애니메이션을 사용할 수 있습니다.
  • 색맹 사용자를 위해 색상뿐만 아니라 형태나 아이콘으로도 상태를 구분하는 것이 좋습니다.

 

5. 프로그래밍으로 버튼 제어하기

버튼을 코드로 제어하는 방법도 알아봅시다.

using UnityEngine;
using UnityEngine.UI;

public class ButtonController : MonoBehaviour
{
    public Button myButton;

    void Start()
    {
        // 버튼에 리스너 추가
        myButton.onClick.AddListener(OnButtonClick);

        // 3초 후 버튼 비활성화
        Invoke("DisableButton", 3f);
    }

    void OnButtonClick()
    {
        Debug.Log("버튼이 클릭되었습니다!");
    }

    void DisableButton()
    {
        myButton.interactable = false;
        Debug.Log("버튼이 비활성화되었습니다.");
    }

    // 버튼 텍스트 변경 메서드
    public void ChangeButtonText(string newText)
    {
        myButton.GetComponentInChildren<TMPro.TextMeshProUGUI>().text = newText;
    }
}

이 코드는 다음과 같은 기능을 보여줍니다:

  • 버튼 클릭 이벤트 리스너 추가
  • 일정 시간 후 버튼 비활성화
  • 버튼 텍스트 변경

이러한 기능들을 활용하면 동적이고 인터랙티브한 UI를 만들 수 있습니다! 자세한 건 다음에 다룰게요.

 

 

 

#유니티UI개발 #버튼만들기 #Unity초보자가이드 #게임UI디자인 #UnityButton #TextMeshPro활용 #인터랙티브UI #유니티스크립팅 #게임개발팁 #모바일게임UI #유니티버튼프로그래밍 #C샵UI제어 #게임UI동적변경 #유니티버튼상태 #인터랙티브UI구현 #게임개발코드예제 #유니티UI최적화 #버튼상태관리 #유니티스크립팅 #게임프로그래밍팁