回答編集履歴

3

対策追加

2016/06/14 05:28

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -47,3 +47,25 @@
47
47
  `GUI.color.a = 0.5f;`と書くと
48
48
 
49
49
  値型であるGUI.colorのコピーが返り、...ってことです。
50
+
51
+
52
+
53
+ ---
54
+
55
+
56
+
57
+ 対策としては参照型にするか、
58
+
59
+ 一旦コピーを受け取って、そのコピーを書き換えて、コピー元を置き換えます。
60
+
61
+
62
+
63
+ ```C#
64
+
65
+ var newHoge = hoges[0]; // 受け取って
66
+
67
+ newHoge.x = 2; // 書き換えて
68
+
69
+ hoges[0] = newHoge; // 置き換え
70
+
71
+ ```

2

補足

2016/06/14 05:28

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -29,3 +29,21 @@
29
29
  と意味ある操作になるので、エラーになりません。
30
30
 
31
31
 
32
+
33
+
34
+
35
+ ---
36
+
37
+
38
+
39
+ ちなみに
40
+
41
+ [Unity C# で GUIパーツのα値を設定する方法](http://qiita.com/shintaness/items/b001b26c9c6ebe505608)
42
+
43
+ も原因は一緒です。
44
+
45
+
46
+
47
+ `GUI.color.a = 0.5f;`と書くと
48
+
49
+ 値型であるGUI.colorのコピーが返り、...ってことです。

1

参照型について追記

2016/06/14 05:23

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -1,6 +1,6 @@
1
- Listの[]はインデクサと呼ばれる機能で、コピーが返ってくる
1
+ Listの[]はインデクサと呼ばれる機能で、コピーが返ってきます
2
2
 
3
- 従って、リストが値型を保持している時、
3
+ 従って、リストが値型(struct)を保持している時、
4
4
 
5
5
 
6
6
 
@@ -14,4 +14,18 @@
14
14
 
15
15
  は「リストの1番目の値をコピーして、そのコピーした値のフィールドを書き換える」
16
16
 
17
+ という何も意味のない操作
18
+
19
+ (元のリストが何も書き換わらず、書き換えた方も何もせず捨てている)
20
+
17
- という何も意味のない操作になるので、C#はこれをエラーに**してくれます**
21
+ になるので、C#はこれをエラーに**してくれます**
22
+
23
+
24
+
25
+ 参照型(class)を保持している場合は、
26
+
27
+ 「リストの1番目の参照値をコピーして、その参照先のフィールドを書き換える」
28
+
29
+ と意味ある操作になるので、エラーになりません。
30
+
31
+