[Unity] 플레이어가 구축할 때 발생하는 컴파일 오류를 미리 확인합니다.

개요


편집기 폴더 아래 이외에 Unity Editor 이름 공간을 사용하는 방법은 구축할 때 욕을 먹는 녀석이 답답하기 때문에 미리 검사할 수 있다.

이점


특별히 유저 구축을 하지 않아도 컴파일 오류를 검사할 수 있어 편리합니다.
플랫폼으로 전환할 필요가 없이 서로 다른 구축 목표를 컴파일할 수 있습니다.

실시


사전 준비


Scriptable Build Pipeline(SBP)을 사용하여 컴파일 검사를 간단히 수행할 수 있습니다.
따라서 먼저 Scriptable Build Pipeline을 가져옵니다.
manifest.json에서 아래의 내용을 보충하여 기록하다.(1.5.0-preview2019/06/24 현재 최신 버전)
manifest.json
    "com.unity.scriptablebuildpipeline": "1.5.0-preview",
또는 Addressables 등을 사용하여 SBP의 봉인에 의존하는 경우 SBP를 따로 기록할 필요가 없습니다.

컴파일 검사 실시


아래 느낌으로 설치할 수 있습니다.
또한 이 스크립트 자체도 편집기 폴더 아래에 넣거나 Assembly Definition에서 편집기에서만 지정해야 합니다.
ScriptCompileTester.cs
using System.IO;
using UnityEditor;
using UnityEditor.Build.Player;
using UnityEngine;

public static class ScriptCompileTester
{
    /// <summary>
    /// 現在のBuildTargetに対してコンパイルチェックを行う
    /// </summary>
    [MenuItem("Tools/Compile Check/Current Active Target")]
    public static void CompileTestForCurrentBuildTarget()
    {
        CompileTest(EditorUserBuildSettings.activeBuildTarget, EditorUserBuildSettings.selectedBuildTargetGroup);
    }

    /// <summary>
    /// iOSに対してコンパイルチェックを行う
    /// </summary>
    [MenuItem("Tools/Compile Check/iOS")]
    public static void CompileTestForiOS()
    {
        CompileTest(BuildTarget.iOS, BuildTargetGroup.iOS);
    }

    /// <summary>
    /// Androidに対してコンパイルチェックを行う
    /// </summary>
    [MenuItem("Tools/Compile Check/Android")]
    public static void CompileTestForAndroid()
    {
        CompileTest(BuildTarget.Android, BuildTargetGroup.Android);
    }

    /// <summary>
    /// コンパイルチェックを行う
    /// </summary>
    public static void CompileTest(BuildTarget buildTarget, BuildTargetGroup buildTargetGroup)
    {
        var tempBuildPath = "Temp/CompileTest";

        var option = new ScriptCompilationSettings();
        option.target = buildTarget;
        option.group = buildTargetGroup;
        option.options = ScriptCompilationOptions.None;

        Debug.Log($"Compile Test Running - BuildTarget: {option.target}");

        // NOTE: エラーログはCompilePlayerScripts内で出力される
        var result = PlayerBuildInterface.CompilePlayerScripts(option, tempBuildPath);

        if (result.assemblies != null && result.assemblies.Count != 0 && result.typeDB != null)
        {
            Debug.Log($"Compile Test Success! - BuildTarget: {option.target}");
        }

        // NOTE: tempBuildPathにはコンパイル後のDLLが吐き出されている
        if (Directory.Exists(tempBuildPath))
        {
            Directory.Delete(tempBuildPath, true);
        }
    }
}

사용 예


상기 편집기 확장을 실행하면 Error와 Warning은 유저가 구축할 때와 같은 느낌으로 로그에 나타나기 때문에 컴파일이 잘못된 부분을 파괴합니다.
컴파일이 통과된 경우 로그에 다음과 같은 표시가 나타납니다.

참고로 컴파일된 검사이기 때문에 ActiveBuildTarget과 다른 BuildTarget 검사를 해도 Switch Platform에서 시간이 걸리지 않습니다.

좋은 웹페이지 즐겨찾기