[Unity] 플레이어가 구축할 때 발생하는 컴파일 오류를 미리 확인합니다.
8451 단어 ScriptableBuildPipelineUnity
개요
편집기 폴더 아래 이외에 Unity Editor 이름 공간을 사용하는 방법은 구축할 때 욕을 먹는 녀석이 답답하기 때문에 미리 검사할 수 있다.
이점
특별히 유저 구축을 하지 않아도 컴파일 오류를 검사할 수 있어 편리합니다.
플랫폼으로 전환할 필요가 없이 서로 다른 구축 목표를 컴파일할 수 있습니다.
실시
사전 준비
Scriptable Build Pipeline(SBP)을 사용하여 컴파일 검사를 간단히 수행할 수 있습니다.
따라서 먼저 Scriptable Build Pipeline을 가져옵니다.
manifest.json에서 아래의 내용을 보충하여 기록하다.(1.5.0-preview
2019/06/24 현재 최신 버전)
manifest.json "com.unity.scriptablebuildpipeline": "1.5.0-preview",
또는 Addressables 등을 사용하여 SBP의 봉인에 의존하는 경우 SBP를 따로 기록할 필요가 없습니다.
컴파일 검사 실시
아래 느낌으로 설치할 수 있습니다.
또한 이 스크립트 자체도 편집기 폴더 아래에 넣거나 Assembly Definition에서 편집기에서만 지정해야 합니다.
ScriptCompileTester.csusing 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에서 시간이 걸리지 않습니다.
Reference
이 문제에 관하여([Unity] 플레이어가 구축할 때 발생하는 컴파일 오류를 미리 확인합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k7a/items/ef5753e736d288fecc89
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
사전 준비
Scriptable Build Pipeline(SBP)을 사용하여 컴파일 검사를 간단히 수행할 수 있습니다.
따라서 먼저 Scriptable Build Pipeline을 가져옵니다.
manifest.json에서 아래의 내용을 보충하여 기록하다.(
1.5.0-preview
2019/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에서 시간이 걸리지 않습니다.
Reference
이 문제에 관하여([Unity] 플레이어가 구축할 때 발생하는 컴파일 오류를 미리 확인합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k7a/items/ef5753e736d288fecc89
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Unity] 플레이어가 구축할 때 발생하는 컴파일 오류를 미리 확인합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k7a/items/ef5753e736d288fecc89텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)