반응형
[16회차 수업내용]
1. Input Field
2. Fade UI
3. 도어락 키패드 구현하기
4. 반복문
1.1 Input Field의 주요 속성
| Text | 입력된 최종 텍스트 값 (string) 반환/설정 가능 |
| Placeholder | 안내용 글자 설정 (미입력 상태 표시) |
| Character Limit | 입력할 수 있는 최대 글자 수 |
| Content Type | 입력 형식 설정 → 표준/숫자/비밀번호/이메일/전화번호 등 선택 가능 |
| Line Type | 한 줄/여러 줄 입력 허용 여부 |
| On Value Changed | 값이 바뀔 때 호출할 이벤트 연결 (예: 실시간 미리보기) |
| On End Edit | 입력 완료 시 호출할 이벤트 연결 (예: 확인 버튼 클릭 시 처리) |
1.2 버튼 눌러서 "입력값"있으면 Intro 끄고, Play로 넘어가는 코드
using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Cat
{
public class UIManager : MonoBehaviour
{
public GameObject playObj;
public GameObject introUI;
public TMP_InputField inputField;
public TextMeshProUGUI nameTextUI;
public Button startButton;
private void Start()
{
startButton.onClick.AddListener(OnStartButton);
}
public void OnStartButton()
{
bool isNoText = inputField.text == "";
if (isNoText)
{
Debug.Log("입력한 텍스트 없음");
}
else
{
playObj.SetActive(true);
introUI.SetActive(false);
Debug.Log($"{nameTextUI} 입력");
nameTextUI.text = inputField.text;
}
}
}
}
| startButton.onClick.AddListener() | 버튼 클릭 이벤트에 함수 연결 → 버튼 클릭 시 연결된 함수가 실행됨 |
2.1 panel 투명도 조절 애니메이션 만들기
: 페이드 아웃 효과를 위해검은 이미지의 투명도를 0초에 0으로, 2초에 255로 설정
2.2 고양이가 파이프에 닿을 때 페이드 아웃
using System;
using UnityEngine;
public class ColliderEvent : MonoBehaviour
{
public GameObject fadeUI;
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Player"))
{ fadeUI.SetActive(true);
Debug.Log("Game Over");
}
}
}
파이프에 해당 스크립트 넣고 아까 만든 애니메이션 들어있는 게임 오브젝트를 fadeUI에 할당한다.
2.3 기타 _ 애니메이션 컬링모드란?
| Always Animate | 모든 애니메이션 계속 재생 | 낮음 | 높음 | 플레이어, 주요 NPC, 항상 애니메이션 필요한 경우 |
| Cull Update Transforms | 트랜스폼 애니메이션만 중단; 로직 유지 | 중간 | 중간 | AI/상태 업데이트 필요한 원거리 오브젝트 |
| Cull Completely | 모든 애니메이션 계산 중단 | 높음 | 낮음 | 배경 오브젝트, 중요도 낮은 원거리 오브젝트 |
3. 도어락 키패드 구현하기
3.1 Canvas 기본 세팅
Canvas(컴포넌트) - RenderMode - Screen Space - Overlay
* Canvas의 UI가 게임 씬(3D 오브젝트, 캐릭터 등) 위에 오버레이되어 그려지게 하는 모드
* 카메라의 영향을 받지 않고 화면의 가장 맨 위에 항상 표시
Canvas Scaler (컴포넌트) - Scale with Screen Size ( X 1920 Y 1080 )
3.2 Grid Layout Group 컴포넌트


여러 개의 UI 요소(버튼, 이미지, 텍스트 등)를 자동으로 격자(Grid) 형태로 정렬해주는 컴포넌트
: 인벤토리, 스킬 슬롯, 갤러리, 옵션 버튼 목록, 점수판 등에 사용
3.3 키패드 코드
using UnityEngine;
public class NumberKeyPad : MonoBehaviour
{
public Animator doorAnim;
public GameObject doorLock;
public string password;
public string keyPadNumber; //현재 키패드에 입력된 숫자를 저장할 문자열 변수
//키패드입력
public void OnInputNumber(string numString)
{
keyPadNumber += numString; // keyPadNumber 문자열에 numString을 이어 붙임 (문자열 연결)
Debug.Log($"{numString}입력 -> 현재 입력 : {keyPadNumber}");
}
public void OnCheckNumber()
{
if (keyPadNumber == password)
{
doorAnim.SetTrigger("Door Open");
doorLock.SetActive(false);
}
else
{
keyPadNumber = ""; // keyPadNumber를 빈 문자열로 초기화
Debug.Log("비밀 번호 틀림");
}
}
}
3.4 버튼 OnClick() 이벤트 추가
- 1~0까지의 버튼을 전체 클릭한 후 On Click() 이벤트를 생성하여 Runtime Only + Canvas오브젝트를 넣고,
- NumberKeypad.OnInputNumber 함수를 선택
- 각각의 버튼에 맞는 숫자를 추가로 입력
- Enter 버튼의 경우 OnClick() 함수에 지금까지 입력한 숫자를 체크하는 함수 NumberKeypad.OnCheckNumber 추가
- Canvas 에 코드 넣고, 스크립트에 door Lock object, animator, password 등 할당
- Door Lock 기본은 활성화 끈 상태로 두어야 한다.
3.5 문 잠김 파악 +플레이어 진입 따라 문 열고 닫는 코드
using UnityEngine;
public class DoorEvent2 : MonoBehaviour
{
private Animator anim;
public GameObject doorLock; // 문이 잠겨있음을 표시하는 오브젝트
public string openKey; //유니티 상에서 Door Open으로 설정 필요 (애니메이션 트리거 이름)
public string closeKey; //유니티 상에서 Door Lock으로 설정 필요 (애니메이션 트리거 이름)
private void Start()
{
// 현재 오브젝트에 붙어있는 Animator 컴포넌트를 anim 변수에 저장
anim = GetComponent<Animator>();
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
doorLock.SetActive(true);
}
}
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player"))
{
doorLock.SetActive(false);
}
}
}
유니티의 기본 흐름이 잡혀가는 것 같지만 헷갈린다. 손에 익혀야 할 것 같다.
반응형