背景
- Releaseビルドではデバッグリソースを除外したい
- デバッグリソースの置き場所をどこにしようか迷う
- Resourcesフォルダは非推奨なので使用したくない
- Release版のビルド前処理でResourcesフォルダを一時移動させる方法は面倒
- Addressableアセットシステムで IncludeResourcesFolders をOFFにする方法もあるが、他ライブラリでResourcesフォルダを使用しているケースもある
結論
- Assets/Main/Debug 以下にデバッグリソースを配置
- AddressableアセットシステムでDebugグループを用意
- Addressable の使い方は こちら
- Release版切り替え時にDebugグループを削除し、アセットバンドルビルド
- Develop版切り替え時にはデバッグリソースをインポートし、アセットバンドルビルド
- BuildTarget切り替えの実装方法は こちら
- AddressableAssetSettings.BuildPlayerContent() で自動ビルドできるが、Addressable のリモートアセット対応 が完了するまでは手動ビルドのほうがトラブルが少ない

コード例
using UnityEditor;
using System.Linq;
using UnityEditor.AddressableAssets.Settings;
[InitializeOnLoad]
public class EditorMyAppMenu
{
static EditorMyAppMenu()
{
EditorApplication.update += calc;
}
public enum EBuildTarget
{
Develop,
Release
}
private static void calc()
{
// Develop/Releaseメニューが有効になったが両方にチェックが入っていない場合は、Rspファイルを参照してどちらかにチェックを入れる
// コンストラクタではメニューが構築されておらず、Menu.SetChecked できないので、calc でポーリングしている
if (Menu.GetEnabled(cMenu_BuildTarget_Develop) && Menu.GetEnabled(cMenu_BuildTarget_Release)
&& !Menu.GetChecked(cMenu_BuildTarget_Develop) && !Menu.GetChecked(cMenu_BuildTarget_Release))
{
EBuildTarget curBuildTarget = getBuildTargetFromRsp();
if (curBuildTarget == EBuildTarget.Develop) OnBuildTarget_Develop();
else if (curBuildTarget == EBuildTarget.Release) OnBuildTarget_Release();
else throw new System.Exception("[EditorMyAppMenu] Illigal BuildTarget"); ;
}
}
[MenuItem(cMenu_BuildTarget_Develop)]
private static void OnBuildTarget_Develop()
{
// チェックマークを付ける
Menu.SetChecked(cMenu_BuildTarget_Develop, true);
Menu.SetChecked(cMenu_BuildTarget_Release, false);
// PlayerSettingsの設定(Androidの場合。iOS も必要であれば追記する)
var group = BuildPipeline.GetBuildTargetGroup(UnityEditor.BuildTarget.Android);
PlayerSettings.SetManagedStrippingLevel(group, ManagedStrippingLevel.Low);
PlayerSettings.SetApplicationIdentifier(group, "com.konden.myapp.develop");
PlayerSettings.productName = "Develop";
// slnファイルを削除
deleteSln();
// rspファイルを上書き保存
createRsp("-define:DEVELOP");
// デバッグリソースをインポート
AddressableImporter.FolderImporter.ReimportFolders(new string[] { "Assets/Main/Debug" });
}
[MenuItem(cMenu_BuildTarget_Release)]
private static void OnBuildTarget_Release()
{
// チェックマークを付ける
Menu.SetChecked(cMenu_BuildTarget_Develop, false);
Menu.SetChecked(cMenu_BuildTarget_Release, true);
// PlayerSettingsの設定(Androidの場合。iOS も必要であれば追記する)
var group = BuildPipeline.GetBuildTargetGroup(UnityEditor.BuildTarget.Android);
PlayerSettings.SetManagedStrippingLevel(group, ManagedStrippingLevel.Low);
PlayerSettings.SetApplicationIdentifier(group, "com.konden.myapp");
PlayerSettings.productName = "MyApp";
// slnファイルを削除
deleteSln();
// rspファイルを上書き保存
createRsp("");
// デバッグリソースを削除
deleteAssetGroup("Debug");
}
private static void deleteSln()
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo("MyApp.sln");
fileInfo.Delete();
}
private static void createRsp(string text)
{
System.IO.StreamWriter sw = new System.IO.StreamWriter("Assets/csc.rsp", false);
sw.WriteLine(text);
sw.Flush();
sw.Close();
}
private static EBuildTarget getBuildTargetFromRsp()
{
EBuildTarget ret = EBuildTarget.Develop;
System.IO.StreamReader sr = new System.IO.StreamReader("Assets/csc.rsp");
string text = sr.ReadToEnd();
if (text.Contains("-define:UNDER_DEVELOP")) ret = EBuildTarget.Develop;
else ret = EBuildTarget.Release;
sr.Close();
return ret;
}
private static AddressableAssetSettings getSettings()
{
var guidList = AssetDatabase.FindAssets("t:AddressableAssetSettings");
var guid = guidList.FirstOrDefault();
var path = AssetDatabase.GUIDToAssetPath(guid);
var settings = AssetDatabase.LoadAssetAtPath<AddressableAssetSettings>(path);
return settings;
}
private static void deleteAssetGroup(string groupName)
{
var settings = getSettings();
var group = settings.FindGroup(groupName);
settings.RemoveGroup(group);
}
private const string cMenu_BuildTarget_Develop = "MyApp/Build Target/Develop";
private const string cMenu_BuildTarget_Release = "MyApp/Build Target/Release";
}
使用方法
- デバッグリソースは Assets/Main/Debug 以下に追加していく
- MyApp - BuildTarget からターゲットを切り替える
- Build Settings - Build でapk作成