728x90

Unity 64

[Unity] 플레이어블 광고(Playable Ad) 제작 가이드 - Playworks(Luna) 빌드

게임을 개발하고 나면 그 게임을 광고로 만들어 유저에게 직접 체험시키고 싶을 때가 있습니다. 이때 사용하는 것이 바로 플레이어블 광고(Playable Ad)입니다.플레이어블 광고란 앱을 설치하기 전에 미니게임 형태로 직접 플레이해볼 수 있는 광고입니다. 일반 영상 광고보다 전환율이 높아 현업에서도 많이 활용된다고 합니다.이번 글에서는 Unity로 만든 미니게임을 WebGL 빌드 → 용량 최적화 → Unity Playworks Plugin(Luna)를 이용한 플레이어블 광고 배포까지의 전체 과정을 단계별로 정리하겠습니다.1. 빌드 리포트 분석 - 용량의 구조 이해하기Unity에서 WebGL로 빌드를 완료하면 Console 또는 Editor Log에서 Build Report를 확인할 수 있습니다. Build..

Unity/정보 2026.03.12

[Unity] 동적 팝업 UI 구현 (PopupUI)

게임을 개발하다 보면 "정말 삭제하시겠습니까?", "게임을 종료하시겠습니까?" 처럼 사용자의 확인을 받아야 하는 팝업이 곳곳에 필요합니다.팝업이 필요한 상황마다 별도의 팝업 프리팹을 만들어 관리하는 방식도 있지만, 이 방법은 비슷한 팝업이 늘어날수록 프리팹 수가 폭발적으로 늘어나고 유지보수도 어려워집니다. 이번 글에서는 제목, 설명, 확인/취소 버튼을 코드에서 동적으로 설정할 수 있는 PopupUI 클래스를 소개하겠습니다.1. 동적 팝업이란?일반적인 팝업은 씬에 미리 배치해두거나 각 상황별로 전용 프리팹을 따로 만드는 방식입니다.동적 팝업은 이와 달리 팝업의 외형(프리팹)은 하나로 고정하되, 제목, 메시지, 버튼의 동작을 코드에서 호출 시점에 주입하는 방식입니다. 하나의 팝업으로 게임 전체의 모든 확인/..

Unity/코드 연구 2026.03.08

[Unity] ReactiveProperty 구현 (반응형 프로퍼티)

게임을 개발하다 보면 값이 바뀔 때 자동으로 UI가 갱신되거나 다른 시스템에 변경을 알려야 하는 상황이 자주 생깁니다.예를 들어 플레이어의 HP가 깎였을 때 HP바 UI를 업데이트해야 하는 경우엔 가장 단순한 방법은 HP를 바꾸는 코드 옆에 직접 UI 갱신 코드를 함께 작성하는 것입니다. 하지만 이 방식은 로직과 UI가 서로 강하게 묶이는 강한결합 문제를 일으킵니다.이번에는 이 문제를 해결하는 ReactiveProperty 클래스를 소개하겠습니다.1. ReactiveProperty란?ReactiveProperty는 값이 변경될 때 등록된 콜백(Action)을 자동으로 호출하는 프로퍼티입니다.값을 관찰하고 있다가 변화가 생기면 반응한다는 의미에서 반응형 프로퍼티라고 부릅니다. 옵저버 패턴(Observer ..

Unity/코드 연구 2026.03.06

[Unity] 싱글톤 패턴 구현 (MonoSingleton)

게임을 개발하다 보면 게임 매니저, 사운드 매니저, UI 매니저 등 게임 전체에서 단 하나만 존재해야 하는 오브젝트가 필요할 때가 많습니다.이런 상황에서 사용하는 것이 바로 싱글톤 패턴(Singleton Pattern) 입니다. 이번 글에서는 제가 직접 만들어 사용하는 MonoSingleton 제네릭 클래스를 통해 싱글톤 패턴의 개념부터 실제 활용법까지 자세히 알아보겠습니다.1. 싱글톤 패턴이란?싱글톤 패턴은 클래스의 인스턴스가 오직 하나만 존재하도록 보장하는 디자인 패턴입니다. 그리고 그 인스턴스에 전역적으로 접근할 수 있는 방법을 제공합니다.게임 개발에서 싱글톤이 필요한 대표적인 예시는 다음과 같습니다.GameManager : 게임의 상태(점수, 스테이지 등)를 전역으로 관리SoundManager :..

Unity/코드 연구 2026.03.06

[Unity] Unity Editor 컴포넌트 ContextMenu 추가 방법

유니티에서 개발하다 보면 특정 함수를 버튼처럼 실행하고 싶을 때가 있습니다.물론 OnInspectorGUI()를 이용해 인스펙터에 직접 버튼을 만들 수도 있지만, 더 간단한 방법이 있습니다.바로 ContextMenu를 사용하는 방법입니다. 이걸 쓰면 인스펙터의 케밥 메뉴(점 3개)나 컴포넌트 우클릭 메뉴에서한 줄의 코드로 함수를 바로 실행할 수 있습니다.1. 케밥 메뉴가 무엇인가?인스펙터 상단 우측의 점 3개 버튼(컴포넌트 컨텍스트 메뉴)입니다.기본적으로 제공되는 항목 외에, 개발자가 원하는 함수에 [ContextMenu("메뉴 이름")]를 이용해 메뉴를 추가할 수 있습니다.디버그용 기능이나 툴 제작 등, 에디터 확장이 필요한 상황에서 매우 유용합니다.2. 기본 예제using UnityEngine;pub..

Unity/정보 2025.10.28

[Unity] 확장메서드

Unity 개발을 하다 보면 특정 기능을 여러 스크립트에서 반복적으로 사용해야 하는 경우가 많습니다. 이때 확장 메서드(Extension Method) 를 활용하면 기존 클래스의 코드를 수정하지 않고도 기능을 추가할 수 있어 코드의 재사용성과 가독성을 크게 향상시킬 수 있습니다. 1. 확장 메서드란?확장 메서드는 C#의 기능 중 하나로, 기존 클래스의 코드를 수정하지 않고도 새로운 메서드를 추가할 수 있는 기능입니다. 주로 static 클래스를 이용하여 특정 타입(클래스, 구조체 등)에 새로운 메서드를 정의할 수 있습니다. 확장 메서드의 특징기존 클래스를 수정하지 않고도 새로운 기능 추가 가능static 클래스를 사용하며, 확장 대상 메서드는 this 키워드를 사용하여 정의재사용성이 높아 코드 중복을 줄..

Unity/정보 2025.03.23

[Unity] transform.root - 최상위 객체 찾기

Unity에서 충돌 감지를 할 때 하위 오브젝트가 부딪히더라도 최상위 부모 오브젝트(Player)를 찾아야 하는 경우가 있습니다. 예를 들어, PlayerController가 Player 오브젝트에 붙어 있고 플레이어의 손이나 발 같은 하위 오브젝트가 충돌을 감지할 때, 어떻게 최상위 PlayerController에 접근할 수 있을까요? 1. 기존 방식의 문제점보통 GetComponentInParent() 또는 FindObjectOfType()를 사용해서 부모 오브젝트를 찾곤 합니다. 하지만 이러한 방식에는 몇 가지 단점이 있습니다.FindObjectOfType()는 씬 전체에서 오브젝트를 검색하므로 성능 저하가 발생할 수 있음.GetComponentInParent()는 부모 계층을 순차적으로 탐색하기 ..

Unity/정보 2025.03.23

[Unity] AudioSource.PlayClipAtPoint

Unity에서는 AudioSource.PlayClipAtPoint를 사용하면 간단하게 특정 위치에서 효과음을 재생할 수 있습니다. 이번 글에서는 PlayClipAtPoint의 장점과 한계를 살펴보고, 필요한 경우 대체할 수 있는 방법까지 다뤄보겠습니다.1. 기존 방식일반적으로 Unity에서 효과음을 재생하려면 다음과 같은 방식으로 AudioSource 컴포넌트를 직접 추가하고 관리해야 합니다.사전에 AudioSource가 포함된 GameObject를 배치해야 함스크립트에서 AudioSource를 생성하고 Play()로 소리를 재생시켜야함사운드가 끝난 후 GameObject를 삭제 또는 비활성화해야 함이러한 방식은 효과음이 많아질수록 관리가 복잡해질 수 있습니다. 2. AudioSource.PlayClip..

Unity/정보 2025.03.23

[Unity] Script Execution Order 설정 (스크립트별 실행 순서 설정)

Unity에서 여러 스크립트가 실행될 때 Awake(), OnEnable(), Start() 등의 초기화 함수가 실행되는 순서는 중요합니다. 특히 Awake()가 OnEnable()보다 항상 먼저 실행된다고 보장되지 않는 경우가 있어 예상치 못한 Null 참조 오류가 발생할 수도 있습니다.이번 글에서는 Script Execution Order(스크립트 실행 순서)를 설정하여 이러한 문제를 해결하는 방법을 알아보겠습니다.1. Unity의 기본 실행 순서Unity는 게임 오브젝트가 활성화될 때 특정 순서대로 메서드를 호출합니다.Awake()OnEnable()Start()기타 업데이트 관련 메서드 (Update, FixedUpdate 등)보통 Awake()에서 객체의 참조를 설정하고, OnEnable()에서는..

Unity/정보 2025.03.12

[Unity] 구글 스프레드시트 데이터 자동으로 다운로드 및 SO에 적용

게임 개발 과정에서 데이터 관리와 업데이트는 매우 중요한 요소입니다. 특히 능력치나 게임 설정 데이터처럼 자주 변경되는 정보를 효율적으로 관리하기 위해 구글 스프레드시트를 활용하면 여러 면에서 장점을 얻을 수 있습니다.이번 글에서는 구글 스프레드시트에서 데이터를 다운로드해 TSV 형식으로 받아 JSON으로 변환한 후 이를 ScriptableObject(SO)에 자동으로 적용하는 전체 프로세스를 구현한 코드를 설명합니다. ScriptableObject(SO) 파일 스크립트 using UnityEngine;[CreateAssetMenu(fileName = "NewMonstere", menuName = "Scriptable Object/Monster Data", order = int.MaxValue)]publ..

Unity/코드 연구 2025.02.23
728x90