問題の概要
defineを定義し、Conditionalを使用したのに何故か関数が呼ばれないぞ???
といった事件に出会しました。
こんな感じ
#define Debug_AAA
public class AAA
{
public AAA()
{
new BBB().Method_DebugAAA();
new BBB().Method_DebugBBB();
}
}
#define Debug_BBB
using System.Diagnostics;
public class BBB
{
[Conditional ("Debug_AAA")]
public void Method_DebugAAA()
{
UnityEngine.Debug.Log("AAAから呼び出したなら、ログが出るよ");
}
[Conditional ("Debug_BBB")]
public void Method_DebugBBB()
{
UnityEngine.Debug.Log("AAAから呼び出した時は、ログが出ないよ");
}
}
(Unityで作業してたので、ログ出力がUnity仕様なのは堪忍でござる)
どゆこと?
どうやら、Conditional属性はスクリプト内のdefineではなく、呼び出し元のdefineを参照してるらしい。
(リファレンス読んでない人並みの感想)
そもそも、各々のスクリプトでdefineを設定してるのが良くないのかもしれませんね ^^;
最後に
defineを外(例えばUnityのScriptingDefineSymbols
等)で定義してて
下記のように使いたい時に困っちゃう...気が...
#if Debug_AAA || Debug_BBB
#define ORIGINAL_DEBUG
#endif
[Conditional ("ORIGINAL_DEBUG")]
public void OriginalDebugMethod(){}
とりあえず私のプロジェクトではdefineを整理することにしてみます。
場合によっては素直に#if
使うとかですかね。