구글링을 해보면 "유니티 UPM" 등록 방법이 전부 다 이상하거나 어려운 말들로만 되어 있어서 "유니티 UPM" 설정에 꽤나 어려움을 겪었습니다... 여러 시행착오 끝에 알아낸 "유니티 UPM" 등록 방법을 아주 쉽게 공유드리겠습니다! (좋아요, 구독 !)1. 유니티 UPM 패키지 폴더 구조 준비바탕화면이나 편한 곳에 폴더를 하나 새롭게 만들어줍니다. 폴더 구조는 아래와 같이 구성합니다. 저는 폴더 이름을 DebugUtils라고 지어주었으며 폴더 내부에는 반드시 Runtimepackage.jsonREADME.md파일들을 만들어주셔야합니다. 이때 확장자도 json이면 반드시 . 뒤에 다 삭제하시고 .json을 입력해주시고, md도 마찬가지입니다! 2. package.json 작성아래는 예시 package..
'The file was loaded in a wrong encoding: UTF-8' 에러란?스크립트 파일을 열 때 나타나는 오류입니다. 보통 한글 주석이나 문자열이 포함된 파일을 UTF-8 인코딩으로 저장하지 않고, ANSI나 다른 인코딩으로 저장된 경우 발생합니다.해결방법스크립트 파일을 메모장이나 VS Code 등에서 열고 파일을 UTF-8 인코딩으로 다시 저장하면 해결됩니다.
이전에 Behaviour Desinger에 대해 소개해드린적이 있습니다.아직도 종종 BD 에셋을 사용해서 AI를 구현하곤 하는데요, 간만에 정리의 필요성을 느껴서 이렇게 작성하게 되었습니다. 유니티 Behaviour Designer란?Behaviour Tree, 줄여서 BT라고 불리는 이 용어는 예전부터 들어왔었습니다. 하지만 BT의 실용성에 대해 그닥 느끼지 못했기에 지금까지 사용하지 않았지만 FSM Pattern을 직접 제작해보고 난 이후 BT의wlsdn629.tistory.comSequence 계열 (순차 실행)Task이름 설명SequenceTask를 순차적으로 실행하며, 하나라도 Fail이면 즉시 중단하고 Fail 반환Random Sequence모든 자식 작업이 성공해야 Success 반환, 하나..
렌즈 플레어(Lens Flare)를 추가하기 위해서는 두 개의 스텝을 밟으셔야 합니다.첫 번째, 라이팅 에셋에 Lens Flare (SRP)를 추가해줍니다. 두 번째, Main Camera에 Flare Layer를 추가해주시면 됩니다. Lens Flare (SRP) 옵션 정리표 옵션 설명기본값추천 설정 예제Lens Flare Data사용할 렌즈 플레어 데이터 에셋Default Lens Flare (SRP)태양, 가로등 등 각각의 환경에 맞는 Flare Data 사용Intensity렌즈 플레어의 밝기 조절1.0태양: 1.5 / 가로등: 0.8Scale렌즈 플레어의 크기 조절1.0태양: 1.2 / 가로등: 0.9Light Override특정 Light 컴포넌트와 연결없음태양, 가로등 등 특정 광원에 연결Sc..
게임 개발을 하다 보면 변수 하나 선언하는 것도 신중해야 할 때가 많습니다. 특히, 게임 데이터(ex_ HP, 경험치, 레벨 등)는 외부에서 무분별하게 변경되면 심각한 버그를 초래할 수 있습니다. 이번 글에서는 유니티에서 데이터 보호를 위한 캡슐화, 보안, 유지보수, 그리고 데이터 무결성 개념을 정리해보습니다.캡슐화란 무엇인가?캡슐화(Encapsulation)는 객체지향 프로그래밍(OOP)의 중요한 원칙 중 하나로, 데이터를 외부에서 직접 접근하지 못하게 하고, 반드시 정해진 인터페이스(메서드나 프로퍼티)를 통해서만 변경할 수 있도록 하는 기법입니다.잘못된 예시 (캡슐화 X)public class Player{ public float HP = 100; // 누구나 직접 변경 가능}// 다른 스크립..
📌 Handles.Label()란?Handles.Label()은 씬(Scene) 뷰에서 특정 위치에 텍스트를 표시할 수 있는 함수입니다. Handles.Label()은 에디터 전용 기능입니다.기본적인 Handles.Label() 사용법using UnityEngine;using UnityEditor; // Handles를 사용하기 위해 필요public class HandlesLabelExample : MonoBehaviour{ void OnDrawGizmos() { Handles.Label(transform.position, "여기가 내 위치!"); }}씬(Scene) 창에서 오브젝트의 위치에 "여기가 내 위치!"라는 텍스트가 표시됩니다.public static void La..
게임 개발 과정에서 실사풍과 스타일라이즈드는 게임의 전체적인 비주얼과 분위기를 결정하는 중요한 스타일입니다.두 스타일은 게임의 목적, 타겟층, 기술적 요구사항에 따라 선택되며, 각각의 장단점이 뚜렷합니다. 이번 글에서는 이 두 가지 스타일의 개념과 특징을 자세히 살펴보겠습니다.실사풍 (Realistic Style)실사풍은 현실 세계를 최대한 사실적으로 재현하는 스타일입니다. 이 스타일은 고해상도의 텍스처, 자연스러운 조명, 그리고 물리적 정확성을 강조합니다. 요즘 게임은 현실보다 더 현실같은 스타일을 만들어내곤 하죠. 그래픽의 발전덕분에요.목적: 현실과 유사한 경험 제공 (실제로 있을 법한 경험을 제공하기 위해, 현실보다 더 아름다운 분위기를 연출)디자인 특징: 세밀한 디테일, 고해상도 텍스처조명: 물리..
데이터를 다룰 때 종종 중복된 값이 문제를 일으키곤 합니다. LINQ에서 제공하는 Distinct() 메서드는 이러한 중복을 쉽게 제거해줍니다. Distinct()의 사용법과 다양한 활용 예제를 살펴보겠습니다.Distinct()란?Distinct()는 컬렉션 내의 중복된 요소를 제거하고 고유한 요소만 반환하는 LINQ 메서드입니다.using System;using System.Linq;using System.Collections.Generic;class Program{ static void Main() { var numbers = new List { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 }; var uniqueNumbers = numbers.Distinc..
StateMachineBehaviour란?StateMachineBehaviour는 특정 State에 진입하자마자, 혹은 빠져나가기 직전 등 각 State의 상황에 따라 어떠한 코드를 자동으로 실행할 수 있도록 도와주는 스크립트입니다. StateMachineBehaviour는 State 입·출력, 업데이트 이벤트 등 다양한 콜백을 제공합니다. OnStateEnter, OnStateUpdate, OnStateExit 등은 물론, Transition시점에 호출되는 이벤트도 다룹니다.더보기🔽Animator란?Unity의 Animator는 State단위로 움직임을 정의합니다. “(Transition) Condition”과 “Animation Clip”을 활용하여 각 State를 서로 연결합니다. StateM..
C#은 null 참조 에러(null reference exception)를 방지하기 위해 널 허용 참조 타입(nullable reference type)을 도입했습니다. 이에 따라, 컴파일러는 변수가 널(null)일 가능성이 있는 경우 경고를 표시합니다. 하지만 개발자가 변수가 절대로 널이 아님을 확신하는 경우, 컴파일러의 경고를 무시하고 이를 명시적으로 나타내기 위해 널 허용 연산자(null-forgiving operator, !)를 사용할 수 있습니다.널 허용 연산자란?널 허용 연산자(!)는 C#에서 널 검사 경고를 억제하는 연산자입니다. 이를 통해 컴파일러가 "이 변수는 널일 수도 있다"고 경고하는 상황을 개발자가 강제로 무시할 수 있습니다.string? nullableString = null;//..
프로그래밍할 때 종종 사용하는 용어 중 TearDown과 Dirty는 맥락에 따라 다른 의미로 쓰이지만, 각각의 개념은 개발 과정에서 중요합니다. 이번 글에서는 이 두 용어의 의미와 사용 예를 정리해보겠습니다.TearDownTearDown은 설정된 상태를 초기화하거나 제거하는 과정을 의미합니다. 이는 특정 작업이 완료된 후 남아 있는 자원을 정리하거나, 테스트 환경을 원래 상태로 복구하는 데 사용됩니다.예시Unity의 Test Framework에서 TearDown은 테스트가 끝난 후 실행되는 메서드입니다. 테스트 중 생성된 오브젝트나 데이터를 정리해, 다음 테스트가 영향을 받지 않도록 해줍니다.using UnityEngine;using UnityEngine.TestTools;using NUnit.Fram..
게임 개발을 하다 보면, 배열(혹은 리스트)의 데이터를 복사해야 할 때가 종종 있습니다.그런데 C#에서 배열은 참조 타입이라 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)가 존재하여 사용할 때 혼동될 수 있습니다. Unity 프로젝트에서 발생할 수 있는 사례로 알아보겠습니다. 얕은 복사(Shallow Copy)란?“원본과 같은 데이터를 가리키는 참조만 복사한다.”즉, 배열 변수가 가리키는 메모리 주소(참조)만 복사하는 방식입니다. 원본 배열과 복사본 배열은 동일한 실체(데이터)를 공유하므로, 한쪽을 변경하면 다른 쪽에도 영향이 갑니다.void Start(){ int[] originalArray = { 1, 2, 3, 4 }; int[] shallowCopy = origin..
TextMeshPro컴포넌트에는는 Text를 더 세밀하게 제어할 수 여러가지 옵션들이 존재합니다.그 중, 텍스트의 Style을 이용하면 코딩없이 Lowercase, Uppercase를 선택할 수 있습니다.
Facade 패턴은 복잡한 시스템을 단순화하여 쉽게 사용할 수 있도록 하는 디자인 패턴입니다. 위 사진처럼 거대한 건물 뒤에 부분은 보이지 않는 것처럼, 퍼사드 패턴을 통해 뒤에서 일어나는 것들이 무엇이 있는지 알 필요 없이 사용하기 쉽게 만드는데 초점을 두는 패턴이라고생각하시면 됩니다. Facade 패턴의 개념Facade 패턴은 복잡한 서브시스템들을 단순화하여, 클라이언트가 하나의 인터페이스만으로 시스템을 조작할 수 있게 해줍니다. 여러 객체와 클래스들이 상호작용하여 시스템이 구성될 때, Facade 클래스가 이를 조정하여 하나의 간단한 API로 제공합니다. 퍼사드 패턴은 다음과 같은 경우에 사용하면 좋습니다. 복잡한 코드 구조를 숨기고 간단한 인터페이스를 제공하고자 할 때클라이언트 코드가..
Adapter 패턴은 서로 호환되지 않는 인터페이스를 가진 클래스들을 연결하는 데 유용한 디자인 패턴입니다. 즉, 기존 클래스와 새로운 클래스 간의 호환성을 확보하는 역할을 하며, 코드 수정 없이도 기존 코드를 새로운 방식으로 사용할 수 있도록 도와줍니다.Adapter 패턴의 개념Adapter 패턴은 두 가지 주요 컴포넌트로 구성됩니다.Target: 클라이언트가 기대하는 인터페이스Adaptee: 기존에 존재하며 새로 요구되는 인터페이스와 호환되지 않는 클래스Adapter: Target 인터페이스를 구현하여 Adaptee 클래스를 래핑하는 클래스유니티에서는 외부 API 또는 기존 시스템 코드와 호환이 되지 않는 상황에서 Adapter 패턴을 사용할 수 있습니다.외부 데이터 API와의 호환성 문제 해결예를 ..