回答編集履歴

6

文章の修正

2021/08/06 07:20

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -118,4 +118,4 @@
118
118
 
119
119
 
120
120
 
121
- ドキュメントそう記載されているのですから、Unity の設計思想に合わないということはないかと思います。
121
+ ですから、ScriptableObject を保持することが Unity の設計思想に合わないということはないかと思います。

5

文章の修正

2021/08/06 07:19

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -1,4 +1,4 @@
1
- そもそも Scriptable Object を使う目的が何であるかに戻りましょうか。
1
+ そもそも ScriptableObject を使う目的が何であるかに戻りましょうか。
2
2
 
3
3
  [ScriptableObject](https://docs.unity3d.com/ja/2018.4/Manual/class-ScriptableObject.html) には下記のような記載があります。
4
4
 
@@ -108,7 +108,7 @@
108
108
 
109
109
 
110
110
 
111
- 以上を考慮すると2番を使うのが理に適っていて、ソースコードもシンプルになり良いことしかないと思います。
111
+ 以上を考慮すると2番を使うのが理に適っていて、ソースコードもシンプルになり良いことしかないと思います。
112
112
 
113
113
 
114
114
 

4

文章の修正

2021/08/06 07:18

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- 2番の方法はオブジェクトを渡しているため値ではなく status の参照のみをコピーを渡しています。
49
+ 2番の方法はオブジェクトを渡しているため値ではなく status の参照(status が持つ値に割り当てられているメモリアドレス情報)のみをコピーを渡しています。
50
50
 
51
51
 
52
52
 

3

文章の修正

2021/08/06 07:15

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -13,6 +13,8 @@
13
13
 
14
14
 
15
15
  1番の方法は getFieldDict で Dictionary を生成して、各 CharacterData のフィールドをそこに追加していると思いますが、その時点で下記ソースコードのように値に対してコピーをしていると思います。
16
+
17
+
16
18
 
17
19
  ```C#
18
20
 
@@ -40,6 +42,8 @@
40
42
 
41
43
 
42
44
 
45
+ これでは値のコピーによるメモリ消費が発生しているため、ScriptableObject の目的が果たされていません。
46
+
43
47
 
44
48
 
45
49
  2番の方法はオブジェクトを渡しているため値ではなく status の参照のみをコピーを渡しています。
@@ -60,9 +64,11 @@
60
64
 
61
65
 
62
66
 
67
+ これは値のコピーを行っていないので、ScriptObject の目的に沿っています。
63
68
 
64
69
 
70
+
65
- また、2番の方法の派生として下記のような書き方も考えつくかとは思いますが、これも値のコピーが行われるので、やはり良くありせん
71
+ また、2番の方法の派生として下記のような書き方も考えつくかとは思いますが、これも値のコピーが行われま
66
72
 
67
73
 
68
74
 

2

コード修正

2021/08/06 07:07

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  ```C#
18
18
 
19
- public Dictionary<string,T> getFieldDict() {
19
+ public Dictionary<string,T> getFieldDict() {
20
20
 
21
21
  var field_dict = new Dictionary<string,T>();
22
22
 
@@ -34,7 +34,7 @@
34
34
 
35
35
  return field_dict;
36
36
 
37
- }
37
+ }
38
38
 
39
39
  ```
40
40
 

1

文章の修正

2021/08/06 07:05

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -12,7 +12,33 @@
12
12
 
13
13
 
14
14
 
15
- 1番の方法は getFieldDict で Dictionary を生成して、各 CharacterData のフィールドをそこに追加していると思いますが、の時点で値に対してコピーをしています。
15
+ 1番の方法は getFieldDict で Dictionary を生成して、各 CharacterData のフィールドをそこに追加していると思いますが、の時点で下記ソースコードのように値に対してコピーをしていると思います。
16
+
17
+ ```C#
18
+
19
+ public Dictionary<string,T> getFieldDict() {
20
+
21
+ var field_dict = new Dictionary<string,T>();
22
+
23
+ field_dict.Add("name", name);
24
+
25
+ // ここで値のコピーが行われている
26
+
27
+ field_dict.Add("max_hp ", max_hp );
28
+
29
+ field_dict.Add("max_mp ", max_mp );
30
+
31
+ field_dict.Add("atk", atk);
32
+
33
+ field_dict.Add("def", def);
34
+
35
+ return field_dict;
36
+
37
+ }
38
+
39
+ ```
40
+
41
+
16
42
 
17
43
 
18
44