프로젝트 관리에 있어 문서화는 필수적인 부분입니다. 특히, 마크다운(.md) 파일을 이용한 문서는 그 가독성과 편리함으로 개발자 사이에서 널리 사용되고 있습니다. Visual Studio와 같은 IDE에서 프로젝트의 .md 파일을 직접 관리하고 싶을 때, .csproj 파일에 단순히 다음과 같은 아이템 그룹을 추가함으로써 해결할 수 있습니다.
<ItemGroup>
<None Include="**\*.md" />
</ItemGroup>
이렇게 하면, 솔루션 탐색기에서 .md 파일들을 쉽게 볼 수 있게 됩니다. 하지만, Unity 같은 환경에서는 상황이 조금 달라집니다.
Unity는 코드를 빌드할 때마다 .csproj 파일을 자동으로 생성하고 업데이트합니다.
이 과정에서 우리가 수동으로 추가한 <ItemGroup> 설정이 지워질 수 있습니다.
따라서, 프로젝트에 직접 이 아이템 그룹을 추가하는 것이 번거롭고, 심지어는 무의미해질 수 있습니다.
이 문제에 대한 해결책은 Unity 빌드 프로세스가 완료된 후에 .csproj 파일을 자동으로 수정하여 <ItemGroup>을 추가하는 방식입니다.
이렇게 하면, 빌드 과정에서 자동 생성된 .csproj 파일에 우리가 원하는 설정을 유지할 수 있게 됩니다.
이러한 방식의 구현은 CsprojModifier라는 간단한 스크립트를 통해 가능합니다.
이 스크립트는 Unity의 자산 후처리 기능을 활용하여, 빌드가 완료될 때마다 자동으로 .csproj 파일을 수정하고, 우리가 정의한 <ItemGroup>을 추가합니다.
이를 통해, 마크다운 파일들을 솔루션 탐색기에서 쉽게 관리하고 접근할 수 있게 됩니다.
이 방법은 Unity 개발 환경에서 프로젝트의 문서화를 용이하게 하며, 개발자가 프로젝트 내의 문서를 더욱 효과적으로 관리할 수 있게 해줍니다.
더 이상 수동으로 파일을 관리하거나, 빌드 과정에서 설정이 사라지는 문제에 신경 쓸 필요가 없습니다.
CsprojModifier 스크립트의 도움으로, 자동화된 프로세스를 통해 프로젝트의 문서 관리를 한층 더 간편하고 효율적으로 만들 수 있습니다.
Editor 폴더에 스크립트추가
using System;
using System.IO;
using UnityEditor;
using System.Linq;
public class CsprojModifier : AssetPostprocessor {
public static string OnGeneratedCSProject(string path, string content)
{
if (path.EndsWith(".csproj")) {
int asmdefIndex = content.IndexOf(".asmdef\"", StringComparison.Ordinal);
while (asmdefIndex > -1) {
// .asmdef 파일까지의 경로를 찾습니다.
int pathStart = content.LastIndexOf("<None Include=\"", asmdefIndex, StringComparison.Ordinal) + 15;
int pathEnd = asmdefIndex + 7; // ".asmdef" 문자열 길이를 더해줍니다.
string asmdefPath = content.Substring(pathStart, pathEnd - pathStart).Replace("/", "\\");
// 디렉토리 경로를 추출합니다.
string directoryPath = Path.GetDirectoryName(asmdefPath)?.Replace("/", "\\");
if (!string.IsNullOrEmpty(directoryPath)) {
// 해당 디렉토리 내의 모든 .md 파일을 찾습니다.
var mdFiles = Directory.GetFiles(directoryPath, "*.md", SearchOption.AllDirectories)
.Select(filePath => filePath.Replace("/", "\\")); // 경로 포맷을 백슬래시로 변환
if (mdFiles.Any()) {
// .md 파일들을 포함시키는 ItemGroup 섹션을 생성합니다.
string itemGroupToAdd = "\n <ItemGroup>\n";
foreach (var mdFile in mdFiles) {
// 프로젝트 경로를 기반으로 한 상대 경로로 변환합니다.
string relativePath = mdFile.Substring(directoryPath.Length).TrimStart('\\');
itemGroupToAdd += $" <None Include=\"{directoryPath}\\{relativePath}\" />\n";
}
itemGroupToAdd += " </ItemGroup>\n";
// .csproj 파일의 끝부분에 .md 파일들을 포함시키는 ItemGroup 섹션을 추가합니다.
int lastIndex = content.LastIndexOf("</Project>", StringComparison.Ordinal);
if (lastIndex != -1) {
content = content.Insert(lastIndex, itemGroupToAdd);
}
}
}
// 다음 .asmdef 파일을 찾습니다.
asmdefIndex = content.IndexOf(".asmdef\"", asmdefIndex + 1, StringComparison.Ordinal);
}
}
return content;
}
}
'Programming > Unity' 카테고리의 다른 글
FBX Exporter (0) | 2024.02.03 |
---|---|
newtonsoft Json 추가하기, TypeNameHandling 설정하기 (0) | 2023.08.07 |
Unity Addressable (0) | 2021.12.22 |
GraphicsRaycast (0) | 2019.12.31 |
TextMeshPro 한글 사용 (0) | 2018.09.30 |
유니티 에디터 모드 UI 샘플 메모 (0) | 2018.01.23 |
멀티 접속 테스트 (0) | 2018.01.14 |
유니티 프로젝트 목록 삭제 (0) | 2017.12.14 |