Unityでアプリを作っていて、場合によって構成を変えたい場合があります。
たとえば展示するアプリ・配布するアプリなどです。
その際はScriptingDefineSymbolsに値を突っ込み、プログラム上で以下のように条件分岐することができます。こういうやつです。
#if HOGE
#else
#endif
便利なエディタ拡張
こちらの記事で簡単に設定できるエディタ拡張が公開されてました。ありがとうございます
http://baba-s.hatenablog.com/entry/2015/02/10/102941
ついでにProjectSettingの値も変更
ScriptingDefineSymbolsの変更に加え、ProjectSettingも書き加えたかったの追記しました。
//追記 という部分です。PlayerSettings.productName="HOGE"などとやると変更できます。
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using UnityEditor;
using UnityEngine;
/// <summary>
/// シンボルを設定するウィンドウを管理するクラス
/// </summary>
public class SymbolWindow : EditorWindow
{
//===================================================================================================
// クラス
//===================================================================================================
/// <summary>
/// シンボルのデータを管理するクラス
/// </summary>
private class SymbolData
{
public string Name { get; private set; } // 定義名を返します
public string Comment { get; private set; } // コメントを返します
public bool IsEnable { get; set; } // 有効かどうかを取得または設定します
/// <summary>
/// コンストラクタ
/// </summary>
public SymbolData( XmlNode node )
{
Name = node.Attributes[ "name" ].Value;
Comment = node.Attributes[ "comment" ].Value;
}
}
//===================================================================================================
// 定数
//===================================================================================================
private const string ITEM_NAME = "Tools/Symbols"; // コマンド名
private const string WINDOW_TITLE = "Symbols"; // ウィンドウのタイトル
private const string XML_PATH = "Assets/Plugins/Editor/defineSymbols/symbols.xml"; // 読み込む .xml のファイルパス
//===================================================================================================
// 変数
//===================================================================================================
private static Vector2 mScrollPos; // スクロール座標
private static SymbolData[] mSymbolList; // シンボルのリスト
//===================================================================================================
// 静的関数
//===================================================================================================
/// <summary>
/// ウィンドウを開きます
/// </summary>
[MenuItem( ITEM_NAME )]
private static void Open()
{
var window = GetWindow<SymbolWindow>( true, WINDOW_TITLE );
window.Init();
}
//===================================================================================================
// 関数
//===================================================================================================
/// <summary>
/// 初期化する時に呼び出します
/// </summary>
private void Init()
{
var document = new XmlDocument();
document.Load( XML_PATH );
var root = document.GetElementsByTagName( "root" )[ 0 ];
var symbolList = new List<XmlNode>();
foreach ( XmlNode n in root.ChildNodes )
{
if ( n.Name == "symbol" )
{
symbolList.Add( n );
}
}
mSymbolList = symbolList
.Select( c => new SymbolData( c ) )
.ToArray();
var defineSymbols = PlayerSettings
.GetScriptingDefineSymbolsForGroup( EditorUserBuildSettings.selectedBuildTargetGroup )
.Split( ';' );
foreach ( var n in mSymbolList )
{
n.IsEnable = defineSymbols.Any( c => c == n.Name );
}
}
/// <summary>
/// GUI を表示する時に呼び出されます
/// </summary>
private void OnGUI()
{
EditorGUILayout.BeginVertical();
mScrollPos = EditorGUILayout.BeginScrollView(
mScrollPos,
GUILayout.Height( position.height )
);
foreach ( var n in mSymbolList )
{
EditorGUILayout.BeginHorizontal( GUILayout.ExpandWidth( true ) );
n.IsEnable = EditorGUILayout.Toggle( n.IsEnable, GUILayout.Width( 16 ) );
if ( GUILayout.Button( "Copy" ) )
{
EditorGUIUtility.systemCopyBuffer = n.Name;
}
EditorGUILayout.LabelField( n.Name, GUILayout.ExpandWidth( true ), GUILayout.MinWidth( 0 ) );
EditorGUILayout.LabelField( n.Comment, GUILayout.ExpandWidth( true ), GUILayout.MinWidth( 0 ) );
EditorGUILayout.EndHorizontal();
}
if ( GUILayout.Button( "Save" ) )
{
var defineSymbols = mSymbolList
.Where( c => c.IsEnable )
.Select( c => c.Name )
.ToArray();
var str = string.Join( ";", defineSymbols );
PlayerSettings.SetScriptingDefineSymbolsForGroup(
EditorUserBuildSettings.selectedBuildTargetGroup,
str
);
//追記
if(str.IndexOf("HOGE")>=0){
PlayerSettings.productName = "HOGE";
PlayerSettings.allowedAutorotateToLandscapeLeft=true;
PlayerSettings.allowedAutorotateToPortrait=false;
PlayerSettings.allowedAutorotateToPortraitUpsideDown=false;
PlayerSettings.allowedAutorotateToLandscapeRight=false;
PlayerSettings.applicationIdentifier = "com.hoge.hogehoge";
PlayerSettings.iOS.targetDevice = iOSTargetDevice.iPhoneAndiPad;
}else{
PlayerSettings.productName = "FUGA";
PlayerSettings.allowedAutorotateToPortrait=true;
PlayerSettings.allowedAutorotateToPortraitUpsideDown=false;
PlayerSettings.allowedAutorotateToLandscapeLeft=false;
PlayerSettings.allowedAutorotateToLandscapeRight=false;
PlayerSettings.applicationIdentifier = "com.hoge.fugafuga";
PlayerSettings.iOS.targetDevice = iOSTargetDevice.iPhoneOnly;
//PlayerSettings.SplashScreen.show = true;
}
Close();
}
EditorGUILayout.EndScrollView();
EditorGUILayout.EndVertical();
}
}