728x90

코딩 27

[Unity C#] 파일 경로 분리와 경로 구분자 변환: 두 가지 접근법 비교

Unity에서 파일 경로를 다룰 때, 디렉토리 경로와 파일명을 분리하거나, 경로 구분자(\, /)를 통일해야 하는 상황이 자주 발생합니다.이번 포스트에서는 경로를 효율적으로 처리하는 두 가지 방법, System.IO.Path를 활용한 방식과 string.Substring을 활용한 방식을 비교하고, Unity 환경에 맞게 경로 구분자를 통일하는 팁을 함께 소개합니다.파일 경로 분리가 필요한 이유게임 개발에서는 파일 경로를 다루는 일이 필수적입니다. 아래와 같은 작업에서 디렉토리와 파일명을 분리해야 하는 경우가 자주 있습니다:특정 파일만 선택적으로 불러오기파일명을 기준으로 데이터를 처리하기경로에 특정 디렉토리를 추가하거나 변경하기파일 경로 분리 방법: 두 가지 접근법파일 경로를 처리하는 방법은 크게 두 가지..

[Unity] C# Finalizer 와 Garbage Collector 동작에 대한 정리

C++의 소멸자(Destructor)와 C#의 Finalizer의 공통점과 차이점 공통점 문법적으로 ~Class() {...} 로 코딩 클래스 객체가 소멸될 때 리소스를 해제하기 위해 사용 차이점 C++ 의 소멸자는 delete myObj; 와 같이 명시적으로 호출 시기를 정할 수 있음. C# 의 소멸자는 C++와 구분하기 위해 Destructor대신 Finalizer로 부름. Finalizer는 개발자가 그 호출을 명시적으로 결정할 수 없고, Garbage Collection 메커니즘에서 호출. 좀 더 구체적으로, C# 클래스에 Finalizer 가 존재하면, 해당 객체의 생성자 호출시 Finalization Queue라는 QC 내부 큐에 레퍼런스 추가. 이후, Managed Heap이 차서 GC처리를..

파이썬(Python) - 폴더 아래 소스코드 인코딩 일괄 변환 스크립트

유니티 엔진으로 개발하던 프로젝트의 소스코드가 어째서인지 어느 순간 인코딩이 바뀌어 버렸습니다. 원인은 알 수가 없는 상황. 코드는 모두 utf-8 인코딩으로 관리하고 있었는데, 갑자기 인코딩이 변경되고 코드 내에 한글이 모두 깨져있는 상황. 그래서, 일단 파이썬으로 소스코드 전체 일관 인코딩을 변경해주는 코드를 짜서 돌렸습니다. 아래는 원본 소스. 폴더 이름과 소스코드 확장자, 인코딩을 적절히 수정해서 돌리면 됩니다. 그리고 chardet 모듈을 사용하기 때문에 pip install chardet 커맨드로 chardet 모듈을 설치해야 합니다. import os import codecs import chardet # 현재 경로 아래의 scripts 폴더 내 파일들의 인코딩을 변경합니다. director..

[Unity] Unity Engine 버전업 후 에러 메시지 Error : "The type or namespace name 'Newtonsoft' could not be found"

Newtonsoft.Json.JsonConvert 를 사용하고 있었는데, 유니티 엔진(Unity Engine)버전업 후 아래와 같은 에러 메시지가 출력될 경우. "The type or namespace name 'Newtonsoft' could not be found ~ " Newtonsoft 모듈 종속성 설정이 추가되지 않았기 때문. 엔진 버전업 하면서 모듈 설정이 날아가는 모양. Packages/manifest.json 을 열어서 "dependencies" 아래에 모듈 정보를 추가해주면 됨. "com.unity.nuget.newtonsoft-json": "3.0.2" 이렇게. 저장하고 유니티 엔진 리프래쉬 한 번 해주면 끝. GitHub : Newtonsoft Json for Unity https:/..

DirectX 11 스터디 - 고유 물체를 정의할 GameObject 만들기

여기까지 개발한 렌더링 처리 객체인 Pipeline, 그리고 물체마다 고유한 값을 가질 수 있는 객체들을 모아서 GameObject 를 만들어본다. 방향성은, 유니티 엔진의 GameObject 스타일로 만들고, Transform 처리는 컴포넌트 형태로 만들어 붙여보는 순서로 진행. 한번에 몰아서 구현하던 Game 클래스에서, 물체마다 고유한 값을 가져야 하는 객체들을 모두 GameObject 로 옮겨서 구현. class GameObject { public: GameObject(ComPtr device, ComPtr deviceContext); ~GameObject() {} void Update(); void Render(shared_ptr pipeline); private: ComPtr _device; ..

DirectX 11 스터디 - 모듈화 (2), 렌더링을 책임질 Pipeline클래스 작성

앞에서 Geometry, VertexData 부터 Output Merger 의 BlendState까지 모두 모듈화 해서 DX COM객체를 캡슐화 했고, 이번엔 모듈화한 객체들을 가지고 Rendering Pipeline 을 실제 수행하는 객체를 작성해본다. 파이프라인에서 고유하게 존재하고 사용되어야 하는 모듈들과, 3D 물체마다 값/설정이 변경되어야 하는 모듈을 구분한다. 3D 물체마다 설정이 변경되어야 하는 객체들을 별도로 그룹화 해서 PipelineInfo 구조체로 묶어준다. 렌더링 파이프라인에 이 구조체를 기준으로 설정을 바꿔서 태워주면 새로운 물체를 그릴 수 있게 됨. PipelineInfo 는 아래 구성 요소가 포함됨. 여기서 ConstantBuffer는 3D 메시마다 필요할 수도, 필요하지 않을..

소수점 연산 오차 관련 (Epsilon, Approximately, IsNearlyEqual)

컴퓨터는 0과 1, 즉 2진수로 숫자를 처리. 실수의 소수점 숫자를 2진수로 정확히 표현할 수 없는 경우가 있기 때문에(비트가 무한히 반복) 소수점 연산을 할 때에는 미세한 오차가 발생할 수 밖에 없음. 예시를 보면 // C# using System; class Program { static void Main() { float num1 = 0.1f; float num2 = 0.2f; float sum = num1 + num2; Console.WriteLine("Sum: " + sum); } } // C++ #include int main() { float num1 = 0.1f; float num2 = 0.2f; float sum = num1 + num2; std::cout

C# 리플렉션(Reflection) 개념잡기

C#에서 리플렉션(Reflection) 기능은 프로그램이 런타임 중에 동적으로 객체의 타입 정보를 획득해서 접근하고 활용할 수 있는 기능. 리플렉션은 주로 System.Reflection 네임스페이스 내의 기능들을 사용하여 런타임에 타입 정보를 동적으로 검사하거나 조작하는 것. GetType() 메서드는 객체의 런타임 타입을 가져오는 것으로, 이것도 정적인 타입 정보를 가져오는 것이므로 일반적으로는 리플렉션을 사용했다고 보기 어렵. System.Reflection 네임스페이스의 기능을 사용하는 경우에야 리플렉션을 사용한 것으로 간주하며, typeof 연산이나 GetType() 메서드는 해당 범주에 포함되지 않는 것으로 볼 수 있음. 왜 이름이 리플렉션(Reflection)일까? C#의 리플렉션(Refle..

C#의 역사. C# 버전 1.0 부터 C# 버전 11 까지

C# 언어의 각 버전별 주요 릴리스에 대한 기록을 제공하는 문서를 소개하고 기록해둡니다. 2002년 1월 Visual Studio.Net 2002와 함께 릴리스된 C# 버전 1.0 부터, 2022년 11월 C# 버전 11 까지 갱신되어있습니다. 한글로 작성된 문서라 훑어보기 좋습니다. C# 의 역사 공식 문서 https://learn.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-version-history C#의 역사 - C# 가이드 이 언어의 초창기 버전은 어떤 모습이었으며 이후 어떻게 변했는가? learn.microsoft.com 아래 문서는 컴파일러 팀의 현재 상태와 진행 중인 작업을 정리해둔 문서입니다. 작업 진행, 기능 추가/제거 및 기능에 대한 작..

파이썬(Python) - 폴더 내의 특정 단어(접두어)일괄 변경, 제거하는 코드

파일들을 잔뜩 내려받을 일이 있었는데, 불필요한 접두어가 전부 붙어있는 상황. 이를 제거하기 위한 파이썬 코드입니다. 잘 동작하는 것 확인 완료. import os # 수정 대상 파일들이 들어있는 폴더 경로 folder_path = '/path/to/folder/' # 수정 대상 파일들의 공통된 접두어 prefix = 'prefix_' # 수정 대상 파일들의 공통된 확장자 extension = '.txt' # 수정 대상 단어 target_word = 'target_word' # 폴더 내의 모든 파일에 대해 반복 for filename in os.listdir(folder_path): # 파일 이름이 공통된 접두어로 시작하고, 공통된 확장자를 가지는 파일에 대해서만 작동 if filename.startsw..

728x90
반응형