Unityを使用しており、シンボルの定義についてわからないことがあるので質問です。
まず、やりたいことはUnityで定義されているシンボルを#ifで判定し、定義されていたら追加で独自のシンボルを定義することです。
C#
1#if UNITY_EDITOR 2#define MY_DEFINE 3#endif 4 5using UnityEngine; 6using System.Diagnostics; 7 8class Foo : MonoBehaviour 9{ 10 private void Start() 11 { 12 FooOutput(); 13 } 14 15 [Conditional("MY_DEFINE")] 16 private void FooOutput() 17 { 18 UnityEngine.Debug.Log("Foo"); 19 } 20}
以上でFooが出力されてくれれば良いのですが、コンソールには出力されません。
そこで、他のファイルに冒頭の三行を書き、二箇所で判定を行ったところ、Fooがコンソールに出力されるようになりました。
以下が再現を行えるファイルになります。
Foo.cs
C#
1#if UNITY_EDITOR 2#define MY_DEFINE 3#endif 4 5using UnityEngine; 6using System.Diagnostics; 7 8class Foo : MonoBehaviour 9{ 10 private void Start() 11 { 12 FooOutput(); 13 } 14 15 [Conditional("MY_DEFINE")] 16 private void FooOutput() 17 { 18 UnityEngine.Debug.Log("Foo"); 19 } 20}
Hoge.cs
C#
1#if UNITY_EDITOR 2#define MY_DEFINE 3#endif 4 5using UnityEngine; 6 7class Hoge : MonoBehaviour 8{ 9 private void Start() 10 { 11 12 } 13}
以上の二つのファイルを、シーンに配置されている空のゲームオブジェクトに両方共アタッチし、実行するとなぜかコンソールにFooが出力されます。
これが特に理解不能で、この時一箇所での判定だけではFooが出力されず、二箇所でなら出力される理由を御存知の方は回答いただけると助かります。
なお、Conditionalではなく、#if-endifでメソッドの呼び出しを区切った場合、打って変わってコンソールにFooが出力されます。
以下が#if-elseで区切ったケースになります。
C#
1#if UNITY_EDITOR 2#define MY_DEFINE 3#endif 4 5using UnityEngine; 6 7class Foo : MonoBehaviour 8{ 9 private void Start() 10 { 11 #if MY_DEGINE 12 FooOutput(); 13 #endif 14 } 15 16 private void FooOutput() 17 { 18 Debug.Log("Foo"); 19 } 20}
以上、ご存知の方いましたら、何卒よろしくお願いします。
●実行環境
Windows10
Unity 5.6.2f1
VisualStudio2017
####2017/08/01:質問文の不備に関して修正、追記
●実行環境を追記しました
●コードの記述ミスを修正
●二箇所で判定を行う件について、検証したファイルを記述していなかったので追記
●Conditionalではなく#if-endifで検証したコードを追記
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/01 13:50
2017/08/02 22:09
2017/08/03 14:37