質問編集履歴

12

2021/01/29 08:43

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -143,3 +143,13 @@
143
143
  **補足情報(FW/ツールのバージョンなど)**
144
144
 
145
145
  Unity 2019 3,7f1
146
+
147
+
148
+
149
+
150
+
151
+ 追記
152
+
153
+ AddressablesでAddressables.InstantiateAsync().Resultで生成したオブジェクトを渡すことができるようです。
154
+
155
+ 大変失礼しました。

11

コードの間違いを訂正

2021/01/29 08:43

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -126,7 +126,9 @@
126
126
 
127
127
 
128
128
 
129
+ (また、本筋とは違いますし本当に図々しいのですが、一つ気になることがあります。
130
+
129
- (また、本筋とは違いますし本当に図々しいのですが、プロファイラのメモリ使用量の変動を見ていてたまにGCが起きていることに気が付きました。
131
+ プロファイラのメモリ使用量の変動を見ていてたまにGCが起きていることに気が付きました。
130
132
 
131
133
  何故ならメモリの線グラフが増えては減るジグザグになり、Monoの使用量が2MBほど増えて減るのを繰り返していたからです。
132
134
 

10

誤字。

2020/08/30 04:11

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -135,3 +135,9 @@
135
135
  一応LINQの削除やコレクションの使いまわしなどはできうる限りで行っています。
136
136
 
137
137
  どうかこちらも気が向きましたらご教授くださいませ)
138
+
139
+
140
+
141
+ **補足情報(FW/ツールのバージョンなど)**
142
+
143
+ Unity 2019 3,7f1

9

2020/08/29 14:04

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  こんにちは。
8
8
 
9
- 少し長くなりますが質問の方読んでいただければ幸いです。
9
+ 少し長くなりますが質問の方に目を通していただければ幸いです。
10
10
 
11
11
 
12
12
 
@@ -16,13 +16,13 @@
16
16
 
17
17
 
18
18
 
19
- 今のところテスト用の火の玉を飛ばす魔法をAddressables.InstantiateAsyncとAddressables.ReleasePrefabをインスタンス化して使っています
19
+ 今のところテスト用の火の玉を飛ばす魔法をAddressables.InstantiateAsyncとAddressables.Release、それからPrefabを使って実装しています
20
20
 
21
21
  しかしインスタンス化とDestroy(僕はReleaseを使っていますが)はとても重いとのことなのでオブジェクトプールという手法について調べてみました。
22
22
 
23
23
 
24
24
 
25
- しかしオブジェクトプールの解説での例はいずれも弾幕ゲームのように二十、三十と弾丸を撒き散らすようなゲームを想定しており、さらに下記のページのようにオブジェクトプールを行わない方が効率的な場合もあると言及しているサイトもありました。
25
+ ですがオブジェクトプールの解説での例はいずれも弾幕ゲームのように二十、三十と弾丸を撒き散らすようなゲームを想定しており、さらに下記のページのようにオブジェクトプールを行わない方が効率的な場合もあると言及しているサイトもありました。
26
26
 
27
27
 
28
28
 

8

書式改善

2020/08/28 13:43

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -132,6 +132,6 @@
132
132
 
133
133
  ゲームプログラミングなら最初に全てのメモリを確保しておくのが望ましいかと思われますが、このようなジグザグになるコードは修正した方がよいでしょうか?
134
134
 
135
- 一応LINQの削除やコレクションの使いまわしなどは行っています。
135
+ 一応LINQの削除やコレクションの使いまわしなどはできうる限りで行っています。
136
136
 
137
137
  どうかこちらも気が向きましたらご教授くださいませ)

7

誤字修正

2020/08/28 11:52

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
 
63
- オブジェクトプールとはどのくらいの規模で最適となるのか諸先輩方のアドバイスをいただければ幸いです。
63
+ 一応下で今回はどちらがいいのかの検証をしてみますが、オブジェクトプールとはどのくらいの規模で最適となるのか諸先輩方のアドバイスをいただければ幸いです。
64
64
 
65
65
 
66
66
 

6

コードの間違いを訂正

2020/08/28 11:44

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -68,6 +68,70 @@
68
68
 
69
69
 
70
70
 
71
- 追記:現在両者の負荷をプロファイラーで比較すべく準備中。
72
71
 
72
+
73
+ **検証結果**
74
+
75
+
76
+
77
+ オブジェクトプールはこちらのサイトのコードを使用して実装しました。
78
+
79
+
80
+
81
+ [Akira_Kido_N様の 「Unityで簡単☆オブジェクトプール」](https://qiita.com/Akira_Kido_N/items/b5fa0c1ef324e57b0c28)
82
+
83
+
84
+
85
+ そしてこちらのメソッドはAddressables.InstantiateAsyncで生成したオブジェクトはプールできなかったのでInstantiateメソッドを使用したことを記しておきます。
86
+
87
+ また、プールの最大量は五個にしました。
88
+
89
+ 実験の条件はプールする場合としない場合で断続的に五個ずつの火の玉を飛ばしてメモリの平均使用量と最高使用量を比較しました。
90
+
91
+
92
+
93
+
94
+
73
- しかしどのような場面で使うかのアドバイスやはりあると嬉しいのでよろくお願いいします
95
+ 肝心結果ですが、下記の画像のようにメモリ負荷プール側が勝っていました。
96
+
97
+
98
+
99
+ プールしてない方
100
+
101
+ ![プールせず](e5ed8c8681b3816b5133500a8ae6ddc7.png)
102
+
103
+
104
+
105
+ プールした方
106
+
107
+ ![プールした](f665a8284a41db182d4e60dcdd37c7e4.png)
108
+
109
+
110
+
111
+ 平均的に見てメモリ使用量は20MBほどプールしてない方が軽いです。
112
+
113
+
114
+
115
+ よって今回の場合はプールしない方がよさそうですが、もしなにか間違えていたら教えてください。
116
+
117
+ それから、プールを使用する場面について何かアドバイスがあれば教えてください。
118
+
119
+
120
+
121
+ この手の検証にはまだ不慣れなので、なにか結果の提示に不備がありましたらそちらもご指摘くださいませ。
122
+
123
+ よろしくお願いいたします。
124
+
125
+
126
+
127
+
128
+
129
+ (また、本筋とは違いますし本当に図々しいのですが、プロファイラのメモリ使用量の変動を見ていてたまにGCが起きていることに気が付きました。
130
+
131
+ 何故ならメモリの線グラフが増えては減るジグザグになり、Monoの使用量が2MBほど増えて減るのを繰り返していたからです。
132
+
133
+ ゲームプログラミングなら最初に全てのメモリを確保しておくのが望ましいかと思われますが、このようなジグザグになるコードは修正した方がよいでしょうか?
134
+
135
+ 一応LINQの削除やコレクションの使いまわしなどは行っています。
136
+
137
+ どうかこちらも気が向きましたらご教授くださいませ)

5

2020/08/28 11:43

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -65,3 +65,9 @@
65
65
 
66
66
 
67
67
  どうぞよろしくお願いいたします。
68
+
69
+
70
+
71
+ 追記:現在両者の負荷をプロファイラーで比較すべく準備中。
72
+
73
+ しかしどのような場面で使うのかのアドバイスはやはりあると嬉しいのでよろしくお願いいたします。

4

2020/08/28 10:53

投稿

cushionA
cushionA

スコア90

test CHANGED
@@ -1 +1 @@
1
- Unityオブジェクトプールについて
1
+ Unityオブジェクトプールを使用すべき状況について
test CHANGED
File without changes

3

2020/08/28 10:18

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  僕は現在2Dのアクションゲームを作っています。
14
14
 
15
- そして魔法を実装するにあたってオブジェクトプールについて調べていたところ疑問が湧いたので知恵をお借りさせていただこうと思い立った次第です。
15
+ そして魔法を実装するにあたってオブジェクトプールについて調べていたところ疑問が湧いたので知恵をお借りさせていただこうと思い立った次第です。
16
16
 
17
17
 
18
18
 

2

2020/08/28 09:21

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,15 @@
2
2
 
3
3
 
4
4
 
5
+
6
+
7
+ こんにちは。
8
+
9
+ 少し長くなりますが質問の方読んでいただければ幸いです。
10
+
11
+
12
+
5
- 現在2Dのアクションゲームを作っています。
13
+ 僕は現在2Dのアクションゲームを作っています。
6
14
 
7
15
  そして魔法を実装するにあたってオブジェクトプールについて調べていたところ疑問が湧いたので知恵をお借りさせていただこうと思い立った次第です。
8
16
 

1

2020/08/28 09:20

投稿

cushionA
cushionA

スコア90

test CHANGED
File without changes
test CHANGED
@@ -2,11 +2,13 @@
2
2
 
3
3
 
4
4
 
5
- 現在2Dのアクションゲームを作っていて、魔法を実装するにあたってオブジェクトプールについて調べています。
5
+ 現在2Dのアクションゲームを作っています。
6
+
7
+ そして魔法を実装するにあたってオブジェクトプールについて調べていたところ疑問が湧いたので知恵をお借りさせていただこうと思い立った次第です。
6
8
 
7
9
 
8
10
 
9
- 今のところテスト用の火の玉を飛ばす魔法をAddressables.InstantinateAsyncとAddressables.ReleaseでPrefabをインスタンス化して使っています。
11
+ 今のところテスト用の火の玉を飛ばす魔法をAddressables.InstantiateAsyncとAddressables.ReleaseでPrefabをインスタンス化して使っています。
10
12
 
11
13
  しかしインスタンス化とDestroy(僕はReleaseを使っていますが)はとても重いとのことなのでオブジェクトプールという手法について調べてみました。
12
14
 
@@ -22,7 +24,9 @@
22
24
 
23
25
  そこで質問なのですが、オブジェクトプールはどのような場面で使うのかをどうか教えていただきたいです。
24
26
 
25
- また、魔法に使うとしてオブジェクトプールを行うのは魔法装備後に装備してる魔法を検出してその魔法のオブジェクトをプールするような運用でいいのでしょうか?
27
+ また、魔法に使うとしてオブジェクトプールを行うのは魔法装備後に装備してる魔法を検出してその魔法のオブジェクトのみをプールするような運用でいいのでしょうか?
28
+
29
+ あらかじめすべての魔法のオブジェクトをプールすることはしない方がいいですか?
26
30
 
27
31
 
28
32
 
@@ -40,11 +44,11 @@
40
44
 
41
45
 
42
46
 
43
- このくらいでしょうか……
47
+ このくらいでしょうか。
44
48
 
45
49
  しかしこうなると逆にプールしない方がいいオブジェクトが分かりません。
46
50
 
47
- 一度壊すと復活しない隠し通路に繋がる壁とかでしょうか?
51
+ 一度壊すと復活しない隠し通路に繋がる壁とかボスとかでしょうか?
48
52
 
49
53
 
50
54