LoginSignup
3
0

More than 3 years have passed since last update.

ScriptingDefineSymbolsを設定するついでにProjectSettingsの値も書き換える

Last updated at Posted at 2019-11-25

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();
    }
}
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0