본문 바로가기

유니티(UI_input Field, Fade UI, 도어락 키패드 문열기 구현)_ 멋쟁이사자처럼 유니티 부트캠프 16회차 추가학습

@salmu2025. 6. 10. 23:15
반응형

[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);
        }
    }
}

 

 

유니티의 기본 흐름이 잡혀가는 것 같지만 헷갈린다. 손에 익혀야 할 것 같다.

반응형
salmu
@salmu :: SMU 각종 기록

목차