안녕하세요, 인친님들! 오늘은 Unity에서 버튼을 만들고 활용하는 방법에 대해 아주 기초부터 심화 단계까지 자세히 알아보겠습니다.
1. 기본 버튼 만들기
먼저, 가장 기본적인 버튼을 만드는 방법부터 시작해봅시다.
단계별 가이드:
- 히에라키 창에서 우클릭합니다.
- UI -> Button - TextMeshPro를 선택합니다.
- 'TMP Essentials' 가 필요하다는 팝업이 뜨면, 'Import TMP Essentials'를 클릭합니다.
- 짜잔! 버튼이 생성되었습니다.
주의: TextMeshPro는 Unity의 고급 텍스트 렌더링 시스템입니다. 일반 Text 컴포넌트보다 더 나은 품질과 성능을 제공합니다.
2. 버튼에 기능 연결하기
이제 버튼을 눌렀을 때 어떤 동작을 할지 정해봅시다.
단계별 가이드:
- 만든 버튼을 선택합니다.
- Inspector 창에서 Button 컴포넌트를 찾습니다.
- OnClick() 영역에서 '+' 버튼을 클릭하여 새 이벤트를 추가합니다.
- 원하는 게임 오브젝트를 드래그앤드롭으로 None 필드에 넣습니다.
- 오른쪽 드롭다운 메뉴에서 실행할 메서드를 선택합니다.
이렇게 하면 버튼을 눌렀을 때 지정한 메서드가 실행됩니다!
3. 버튼 커스터마이징
이미지 변경:
- Button 컴포넌트의 'Source Image' 필드에 원하는 스프라이트를 드래그앤드롭합니다.
색상 변경:
- Button 컴포넌트에서 'Colors' 섹션을 찾습니다.
- Normal Color, Highlighted Color 등을 조정하여 다양한 상태의 색상을 설정합니다.
텍스트 수정:
- 버튼의 자식 오브젝트인 Text 컴포넌트를 선택합니다.
- Inspector에서 텍스트, 폰트, 크기 등을 조정합니다.

4. 고급 기능: 버튼 상태 활용하기
버튼에는 여러 상태가 있습니다. 이를 활용하면 더 동적인 UI를 만들 수 있어요!
- Normal: 기본 상태
- Highlighted: 마우스를 올렸을 때
- Pressed: 버튼을 누르고 있을 때
- Selected: 선택되었을 때 (예: 탭 메뉴)
- Disabled: 비활성화 상태

각 상태별로 다른 이미지나 색상을 지정할 수 있습니다. 이렇게 하면 사용자에게 시각적 피드백을 줄 수 있답니당.
버튼 상태별 사용 예시
- Normal (기본 상태)
- 사용 예: 대부분의 시간 동안 버튼이 표시되는 기본 모습
- 구현 방법:
- 적당한 대비의 색상 사용 (예: 밝은 배경에 어두운 텍스트)
- 게임의 전체적인 UI 디자인과 조화를 이루는 디자인
- 예시: 메인 메뉴의 "시작하기" 버튼
- Highlighted (마우스 오버 상태), Touched(손가락을 올린 상태, 스마트폰 환경)
- 사용 예: 사용자가 버튼 위에 마우스 커서를 올렸을 때
- 구현 방법:
- 색상을 약간 밝게 하거나 테두리를 추가
- 작은 애니메이션 효과 (예: 버튼 크기 살짝 확대)
- 예시: "설정" 버튼에 마우스를 올리면 버튼이 밝아지면서 살짝 커짐
- Pressed (클릭 상태)
- 사용 예: 사용자가 버튼을 클릭하고 있는 동안
- 구현 방법:
- 버튼 색상을 어둡게 하거나 위치를 살짝 아래로 이동
- 클릭 효과음 추가
- 예시: "공격" 버튼을 누르고 있는 동안 버튼이 눌려 보이는 효과
- Selected (선택된 상태)
- 사용 예: 여러 옵션 중 현재 선택된 항목을 표시할 때
- 구현 방법:
- 다른 버튼들과 구분되는 강조 색상 사용
- 선택 표시 아이콘 추가 (예: 체크 마크)
- 예시: 설정 메뉴에서 현재 선택된 해상도 옵션 버튼
- 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최적화 #버튼상태관리 #유니티스크립팅 #게임프로그래밍팁
'1인 개발 게임 (Unity) > UNITY' 카테고리의 다른 글
| [Unity] 비활성화된 프리팹 스크립트로 활성화 시키기 (0) | 2025.05.23 |
|---|---|
| [UNITY] button 에서 image 투명한 부분은 선택안되게 하기 (2) | 2024.08.25 |
| [UNITY] 다른 오브젝트의 컴포넌트에 접근하는 방법- FIND 메서드 (1) | 2024.08.09 |
| [UNITY] UI로 게이지, 체력바, 타이머, 스킬 쿨다운 등 만드는 방법 - Fill Method (2) | 2024.08.09 |
| [UNITY] UI의 기초, UI 생성하기! (1) | 2024.08.09 |