質問するログイン新規登録

質問編集履歴

4

Conditionalではなく#if-endifで試したケースを記述していなかったのを修正

2017/08/01 14:14

投稿

t_s
t_s

スコア50

title CHANGED
File without changes
body CHANGED
@@ -76,6 +76,34 @@
76
76
 
77
77
  これが特に理解不能で、この時一箇所での判定だけではFooが出力されず、二箇所でなら出力される理由を御存知の方は回答いただけると助かります。
78
78
 
79
+ なお、Conditionalではなく、#if-endifでメソッドの呼び出しを区切った場合、打って変わってコンソールにFooが出力されます。
80
+ 以下が#if-elseで区切ったケースになります。
81
+
82
+ ```C#
83
+ #if UNITY_EDITOR
84
+ #define MY_DEFINE
85
+ #endif
86
+
87
+ using UnityEngine;
88
+
89
+ class Foo : MonoBehaviour
90
+ {
91
+ private void Start()
92
+ {
93
+ #if MY_DEGINE
94
+ FooOutput();
95
+ #endif
96
+ }
97
+
98
+ private void FooOutput()
99
+ {
100
+ Debug.Log("Foo");
101
+ }
102
+ }
103
+ ```
104
+
105
+ 以上、ご存知の方いましたら、何卒よろしくお願いします。
106
+
79
107
  ●実行環境
80
108
  Windows10
81
109
  Unity 5.6.2f1
@@ -84,4 +112,5 @@
84
112
  ####2017/08/01:質問文の不備に関して修正、追記
85
113
  ●実行環境を追記しました
86
114
  ●コードの記述ミスを修正
87
- ●二箇所で判定を行う件について、検証したファイルを記述していなかったので追記
115
+ ●二箇所で判定を行う件について、検証したファイルを記述していなかったので追記
116
+ ●Conditionalではなく#if-endifで検証したコードを追記

3

質問内容の不備の修正

2017/08/01 14:14

投稿

t_s
t_s

スコア50

title CHANGED
File without changes
body CHANGED
@@ -10,9 +10,9 @@
10
10
  using UnityEngine;
11
11
  using System.Diagnostics;
12
12
 
13
- class Foo : MonoBihaviour
13
+ class Foo : MonoBehaviour
14
14
  {
15
- public Start()
15
+ private void Start()
16
16
  {
17
17
  FooOutput();
18
18
  }
@@ -20,7 +20,7 @@
20
20
  [Conditional("MY_DEFINE")]
21
21
  private void FooOutput()
22
22
  {
23
- Debug.Log("Foo");
23
+ UnityEngine.Debug.Log("Foo");
24
24
  }
25
25
  }
26
26
  ```
@@ -29,7 +29,59 @@
29
29
 
30
30
  そこで、他のファイルに冒頭の三行を書き、二箇所で判定を行ったところ、Fooがコンソールに出力されるようになりました。
31
31
 
32
- そこで、質問なのです、この時一箇所での判定だけではFooが出力されず、二箇所でなら出力される理由御存知の方は回答いただけと助かります。
32
+ 以下再現行えファイルになります。
33
33
 
34
+ `Foo.cs`
35
+ ```C#
36
+ #if UNITY_EDITOR
37
+ #define MY_DEFINE
38
+ #endif
39
+
40
+ using UnityEngine;
41
+ using System.Diagnostics;
42
+
43
+ class Foo : MonoBehaviour
44
+ {
45
+ private void Start()
46
+ {
47
+ FooOutput();
48
+ }
49
+
50
+ [Conditional("MY_DEFINE")]
51
+ private void FooOutput()
52
+ {
53
+ UnityEngine.Debug.Log("Foo");
54
+ }
55
+ }
56
+ ```
57
+
58
+ `Hoge.cs`
59
+ ```C#
60
+ #if UNITY_EDITOR
61
+ #define MY_DEFINE
62
+ #endif
63
+
64
+ using UnityEngine;
65
+
66
+ class Hoge : MonoBehaviour
67
+ {
68
+ private void Start()
69
+ {
70
+
71
+ }
72
+ }
73
+ ```
74
+
75
+ 以上の二つのファイルを、シーンに配置されている空のゲームオブジェクトに両方共アタッチし、実行するとなぜかコンソールにFooが出力されます。
76
+
34
- なんとなくC#は翻訳にファイルを二周読み込む仕様があった気がするのでそこら辺かな、と思いつつも調べきれずいます。
77
+ これが特に理解不能でこの一箇所で判定だけではFooが出力されず、二箇所でなら出力される理由を御存知の方は回答ただけると助かります。
78
+
79
+ ●実行環境
80
+ Windows10
81
+ Unity 5.6.2f1
82
+ VisualStudio2017
83
+
84
+ ####2017/08/01:質問文の不備に関して修正、追記
85
+ ●実行環境を追記しました
86
+ ●コードの記述ミスを修正
35
- プロC#erの方、らっゃいましら何卒ご教示お願います。
87
+ ●二箇所で判定を行う件につて、検証したファイルを記述ていなかったので追記

2

typo

2017/08/01 14:09

投稿

t_s
t_s

スコア50

title CHANGED
File without changes
body CHANGED
@@ -17,7 +17,7 @@
17
17
  FooOutput();
18
18
  }
19
19
 
20
- [Confitional("MY_DEFINE")]
20
+ [Conditional("MY_DEFINE")]
21
21
  private void FooOutput()
22
22
  {
23
23
  Debug.Log("Foo");

1

試行方法の記述を間違えたので修正しました

2017/07/31 17:06

投稿

t_s
t_s

スコア50

title CHANGED
File without changes
body CHANGED
@@ -8,14 +8,19 @@
8
8
  #endif
9
9
 
10
10
  using UnityEngine;
11
+ using System.Diagnostics;
11
12
 
12
13
  class Foo : MonoBihaviour
13
14
  {
14
15
  public Start()
15
16
  {
16
- #if MY_DEFINE
17
+ FooOutput();
18
+ }
19
+
20
+ [Confitional("MY_DEFINE")]
21
+ private void FooOutput()
22
+ {
17
23
  Debug.Log("Foo");
18
- #endif
19
24
  }
20
25
  }
21
26
  ```