├── .gitignore
├── Assets
├── Editor.meta
├── Editor
│ ├── ConstantsClassCreator.cs
│ ├── ConstantsClassCreator.cs.meta
│ ├── SymbolEditor.meta
│ └── SymbolEditor
│ │ ├── DefineSymbol.cs
│ │ ├── DefineSymbol.cs.meta
│ │ ├── SymbolEditor.cs
│ │ ├── SymbolEditor.cs.meta
│ │ ├── SymbolEditorWindow.cs
│ │ └── SymbolEditorWindow.cs.meta
├── Scripts.meta
├── Scripts
│ ├── Constants.meta
│ └── Constants
│ │ ├── DefineValue.cs
│ │ └── DefineValue.cs.meta
├── Untitled.unity
└── Untitled.unity.meta
├── LICENSE.txt
├── ProjectSettings
├── AudioManager.asset
├── DynamicsManager.asset
├── EditorBuildSettings.asset
├── EditorSettings.asset
├── GraphicsSettings.asset
├── InputManager.asset
├── NavMeshAreas.asset
├── NetworkManager.asset
├── Physics2DSettings.asset
├── ProjectSettings.asset
├── ProjectVersion.txt
├── QualitySettings.asset
├── TagManager.asset
├── TimeManager.asset
├── UnityAdsSettings.asset
└── UnityAnalyticsManager.asset
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | # ---------------[ original ]------------------ #
2 |
3 | # ---------------[ Folder ]------------------ #
4 |
5 |
6 |
7 | # ---------------[ Unity generated ]------------------ #
8 | [Ll]ibrary/
9 | [Tt]emp/
10 | [Oo]bj/
11 | UnityGenerated/
12 |
13 |
14 | # ----[ Visual Studio / MonoDevelop generated ]------- #
15 |
16 | ExportedObj/
17 | *.svd
18 | *.userprefs
19 | *.csproj
20 | *.pidb
21 | *.suo
22 | *.sln
23 | *.user
24 | *.unityproj
25 | *.booproj
26 |
27 | # -------------[ OS generated ]------------------------ #
28 | .DS_Store
29 | .DS_Store?
30 | ._*
31 | .Spotlight-V100
32 | .Trashes
33 | Icon?
34 | ehthumbs.db
35 | Thumbs.db
36 | LocalCache/
37 | # -------------[ Build ]------------------------ #
38 | *.html
39 | *.unity3d
40 |
--------------------------------------------------------------------------------
/Assets/Editor.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a08867e8a4a01485ca988c898094424b
3 | folderAsset: yes
4 | timeCreated: 1448945203
5 | licenseType: Free
6 | DefaultImporter:
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 |
--------------------------------------------------------------------------------
/Assets/Editor/ConstantsClassCreator.cs:
--------------------------------------------------------------------------------
1 | // ConstantsClassCreator.cs
2 | // http://kan-kikuchi.hatenablog.com/entry/ScriptingDefineSymbolsEditor
3 | //
4 | // Created by kan kikuchi on 2015.09.30.
5 |
6 | using System;
7 | using System.IO;
8 | using System.Text;
9 | using UnityEngine;
10 | using System.Collections;
11 | using System.Collections.Generic;
12 | using UnityEditor;
13 | using System.Linq;
14 |
15 | ///
16 | /// 定数を管理するクラスを生成するクラス
17 | ///
18 | public static class ConstantsClassCreator{
19 |
20 | //無効な文字を管理する配列
21 | private static readonly string[] INVALUD_CHARS = {
22 | " ", "!", "\"", "#", "$",
23 | "%", "&", "\'", "(", ")",
24 | "-", "=", "^", "~", "\\",
25 | "|", "[", "{", "@", "`",
26 | "]", "}", ":", "*", ";",
27 | "+", "/", "?", ".", ">",
28 | ",", "<"
29 | };
30 |
31 | //定数の区切り文字
32 | private const char DELIMITER = '_';
33 |
34 | //スクリプトの拡張子
35 | private const string SCRIPT_EXTENSION = ".cs";
36 |
37 | //作成したスクリプトを書き出す先
38 | private const string EXPORT_DIRECTORY_PATH = "Assets/Scripts/Constants/";
39 |
40 | //型名
41 | private const string STRING_NAME = "string";
42 | private const string INT_NAME = "int";
43 | private const string FLOAT_NAME = "float";
44 |
45 | ///
46 | /// 定数を管理するクラスを自動生成する
47 | ///
48 | /// クラスの名前
49 | /// なんのクラスか説明するコメント文
50 | /// 定数名とその値をセットで登録したDictionary
51 | /// 定数の型、stringかintかfloat
52 | public static void Create (string className, string classInfo, Dictionary valueDict){
53 | //入力された型の判定
54 | string typeName = null;
55 |
56 | if(typeof(T) == typeof(string)){
57 | typeName = STRING_NAME;
58 | }
59 | else if(typeof(T) == typeof(int)){
60 | typeName = INT_NAME;
61 | }
62 | else if(typeof(T) == typeof(float)){
63 | typeName = FLOAT_NAME;
64 | }
65 | else{
66 | Debug.Log (className + SCRIPT_EXTENSION +"の作成に失敗しました.想定外の型" + typeof(T).Name + "が入力されました");
67 | return;
68 | }
69 |
70 | //ディクショナリーをソートしたものに
71 | SortedDictionary sortDict = new SortedDictionary (valueDict);
72 |
73 | //入力された辞書のkeyから無効な文字列を削除して、大文字に_を設定した定数名と同じものに変更し新たな辞書に登録
74 | //次の定数の最大長求めるところで、_を含めたものを取得したいので、先に実行
75 | Dictionary newValueDict = new Dictionary ();
76 |
77 | foreach (KeyValuePair valuePair in sortDict) {
78 | string newKey = RemoveInvalidChars(valuePair.Key);
79 | newKey = SetDelimiterBeforeUppercase(newKey);
80 | newValueDict [newKey] = valuePair.Value;
81 | }
82 |
83 | //定数名の最大長を取得し、空白数を決定
84 | int keyLengthMax = 0;
85 | if(newValueDict.Count > 0){
86 | keyLengthMax = 1 + newValueDict.Keys.Select (key => key.Length).Max ();
87 | }
88 |
89 | //コメント文とクラス名を入力
90 | StringBuilder builder = new StringBuilder ();
91 |
92 | builder.AppendLine ("/// ");
93 | builder.AppendFormat ("/// {0}", classInfo).AppendLine ();
94 | builder.AppendLine ("/// ");
95 | builder.AppendFormat ("public static class {0}", className).AppendLine ("{").AppendLine ();
96 |
97 | //入力された定数とその値のペアを書き出していく
98 | string[] keyArray = newValueDict.Keys.ToArray();
99 | foreach (string key in keyArray) {
100 |
101 | if (string.IsNullOrEmpty (key)) {
102 | continue;
103 | }
104 | //数字だけのkeyだったらスルー
105 | else if (System.Text.RegularExpressions.Regex.IsMatch(key ,@"^[0-9]+$")){
106 | continue;
107 | }
108 | //keyに半英数字と_以外が含まれていたらスルー
109 | else if (!System.Text.RegularExpressions.Regex.IsMatch(key, @"^[_a-zA-Z0-9]+$")){
110 | continue;
111 | }
112 |
113 | //イコールが並ぶ用に空白を調整する
114 | string EqualStr = String.Format("{0, " + (keyLengthMax - key.Length).ToString() + "}", "=");
115 |
116 | //上記で判定した型と定数名を入力
117 | builder.Append ("\t").AppendFormat (@"public const {0} {1} {2} ", typeName, key, EqualStr);
118 |
119 | //Tがstringの場合は値の前後に"を付ける
120 | if (typeName == STRING_NAME) {
121 | builder.AppendFormat (@"""{0}"";", newValueDict[key]).AppendLine ();
122 | }
123 |
124 | //Tがfloatの場合は値の後にfを付ける
125 | else if (typeName == FLOAT_NAME) {
126 | builder.AppendFormat (@"{0}f;", newValueDict[key]).AppendLine ();
127 | }
128 |
129 | else {
130 | builder.AppendFormat (@"{0};", newValueDict[key]).AppendLine ();
131 | }
132 |
133 | }
134 |
135 | builder.AppendLine().AppendLine ("}");
136 |
137 | //書き出し、ファイル名はクラス名.cs
138 | string exportPath = EXPORT_DIRECTORY_PATH + className + SCRIPT_EXTENSION;
139 |
140 | //書き出し先のディレクトリが無ければ作成
141 | string directoryName = Path.GetDirectoryName (exportPath);
142 | if (!Directory.Exists (directoryName)) {
143 | Directory.CreateDirectory(directoryName);
144 | }
145 |
146 | File.WriteAllText (exportPath, builder.ToString (), Encoding.UTF8);
147 | AssetDatabase.Refresh (ImportAssetOptions.ImportRecursive);
148 |
149 | Debug.Log (className + SCRIPT_EXTENSION + "の作成が完了しました");
150 | }
151 |
152 |
153 | ///
154 | /// 無効な文字を削除します
155 | ///
156 | private static string RemoveInvalidChars(string str){
157 | Array.ForEach(INVALUD_CHARS, c => str = str.Replace(c, string.Empty));
158 | return str;
159 | }
160 |
161 | ///
162 | /// 区切り文字を大文字の前に設定する
163 | ///
164 | private static string SetDelimiterBeforeUppercase(string str){
165 | string conversionStr = "";
166 |
167 | for(int strNo = 0; strNo < str.Length; strNo++){
168 |
169 | bool isSetDelimiter = true;
170 |
171 | //最初には設定しない
172 | if(strNo == 0){
173 | isSetDelimiter = false;
174 | }
175 | //小文字か数字なら設定しない
176 | else if(char.IsLower(str[strNo]) || char.IsNumber(str[strNo])){
177 | isSetDelimiter = false;
178 | }
179 | //判定してるの前が大文字なら設定しない(連続大文字の時)
180 | else if(char.IsUpper(str[strNo - 1]) && !char.IsNumber(str[strNo])){
181 | isSetDelimiter = false;
182 | }
183 | //判定してる文字かその文字の前が区切り文字なら設定しない
184 | else if(str[strNo] == DELIMITER || str[strNo - 1] == DELIMITER){
185 | isSetDelimiter = false;
186 | }
187 |
188 | //文字設定
189 | if(isSetDelimiter){
190 | conversionStr += DELIMITER.ToString();
191 | }
192 | conversionStr += str.ToUpper() [strNo];
193 |
194 | }
195 |
196 | return conversionStr;
197 | }
198 |
199 | }
--------------------------------------------------------------------------------
/Assets/Editor/ConstantsClassCreator.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 01fbe01852a964c72a01f5eb9e8ba6cb
3 | timeCreated: 1448847713
4 | licenseType: Free
5 | MonoImporter:
6 | serializedVersion: 2
7 | defaultReferences: []
8 | executionOrder: 0
9 | icon: {instanceID: 0}
10 | userData:
11 | assetBundleName:
12 | assetBundleVariant:
13 |
--------------------------------------------------------------------------------
/Assets/Editor/SymbolEditor.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0033b6bec2484483c8599848db9ee231
3 | folderAsset: yes
4 | timeCreated: 1448847574
5 | licenseType: Free
6 | DefaultImporter:
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 |
--------------------------------------------------------------------------------
/Assets/Editor/SymbolEditor/DefineSymbol.cs:
--------------------------------------------------------------------------------
1 | // DefineSymbol.cs
2 | // http://kan-kikuchi.hatenablog.com/entry/ScriptingDefineSymbolsEditor
3 | //
4 | // Created by kan kikuchi on 2015.09.30.
5 |
6 | using UnityEditor;
7 | using UnityEngine;
8 | using System.Collections;
9 | using System.Collections.Generic;
10 | using System.Text.RegularExpressions;
11 |
12 | ///
13 | /// Symbol名、対応する値、説明を持ったSymbolのクラス
14 | ///
15 | public class DefineSymbol {
16 |
17 | //シンボルのkey
18 | private string _key;
19 | public string Key{
20 | get{return _key;}
21 | }
22 |
23 | //シンボルに対応した値
24 | private string _value = "";
25 | public string Value{
26 | get{return _value;}
27 | }
28 |
29 | //シンボルが有効か
30 | private bool _isEnabled = true;
31 | public bool IsEnabled{
32 | get{return _isEnabled;}
33 | }
34 |
35 | //シンボルの説明
36 | private string _info = "";
37 | public string Info{
38 | get{return _info;}
39 | }
40 |
41 | //保存する時のkeyの形式
42 | private const string SYMBOL_VALUE_SAVE_KEY_FORMAT = "SymbolValueKeyFor{0}";
43 | private const string SYMBOL_INFO_SAVE_KEY_FORMAT = "SymbolInfoKeyFor{0}";
44 |
45 | //=================================================================================
46 | //初期化
47 | //=================================================================================
48 |
49 | ///
50 | /// keyと有効かどうか指定して初期化する
51 | ///
52 | public DefineSymbol (string key, bool isEnabled){
53 |
54 | _key = key;
55 | _isEnabled = isEnabled;
56 |
57 | //シンボルに対応した値を取得
58 | _value = EditorUserSettings.GetConfigValue (GetSymbolValueSaveKey(_key));
59 | if(string.IsNullOrEmpty(_value)){
60 | _value = "";
61 | }
62 |
63 | //シンボルの説明を取得
64 | _info = EditorUserSettings.GetConfigValue (GetSymbolInfoSaveKey(_key));
65 | if(string.IsNullOrEmpty(_info)){
66 | _info = "";
67 | }
68 | }
69 |
70 | //=================================================================================
71 | //内部
72 | //=================================================================================
73 |
74 | //シンボルに対応した値を保存する時に使うkeyを取得
75 | private string GetSymbolValueSaveKey(string symbol){
76 | return string.Format (SYMBOL_VALUE_SAVE_KEY_FORMAT, symbol);
77 | }
78 |
79 | //シンボルの説明を保存する時に使うkeyを取得
80 | private string GetSymbolInfoSaveKey(string symbol){
81 | return string.Format (SYMBOL_INFO_SAVE_KEY_FORMAT, symbol);
82 | }
83 |
84 | //シンボル名を半角英数字+アンダースコア以外を除き、大文字で設定
85 | private static string ModifyKey(string symbol){
86 | Regex regex = new Regex(@"[^_a-zA-Z0-9]");
87 | symbol = regex.Replace(symbol, "");
88 | return symbol.ToUpper ();
89 | }
90 |
91 | //=================================================================================
92 | //変更
93 | //=================================================================================
94 |
95 | ///
96 | /// シンボルに対応した値と情報を削除する
97 | ///
98 | public void DeleteValueAndInfo(){
99 | //シンボルに対応する値を削除
100 | _value = "";
101 | EditorUserSettings.SetConfigValue (GetSymbolValueSaveKey(_key), "");
102 |
103 | //シンボルの説明を削除
104 | _info = "";
105 | EditorUserSettings.SetConfigValue (GetSymbolInfoSaveKey(_key), "");
106 | }
107 |
108 | ///
109 | /// シンボルの設定を編集する
110 | ///
111 | public void Edit(string key, string symbolValue, string symbolInfo, bool isEnabled){
112 | _key = ModifyKey (key);
113 | _value = symbolValue;
114 | _info = symbolInfo;
115 | _isEnabled = isEnabled;
116 | }
117 |
118 | ///
119 | /// シンボルの設定を編集する
120 | ///
121 | public void Edit(bool isEnabled){
122 | _isEnabled = isEnabled;
123 | }
124 |
125 | //=================================================================================
126 | //保存
127 | //=================================================================================
128 |
129 | ///
130 | /// シンボルの設定を保存する
131 | ///
132 | public void Save(){
133 | //シンボルに対応する値を保存
134 | EditorUserSettings.SetConfigValue (GetSymbolValueSaveKey(_key), _value);
135 |
136 | //シンボルの説明を保存
137 | EditorUserSettings.SetConfigValue (GetSymbolInfoSaveKey(_key), _info);
138 | }
139 |
140 | }
141 |
--------------------------------------------------------------------------------
/Assets/Editor/SymbolEditor/DefineSymbol.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 536f21a28bd0449498c6ee295b5752fc
3 | MonoImporter:
4 | serializedVersion: 2
5 | defaultReferences: []
6 | executionOrder: 0
7 | icon: {instanceID: 0}
8 | userData:
9 |
--------------------------------------------------------------------------------
/Assets/Editor/SymbolEditor/SymbolEditor.cs:
--------------------------------------------------------------------------------
1 | // SymbolEditor.cs
2 | // http://kan-kikuchi.hatenablog.com/entry/ScriptingDefineSymbolsEditor
3 | //
4 | // Created by kan kikuchi on 2015.09.30.
5 |
6 | using UnityEditor;
7 | using UnityEngine;
8 | using System;
9 | using System.Linq;
10 | using System.Collections;
11 | using System.Collections.Generic;
12 |
13 | ///
14 | /// DefineSymbolを操作するクラス
15 | ///
16 | public static class SymbolEditor {
17 |
18 | //シンボルを区切る文字
19 | private const string SYMBOL_SEPARATOR = ";";
20 |
21 | //シンボル名一覧を保存する時のkey
22 | private const string SYMBOL_KEY_LIST_SAVE_KEY = "SymbolKeyListKey";
23 |
24 | //シンボル一覧
25 | private static List _symbolList;
26 | public static List SymbolList{
27 | get{
28 | if(_symbolList == null){
29 | Init ();
30 | }
31 | return _symbolList;
32 | }
33 | }
34 |
35 | //現在選ばれてるプラットフォーム
36 | private static BuildTargetGroup _targetGroup;
37 | public static BuildTargetGroup TargetGroup{
38 | get{return _targetGroup;}
39 | }
40 |
41 | //シンボルを編集したか
42 | private static bool _isEdited = false;
43 | public static bool IsEdited{
44 | get{return _isEdited;}
45 | }
46 |
47 | //重複したシンボルのkeyがあるか
48 | public static bool IsDuplicateSymbolKey{
49 | get{return _symbolList.Select (symbol => symbol.Key).Distinct().Count() != _symbolList.Count;}
50 | }
51 |
52 | //=================================================================================
53 | //初期化
54 | //=================================================================================
55 |
56 | //メニューからウィンドウを表示
57 | [MenuItem("Tools/Open/SymbolEditorWindow")]
58 | public static void Open (){
59 | SymbolEditorWindow.GetWindow (typeof(SymbolEditorWindow));
60 | }
61 |
62 | ///
63 | /// 初期化
64 | ///
65 | public static void Init(){
66 | _isEdited = false;
67 |
68 | //現在選ばれてるプラットフォームを取得
69 | _targetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
70 |
71 | //シンボルのkeyをまとめるリスト作成
72 | List symbolKeyList = new List();
73 |
74 | //現在のプラットフォームに設定されてるシンボル名を取得し、リストに追加
75 | string[] settingSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup (_targetGroup).Split(new []{SYMBOL_SEPARATOR}, StringSplitOptions.None);
76 | symbolKeyList.AddRange (settingSymbols.ToList());
77 |
78 | //EditorUserSettingsに保存されているシンボル名一覧があれば、リストに追加
79 | string savingSymbolKeys = EditorUserSettings.GetConfigValue (SYMBOL_KEY_LIST_SAVE_KEY);
80 |
81 | List savingSymbolKeyList = new List ();;
82 | if(!string.IsNullOrEmpty(savingSymbolKeys)){
83 | savingSymbolKeyList = new List (savingSymbolKeys.Split(new []{SYMBOL_SEPARATOR}, StringSplitOptions.None));
84 | }
85 |
86 | symbolKeyList.AddRange (savingSymbolKeyList);
87 |
88 | //空白及び重複しているシンボル名を除き、アルファベット順にソート
89 | symbolKeyList = symbolKeyList.Where(symbolKey => !string.IsNullOrEmpty(symbolKey)).Distinct().ToList();
90 | symbolKeyList.Sort ();
91 |
92 | //各シンボルkeyからシンボルを作成
93 | _symbolList = new List ();
94 | foreach (string symbolKey in symbolKeyList) {
95 |
96 | bool isEnabled = settingSymbols.Contains (symbolKey);
97 | DefineSymbol symbol = new DefineSymbol (symbolKey, isEnabled);
98 |
99 | //EditorUserSettingsに保存されていなかったkeyは前のValueとInfoが残っている可能性があるので削除
100 | if(!savingSymbolKeyList.Contains(symbolKey)){
101 | symbol.DeleteValueAndInfo ();
102 | }
103 |
104 | _symbolList.Add (symbol);
105 | }
106 |
107 | //有効になっているシンボルを上に表示するように
108 | _symbolList = _symbolList.OrderBy (symbol => symbol.IsEnabled ? 0 : 1).ToList();
109 |
110 | }
111 |
112 | //=================================================================================
113 | //シンボル修正
114 | //=================================================================================
115 |
116 | ///
117 | /// シンボルを修正
118 | ///
119 | public static void EditSymbol(int symbolNo, string symbolKey, string symbolValue, string symbolInfo, bool isEnabled){
120 | _isEdited = true;
121 |
122 | //新たなシンボル作成
123 | if(symbolNo >= _symbolList.Count){
124 | DefineSymbol newSymbol = new DefineSymbol (symbolKey, isEnabled);
125 | _symbolList.Add (newSymbol);
126 | }
127 |
128 | DefineSymbol symbol = _symbolList[symbolNo];
129 | symbol.Edit (symbolKey, symbolValue, symbolInfo, isEnabled);
130 | }
131 |
132 | ///
133 | /// 全てのシンボルを有効or無効にする
134 | ///
135 | public static void SetAllEnabled(bool isEnabled){
136 | _isEdited = true;
137 |
138 | foreach (DefineSymbol symbol in _symbolList) {
139 | symbol.Edit (isEnabled);
140 | }
141 | }
142 |
143 | ///
144 | /// 全てのシンボルを削除する
145 | ///
146 | public static void AllDelete(){
147 | _isEdited = true;
148 |
149 | _symbolList.Clear ();
150 | }
151 |
152 | ///
153 | /// シンボルを削除する
154 | ///
155 | public static void Delete(int symbolNo){
156 | if(symbolNo >= _symbolList.Count){
157 | return;
158 | }
159 | _isEdited = true;
160 |
161 | _symbolList [symbolNo].DeleteValueAndInfo ();
162 | _symbolList.RemoveAt (symbolNo);
163 | }
164 |
165 | //=================================================================================
166 | //シンボルの保存
167 | //=================================================================================
168 |
169 | ///
170 | /// 指定したプラットフォームにシンボルを保存
171 | ///
172 | public static void Save(BuildTargetGroup targetGroup, bool needToCreateDefineValue = true){
173 | _isEdited = false;
174 |
175 | //シンボルのkeyを空白を無視かつ重複しないようにに取得
176 | List symbolKeyList = _symbolList
177 | .Select(symbol => symbol.Key).Where (symbolKey => !string.IsNullOrEmpty(symbolKey))
178 | .Distinct().ToList ();
179 |
180 | //シンボルを一つの文字列にまとめ、EditorUserSettingsに保存
181 | EditorUserSettings.SetConfigValue (SYMBOL_KEY_LIST_SAVE_KEY, string.Join(SYMBOL_SEPARATOR ,symbolKeyList.ToArray()));
182 |
183 | //各シンボルの対応した設定を保存
184 | string enabledSymbols = "";
185 | Dictionary _defineValueDic = new Dictionary();
186 |
187 | foreach (DefineSymbol symbol in _symbolList) {
188 |
189 | symbol.Save ();
190 |
191 | //valueが設定されている場合は定数クラスに書き出すためにDictにまとめる
192 | if(needToCreateDefineValue && !string.IsNullOrEmpty(symbol.Value)){
193 | _defineValueDic[symbol.Key] = symbol.Value;
194 | }
195 |
196 | //有効になっているシンボルは設定するように;区切りでenabledSymbolsにまとめる
197 | if(symbol.IsEnabled){
198 |
199 | if(!string.IsNullOrEmpty(enabledSymbols)){
200 | enabledSymbols += SYMBOL_SEPARATOR;
201 | }
202 | enabledSymbols += symbol.Key;
203 | }
204 |
205 | }
206 |
207 | //設定するグループが不明だとエラーがでるので設定しないように
208 | if(targetGroup != BuildTargetGroup.Unknown){
209 | PlayerSettings.SetScriptingDefineSymbolsForGroup (targetGroup, enabledSymbols);
210 | }
211 |
212 | //Symbolに対応した値を定数クラス、DefineValueを書き出す
213 | if(needToCreateDefineValue){
214 | ConstantsClassCreator.Create("DefineValue", "Symbolに対応した値を定数で管理するクラス", _defineValueDic);
215 | }
216 |
217 | }
218 |
219 | ///
220 | /// 全プラットフォームに同じシンボルを保存
221 | ///
222 | public static void SaveAll(){
223 |
224 | //Symbolに対応した値をまとめたDefineValueを作成するかのフラグ
225 | bool needToCreateDefineValue = true;
226 |
227 | foreach (BuildTargetGroup buildTarget in Enum.GetValues(typeof(BuildTargetGroup))){
228 |
229 | if (!IsObsolete(buildTarget)){
230 | Save(buildTarget, needToCreateDefineValue);
231 |
232 | //一度書き出したら、DefineValueを再度書き出さないように
233 | needToCreateDefineValue = false;
234 | }
235 | }
236 | }
237 |
238 | public static bool IsObsolete(Enum value){
239 | var fi = value.GetType().GetField(value.ToString());
240 | var attributes = (ObsoleteAttribute[])
241 | fi.GetCustomAttributes(typeof(ObsoleteAttribute), false);
242 | return (attributes != null && attributes.Length > 0);
243 | }
244 | }
245 |
--------------------------------------------------------------------------------
/Assets/Editor/SymbolEditor/SymbolEditor.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5c46da96187d542168098162b650db70
3 | MonoImporter:
4 | serializedVersion: 2
5 | defaultReferences: []
6 | executionOrder: 0
7 | icon: {instanceID: 0}
8 | userData:
9 |
--------------------------------------------------------------------------------
/Assets/Editor/SymbolEditor/SymbolEditorWindow.cs:
--------------------------------------------------------------------------------
1 | // DefineSymbolController.cs
2 | // http://kan-kikuchi.hatenablog.com/entry/ScriptingDefineSymbolsEditor
3 | //
4 | // Created by kan kikuchi on 2015.09.30.
5 |
6 | using UnityEditor;
7 | using UnityEngine;
8 | using System;
9 | using System.Collections;
10 | using System.Collections.Generic;
11 |
12 | ///
13 | /// DefineSymbolを操作する時に使うウィンドウ
14 | ///
15 | public class SymbolEditorWindow : EditorWindow {
16 |
17 | private Vector2 _scrollPosition = Vector2.zero;
18 |
19 | //=================================================================================
20 | //初期化
21 | //=================================================================================
22 |
23 | private void OnEnable (){
24 | SymbolEditor.Init ();
25 | }
26 |
27 | //=================================================================================
28 | //表示するGUIの設定
29 | //=================================================================================
30 |
31 | private void OnGUI(){
32 |
33 | if(EditorApplication.isPlaying || Application.isPlaying || EditorApplication.isCompiling){
34 | EditorGUILayout.HelpBox("コンパイル中、実行中は変更できません", MessageType.Warning);
35 | return;
36 | }
37 |
38 | //変更があり、セーブしていない時は上に注意を表示
39 | if(SymbolEditor.IsEdited){
40 | EditorGUILayout.HelpBox("保存されていない情報があります", MessageType.Warning);
41 | }
42 | else{
43 | EditorGUILayout.HelpBox ("保存済みです", MessageType.Info);
44 | }
45 |
46 | _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition, GUI.skin.scrollView);
47 | EditorGUILayout.PrefixLabel("Current Target : " + SymbolEditor.TargetGroup.ToString());
48 |
49 | //シンボル一覧表示
50 | EditorGUILayout.BeginVertical( GUI.skin.box );
51 | {
52 | EditorGUILayout.PrefixLabel("Scripting Define Symbols");
53 | CreateSymbolMenu ();
54 | }
55 | EditorGUILayout.EndVertical();
56 |
57 | GUILayout.Space (20);
58 |
59 | //Saveメニューを並べる
60 | EditorGUILayout.BeginVertical( GUI.skin.box );
61 | {
62 | EditorGUILayout.PrefixLabel("Save");
63 | CreateSaveMenu ();
64 | }
65 | EditorGUILayout.EndVertical();
66 |
67 | EditorGUILayout.EndScrollView();
68 | }
69 |
70 | //シンボルのメニューを作成
71 | private void CreateSymbolMenu(){
72 |
73 | //シンボル分メニュー作成
74 | List symbolList = SymbolEditor.SymbolList;
75 | for (int i = 0; i < symbolList.Count; i++) {
76 | CreateSymbolMenuParts (symbolList [i], i);
77 | GUILayout.Space (5);
78 | }
79 |
80 | //新規に追加できるよう、空白のメニューを追加
81 | DefineSymbol newSymbol = new DefineSymbol ("", false);
82 | CreateSymbolMenuParts (newSymbol, symbolList.Count);
83 |
84 | GUILayout.Space (10);
85 |
86 | //保存されている状態に戻すボタン
87 | if(GUILayout.Button ("Reset")){
88 | SymbolEditor.Init();
89 | }
90 |
91 | GUILayout.Space (10);
92 |
93 | //全部無効にするボタン
94 | if(GUILayout.Button ("All Invalid")){
95 | SymbolEditor.SetAllEnabled(false);
96 | }
97 |
98 | //全部有効にするボタン
99 | if(GUILayout.Button ("All Valid")){
100 | SymbolEditor.SetAllEnabled(true);
101 | }
102 |
103 | GUILayout.Space (10);
104 |
105 | //全部削除するボタン
106 | if(GUILayout.Button ("All Delete")){
107 | SymbolEditor.AllDelete();
108 | }
109 | }
110 |
111 | //各シンボルのメニューを作成
112 | private void CreateSymbolMenuParts(DefineSymbol symbol, int symbolNo){
113 |
114 | //有効になっているかどうかでスキンを変える
115 | EditorGUILayout.BeginVertical(symbol.IsEnabled ? GUI.skin.button : GUI.skin.textField);
116 | {
117 |
118 | //内容の変更チェック開始
119 | EditorGUI.BeginChangeCheck ();
120 |
121 | string symbolKey = symbol.Key;
122 | bool isEnabled = symbol.IsEnabled;
123 |
124 | EditorGUILayout.BeginHorizontal ();
125 | {
126 | //内容の変更チェック開始
127 | EditorGUI.BeginChangeCheck ();
128 |
129 | //チェックボックス作成
130 | isEnabled = EditorGUILayout.Toggle (isEnabled, GUILayout.Width(15));
131 |
132 | //シンボル名
133 | EditorGUILayout.LabelField("Symbol", GUILayout.Width(45));
134 | symbolKey = GUILayout.TextField(symbolKey);
135 |
136 | //最後の新規入力欄以外は削除ボタンを表示
137 | if(symbolNo < SymbolEditor.SymbolList.Count){
138 | if (GUILayout.Button("X", GUILayout.Width(20), GUILayout.Height(14))){
139 | SymbolEditor.Delete (symbolNo);
140 | return;
141 | }
142 | }
143 |
144 | }
145 | EditorGUILayout.EndHorizontal();
146 |
147 | EditorGUI.indentLevel = 2;
148 |
149 | //シンボルに対応する値
150 | string symbolValue = symbol.Value;
151 | EditorGUILayout.BeginHorizontal ();
152 | {
153 | EditorGUILayout.LabelField("Value", GUILayout.Width(64));
154 | symbolValue = GUILayout.TextField(symbolValue);
155 | }
156 | EditorGUILayout.EndHorizontal();
157 |
158 | //シンボルの説明
159 | string symbolInfo = symbol.Info;
160 | EditorGUILayout.BeginHorizontal ();
161 | {
162 | EditorGUILayout.LabelField("Info", GUILayout.Width(64));
163 | symbolInfo = GUILayout.TextField(symbolInfo);
164 | }
165 | EditorGUILayout.EndHorizontal();
166 |
167 | //内容が変更されていれば、シンボルを編集
168 | if (EditorGUI.EndChangeCheck ()){
169 | SymbolEditor.EditSymbol (symbolNo, symbolKey, symbolValue, symbolInfo, isEnabled);
170 | }
171 |
172 | }
173 | EditorGUILayout.EndVertical();
174 |
175 | EditorGUI.indentLevel = 0;
176 | }
177 |
178 | //セーブメニュー作成
179 | private void CreateSaveMenu(){
180 | if(SymbolEditor.IsDuplicateSymbolKey){
181 | EditorGUILayout.HelpBox("Symbolが重複しているので保存できません。", MessageType.Warning);
182 | return;
183 | }
184 |
185 | if(GUILayout.Button ("Current Target")){
186 | SymbolEditor.Save (SymbolEditor.TargetGroup);
187 | }
188 | if(GUILayout.Button ("All Target")){
189 | SymbolEditor.SaveAll();
190 | }
191 | }
192 |
193 | }
194 |
--------------------------------------------------------------------------------
/Assets/Editor/SymbolEditor/SymbolEditorWindow.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 8f245a14c9fd4457a9b75eb6f6888109
3 | MonoImporter:
4 | serializedVersion: 2
5 | defaultReferences: []
6 | executionOrder: 0
7 | icon: {instanceID: 0}
8 | userData:
9 |
--------------------------------------------------------------------------------
/Assets/Scripts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 88028938d3ec04c3fa8455b98831a18e
3 | folderAsset: yes
4 | timeCreated: 1448945203
5 | licenseType: Free
6 | DefaultImporter:
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 |
--------------------------------------------------------------------------------
/Assets/Scripts/Constants.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 800ea0f19bd2f402b9fa9e25508820f6
3 | folderAsset: yes
4 | timeCreated: 1448848658
5 | licenseType: Free
6 | DefaultImporter:
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 |
--------------------------------------------------------------------------------
/Assets/Scripts/Constants/DefineValue.cs:
--------------------------------------------------------------------------------
1 | ///
2 | /// Symbolに対応した値を定数で管理するクラス
3 | ///
4 | public static class DefineValue{
5 |
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/Assets/Scripts/Constants/DefineValue.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: eb9800d0c012a4fe8a4e3cbf10c0ba01
3 | timeCreated: 1448848658
4 | licenseType: Free
5 | MonoImporter:
6 | serializedVersion: 2
7 | defaultReferences: []
8 | executionOrder: 0
9 | icon: {instanceID: 0}
10 | userData:
11 | assetBundleName:
12 | assetBundleVariant:
13 |
--------------------------------------------------------------------------------
/Assets/Untitled.unity:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/Assets/Untitled.unity
--------------------------------------------------------------------------------
/Assets/Untitled.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0cccaee6baf254a4894f5c6bb283d127
3 | timeCreated: 1448945206
4 | licenseType: Free
5 | DefaultImporter:
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Kan Kikuchi
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/ProjectSettings/AudioManager.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/AudioManager.asset
--------------------------------------------------------------------------------
/ProjectSettings/DynamicsManager.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/DynamicsManager.asset
--------------------------------------------------------------------------------
/ProjectSettings/EditorBuildSettings.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/EditorBuildSettings.asset
--------------------------------------------------------------------------------
/ProjectSettings/EditorSettings.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/EditorSettings.asset
--------------------------------------------------------------------------------
/ProjectSettings/GraphicsSettings.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/GraphicsSettings.asset
--------------------------------------------------------------------------------
/ProjectSettings/InputManager.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/InputManager.asset
--------------------------------------------------------------------------------
/ProjectSettings/NavMeshAreas.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/NavMeshAreas.asset
--------------------------------------------------------------------------------
/ProjectSettings/NetworkManager.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/NetworkManager.asset
--------------------------------------------------------------------------------
/ProjectSettings/Physics2DSettings.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/Physics2DSettings.asset
--------------------------------------------------------------------------------
/ProjectSettings/ProjectSettings.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/ProjectSettings.asset
--------------------------------------------------------------------------------
/ProjectSettings/ProjectVersion.txt:
--------------------------------------------------------------------------------
1 | m_EditorVersion: 5.2.2f1
2 | m_StandardAssetsVersion: 0
3 |
--------------------------------------------------------------------------------
/ProjectSettings/QualitySettings.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/QualitySettings.asset
--------------------------------------------------------------------------------
/ProjectSettings/TagManager.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/TagManager.asset
--------------------------------------------------------------------------------
/ProjectSettings/TimeManager.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/TimeManager.asset
--------------------------------------------------------------------------------
/ProjectSettings/UnityAdsSettings.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/UnityAdsSettings.asset
--------------------------------------------------------------------------------
/ProjectSettings/UnityAnalyticsManager.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kankikuchi/ScriptingDefineSymbolsEditor/bfa80c97c5d54b0b21fb27abdd7ef04dd980d21c/ProjectSettings/UnityAnalyticsManager.asset
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | UnityのScripting Define Symbolsを使いやすくするエディタ拡張。
2 |
3 |
4 | 使用例(YouTube)
5 | [](https://www.youtube.com/watch?v=PKWK7rxI9ds)
6 |
7 |
8 | これを使うと以下のよう事が可能になります。
9 |
10 | - シンボルの確認、作成、削除、編集が簡単に
11 | - シンボルを消さずに有効、無効の切り替え
12 | - なんのシンボルか説明が書けるように
13 | - 全プラットフォーム一括設定(個別も可)
14 | - defineによる定数宣言の代替(主にデバッグ用)
15 |
16 |
17 | 以下、導入&解説記事
18 |
19 | [Scripting Define Symbolsを劇的に使いやすくするエディタ拡張【Unity】【エディタ拡張】](http://kan-kikuchi.hatenablog.com/entry/ScriptingDefineSymbolsEditor)
20 |
21 |
22 | This software is released under the MIT License, see LICENSE.txt.
--------------------------------------------------------------------------------