Print Friendly and PDF

전체 글 212

[최적화] Assembly Defintion

Library란?- 컴퓨터 프로그램이 사용하는 비휘발성 자원(함수, 데이터 ,타입 등)의 모임 DLL(Dynamic-Link Library) 이란?- 여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터를 포함한 라이브러리 PDB(Program DataBase)파일 이란?- 앱의 디버그 구성에 대한 링크를 허용하는 디버깅 및 프로젝트 상태 정보가 저장됨 Assembly Defintion이란?-  우리가 작성하는 코드는 Assembly-CSharp.dll에 모두 들어가 있는데 크기가 크면 클수록 컴파일이 오래 걸리는데 이것을 방지하기 위해 사용하는 기능- 첨부 사진처럼 ThirdParty.dll의 코드가 수정이 되면 나머지 stuff.dll, Library.dll은 컴파일 할 필요 없기 때문에 컴파일 시..

유니티/최적화 2025.01.13

[최적화] 스크립터블 오브젝트

스크립터블 오브젝트란?- 스크립터블 오브젝트는 데이터를 저장하고 공유하기 위한 데이터 컨테이너입니다. Unity에서 제공하는 ScriptableObject 클래스를 상속받아 만들며, 프로젝트 내에서 애셋으로 저장됩니다. 사용방법[CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/Example")]public class ExampleScriptableObject : ScriptableObject{ // 데이터 필드들}[CreateAssetMenu( fileName = "NewData", // 생성될 파일의 기본 이름 menuName = "MyGame/NewScriptableObject", // Project 창의 ..

유니티/최적화 2025.01.12

[코드] 유한 상태 머신

유한 상태 머신이란?- 시스템이 가질 수 있는 모든 상태를 정의하고, 각 상태 간의 전환 조건을 명확히 정의하는 패턴- '유한'하다는 것은 시스템이 가질 수 있는 상태의 개수가 제한적이라는 의미 핵심 구성 요소1. 상태- 게임 캐릭터의 idle, walk, run, jump 등 시스템이 가질 수 있는 특정 조건이나 상황 2. 전이- Space키를 누르면 idle에서 jump로 바뀌는 등 한 상태에서 다른 상태로 변화하는 조건 3. 이벤트- 키보드 입력, 타이머, 충돌 등 상태 전이를 촉발하는 트리거 4. 액션- 애니메이션 재생, 효과음 재생 등 상태 진입/퇴장시 실행하는 동작 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ장점1. 명확한 로직 구조- 상태와 전이가 명확히 정의되어 있어..

[최적화] 오브젝트 풀링

void Example() { // 1. 메모리 할당 string name = "Hello"; // 2. 새로운 값 할당 name = "World"; // 이때 "Hello"는 더 이상 참조되지 않는 가비지가 됨 // 3. GC가 주기적으로 실행되어 "Hello" 문자열이 차지하던 메모리를 해제}오브젝트 풀링이란?- 자주 생성되고 파괴되는 객체들을 미리 생성해두고 재사용하는 메모리 관리 패턴- 게임에선 총알, 파티클, 몬스터 등 관리할 때 주로 사용 질문Q. 풀링이 필요한 이유A. 성능영향:생성/파괴 시 발생하는 비용, 컴퍼넌트 초기화, 가비지 컬렉션 부화 등 최소화A. 지속적 생성/파괴로 메모리 단편화 현상 예방, 일관된 메모리 사용 패턴 유지A..

유니티/최적화 2025.01.10

[최적화] 유니티 어드레서블 개념 정리

어드레서블이란?- 유니티에서 제공하는 에셋 관리 시스템- 콘텐츠 효율적 관리하고 로드하는 방법을 제공 특징- 동적 콘텐츠 로딩: 게임 실행중 필요 에셋을 동적으로 로드, 언로드 가능- 메모리 효율성: 필요 시점에만 메모리에 로드하여 메모리 사용 최적화- 콘텐츠 주소 체계: 문자열 키를 통해 에셋에 접근할 수 있어 유연한 리소스 관리 가능 질문Q. 어드레서블이 기존의 리소스 로딩 방식과 가장 크게 다른 점은?A.기존 리소스시로드, 인스펙터를 이용한 방식과 다르게 동적 로딩이 가능한점A. 필요하지 않을때 메모리 해제 가능A. 빌드 시점이 아닌 런타임 로딩 결정 가능 Q.동적 콘텐츠 로딩이 게임 개발에서 왜 중요한 이유?A. 업데이트나 패치로 유저들에게 바로 콘텐츠 제공이 가능A. 초기 다운로드 크기 감소A...

유니티/최적화 2025.01.09

[불] 불 셰이더 퀄리티 높이기

- UV에 검은색 0값인 R을 더해주면 0이라는 결과값이 나옴- 하지만 여기서 회색(0.5), 흰색(1.0)을 더해준다면 전체 이미지 만큼 왼쪽 아래로 이동해서 원래 이미지와 똑같아 보이게 될 것임 회색으로 바꾼 결과- 실제로 이미지가 살짝 옆으로 움직인 것을 볼 수 있음- 하지만 회색(0.5)만큼 즉, 절반만큼 움직인 것이 아닌 애매하게 움직인 것으로 보임바로 '감마' 때문임, 현재 텍스쳐는 sRGB 상태 이지만 우리는 회색을 원하는 것이 아닌 0.5인 값을 원하는 것이므로, Linear텍스쳐로 만들어 주어야함 이미지 텍스쳐에 sRGB 해제- 더 크게 움직인 것을 볼 수 있게 됨 컬러에 따른 움직임- 컬러에 따라 움직이는 것을 알게 되었으니 아무 이미지를 넣었을때 결과값 곱하기를 이용한 색 조절 흐르면..

[불] UV를 이용해 불 만들기

- 구글에 흘러다니는 불 이미지 다운로드 후 Texture2D에 기본으로 연결 - 반투명한 불을 만들기 위해 다음과 같이 설정- Transparent(투명), Opaque(불투명)을 설정하여 반투명 활성화가 되고 알파 채널을 채울 수 있음- Render Face는 앞면, 뒷면의 어떤 면에 랜더링 되어질지 결정하는 기능이며 이펙트 계열은 대부분 양면 랜더링이기 때문에 Both로 설정 - A를 Alpha에 연결  이미지 흐르게 만들기 - 새로운 이미지를 다운로드 받아 Time과 Negate 및 add 노트들을 이용해 이미지가 위로 흐르는 쉐이더 추가 합치기- Multiple을 이용하여 두 불 텍스쳐를 곱하여 움직이는 불 쉐이더 제작  - Float 노드와 Multiply를 이용해 밝은 색의 불을 만들어준다...

[UV] 숫자 더하기

연산 준비- Split을 이용해 UV를 나눈 후 Combine으로 합쳐 RG(UV는(2)이기 때문에 R,G로도 가능)를 UV에 연결- 나중에 U와 V를 나눠 연산할 수 도 있음 ADD 0.5f- 0.5f씩 더해보니 텍스쳐가 왼쪽 아래로 내려옴왜? 모든 Vertex에 있는 UV값이 0.5씩 증가하여(0.5,1.5) (1.5,1.5)(0.5,0.5) (1.5,0.5) 로 바뀌며 이동된 것 처럼 보임 - Balck Board에 R(Float), G(Float)을 연결하여 인스펙터에서 조절 가능하도록 사용 가능 Multiply- 곱하기를 진행하니 타일링이 됨왜?(0,1) (1,1)                       (0,2) (2,2)(0,0) (1,0)이 기본인데    (0,0) (2,0) 으로 이 되었..

[UV] 기본개념

UV- UV는 Vector2(Float2)로 이뤄진 숫자- 2차원 좌표이므로 Vector2이고, 범위는 0~1까지 표현- 어떤 이미지라도 저 단위 안에 넣을 수 있고, 어떤 사이즈의 이미지라고 해도 가로세로 0~100% 사이 정의 가능즉, UV에서 0~1로 할당하면 어떤  비례의, 어떤 크기의 이미지든 모델링에 입힐 수 있음 배치- 엔진, 툴마다 UV의 배치가 다를 수 이음- 언리얼(DirectX)(0.0,0.0)  (1,0,0,0)(0.0,1.0)  (1.0,1.0)- 유니티 방식(OpenGL 방식)(0.0,1.0)  (1.0,1.0)(0.0,0.0)  (1.0,0.0) 시각적 해석- 왼쪽이 0이고 오른쪽이 1이라 Linear 그라데이션이 보임 - V는 두번째 숫자 Y축(세로축) - U와 V를 합치면 ..