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

質問編集履歴

14

2020/12/31 14:32

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -67,5 +67,7 @@
67
67
  ManagedHeapが大きいのでそもそもコードに問題がある可能性が大きいです。
68
68
  しばらく色々と軽量化してみます……。
69
69
 
70
+
71
+
70
72
  フレームレートが落ちている際もcpu、gpuの使用率は共に20%を上回らないようです。
71
73
  パソコンの設定のせいなのかこれでは本当の負荷が測れていない可能性がありそうな気がする。

13

2020/12/31 14:32

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -65,4 +65,7 @@
65
65
  最初のやり方の際には正直マップが小さかったです。
66
66
  そのことを加味していなかったせいか改めて試すとこちらでもメモリ使用量が大きいです。
67
67
  ManagedHeapが大きいのでそもそもコードに問題がある可能性が大きいです。
68
- しばらく色々と軽量化してみます……。
68
+ しばらく色々と軽量化してみます……。
69
+
70
+ フレームレートが落ちている際もcpu、gpuの使用率は共に20%を上回らないようです。
71
+ パソコンの設定のせいなのかこれでは本当の負荷が測れていない可能性がありそうな気がする。

12

2020/12/31 14:31

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -51,4 +51,18 @@
51
51
 
52
52
  インスタンス化ではフレームレートが低下し入力が遅延するなどゲームプレイを阻害し、メモリ使用量もかなり増えていた。
53
53
  しかし前のマップを消すとメモリ使用量は改善されたが前に試した方法に比べて劇的に改善されているかというとそんなことはなかった。
54
- オブジェクトプールについても検証してみる。
54
+ オブジェクトプールについても検証してみる。
55
+
56
+
57
+
58
+ オブジェクトプールの方針で試してみましたが、こちらは非常にメモリ使用量が高くなりました。
59
+ フレームレートは安定して入力遅延は抑えられたものの良くない方法だと結論づけざるを得ないように感じます。
60
+
61
+ 結果として最初のやり方が一番安定しているように思いました。
62
+
63
+
64
+
65
+ 最初のやり方の際には正直マップが小さかったです。
66
+ そのことを加味していなかったせいか改めて試すとこちらでもメモリ使用量が大きいです。
67
+ ManagedHeapが大きいのでそもそもコードに問題がある可能性が大きいです。
68
+ しばらく色々と軽量化してみます……。

11

2020/12/31 14:04

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
File without changes

10

2020/12/31 13:10

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -45,4 +45,10 @@
45
45
  ### さらに追記
46
46
 
47
47
  マップそのものをプレハブ化して呼び出すアプローチを試してみる。
48
- 呼び出す際もインスタント化とオブジェクトプールの2つを試してみる。
48
+ 呼び出す際もインスタント化とオブジェクトプールの2つを試してみる。
49
+
50
+
51
+
52
+ インスタンス化ではフレームレートが低下し入力が遅延するなどゲームプレイを阻害し、メモリ使用量もかなり増えていた。
53
+ しかし前のマップを消すとメモリ使用量は改善されたが前に試した方法に比べて劇的に改善されているかというとそんなことはなかった。
54
+ オブジェクトプールについても検証してみる。

9

2020/12/31 13:10

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -44,4 +44,5 @@
44
44
 
45
45
  ### さらに追記
46
46
 
47
- マップそのものをプレハブ化して呼び出すアプローチを試してみる。
47
+ マップそのものをプレハブ化して呼び出すアプローチを試してみる。
48
+ 呼び出す際もインスタント化とオブジェクトプールの2つを試してみる。

8

2020/12/31 13:00

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -39,4 +39,9 @@
39
39
  上記記事の記述によると最適化されるようなので今のところ使うつもりです。
40
40
 
41
41
  そして上の仕様でプロファイラーを注視しつつ作っていきますがアドバイスがあればぜひとも教えて下さい。
42
- よろしくお願いします。
42
+ よろしくお願いします。
43
+
44
+
45
+ ### さらに追記
46
+
47
+ マップそのものをプレハブ化して呼び出すアプローチを試してみる。

7

2020/12/31 12:59

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
File without changes

6

2020/12/30 21:34

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -9,8 +9,8 @@
9
9
 
10
10
  ・まずゲーム全体を一つの大きなシーンにする。
11
11
 
12
- マップが5つとするなら5つはそれぞれマップにつき一つのTileMapオブジェクトと環境物、敵、ギミックなどで占められていると仮定する。
12
+ ステージが5つとするなら5つはそれぞれマップにつき一つのTileMapオブジェクトと環境物、敵、ギミックなどで占められていると仮定する。
13
- ・それに加えてそれぞれのマップをつなぐ通路的な小さなマップを用意する。
13
+ ・それに加えてそれぞれのマップをつなぐ通路的な小さな空間を用意する。
14
14
  ・普段は現在いる一つのマップ以外の4つのオブジェクトは非アクティブにしておく。
15
15
  ・マップの切れ目近くで次のマップのテクスチャなどのデータを非同期でロードし、マップに侵入する通路で次のマップのオブジェクトを全て一斉に(一部ずつにしたほうがいいでしょうか?)アクティブにする。
16
16
  ・次のマップに入れば通路を除く前のマップは非アクティブにしてデータもアンロードする。

5

2020/12/30 21:34

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -34,7 +34,9 @@
34
34
  というのを加えてみることにしました。
35
35
  色々と調べましたが正直あまり定まらず、僕が好きな2Dゲームでは(シームレスです)シーン移動のようなものはなく、あるマップのはしから落ちると別のマップの地面に叩きつけられるようなこともあったので一つのシーンにマップを集めていいのではないかと思い至った次第です。
36
36
  それからUse By Compositeを使うかどうか悩んでいます。
37
- デフォルトのタイルマップコライダーを無効化してコンポジットコライダーを利用するプロパティのようですがコンポジットがタイルマップコライダーよりも軽さが優れているというような記述は見受けられませんでした。
37
+ デフォルトのタイルマップコライダーを無効化してコンポジットコライダーを利用するプロパティのようですが
38
+ [2D タイルマップアセットワークフロー](https://blogs.unity3d.com/jp/2018/01/25/2d-tilemap-asset-workflow-from-image-to-level/)
38
- りあえず使わずにやってみます。
39
+ 上記記事の記述による最適化されるようなので今のところ使うつもりです。
40
+
39
- そして上の仕様でプロファイラーを注視しつつ作っていきますがアドバイスがあればぜひとも教えて下さい。
41
+ そして上の仕様でプロファイラーを注視しつつ作っていきますがアドバイスがあればぜひとも教えて下さい。
40
42
  よろしくお願いします。

4

誤字修正

2020/12/30 18:55

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -12,7 +12,7 @@
12
12
  ・マップが5つとするなら5つはそれぞれマップにつき一つのTileMapオブジェクトと環境物、敵、ギミックなどで占められていると仮定する。
13
13
  ・それに加えてそれぞれのマップをつなぐ通路的な小さなマップを用意する。
14
14
  ・普段は現在いる一つのマップ以外の4つのオブジェクトは非アクティブにしておく。
15
- ・マップの切れ目近くで次のマップのテクスチャなどのデータをロードし、マップに侵入する通路で次のマップのオブジェクトを全て一斉に(一部ずつにしたほうがいいでしょうか?)アクティブにする。
15
+ ・マップの切れ目近くで次のマップのテクスチャなどのデータを非同期でロードし、マップに侵入する通路で次のマップのオブジェクトを全て一斉に(一部ずつにしたほうがいいでしょうか?)アクティブにする。
16
16
  ・次のマップに入れば通路を除く前のマップは非アクティブにしてデータもアンロードする。
17
17
  ・敵のステータスに所属マップを加えて休憩ポイントで休憩した際とファストトラベルした際に蘇る敵を管理する。
18
18
  ・ギミックと敵はプレイヤーの近くに来るまで機能を停止していて、ある程度離れるとまた機能停止する。しかし初期位置?元の持ち場?というか縄張りを離れていた場合戻るまでは敵キャラは動く。(startメソッドで初期位置を記録する)
@@ -22,4 +22,19 @@
22
22
  メモリ管理に自分なりに気を遣った結果ですが、至らぬ点、あるいは根本の方向性からして間違っているということがあればご指摘いただければ幸いです。
23
23
  また足りない情報などあればお手数ですがご指摘くださいませ。
24
24
 
25
- どうぞよろしくお願いいたします。
25
+ どうぞよろしくお願いいたします。
26
+
27
+ ### 追記
28
+
29
+ 手前で色々と調べた結果、上の仕様に加えて
30
+
31
+ ・マップをアクティブにした際環境物やエネミーなどのオブジェクトはコンポーネントのenableを切った状態にして呼び出す。
32
+ そして近くに入ったらenableをtrueにする。(この際スプライトレンダラーの方はそもそもカメラに入っていない場合は切らなくていいですか?)
33
+
34
+ というのを加えてみることにしました。
35
+ 色々と調べましたが正直あまり定まらず、僕が好きな2Dゲームでは(シームレスです)シーン移動のようなものはなく、あるマップのはしから落ちると別のマップの地面に叩きつけられるようなこともあったので一つのシーンにマップを集めていいのではないかと思い至った次第です。
36
+ それからUse By Compositeを使うかどうか悩んでいます。
37
+ デフォルトのタイルマップコライダーを無効化してコンポジットコライダーを利用するプロパティのようですがコンポジットがタイルマップコライダーよりも軽さが優れているというような記述は見受けられませんでした。
38
+ とりあえず使わずにやってみます。
39
+ そして上記の仕様でプロファイラーを注視しつつ作っていきますがアドバイスがあればぜひとも教えて下さい。
40
+ よろしくお願いします。

3

2020/12/30 18:15

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  Unity2Dでダークソウルのようなファストトラベル付きのシームレスマップを実装したい。
4
4
  現在予定している仕様については以下で詳細を述べます。
5
5
  しかしこの仕様に添って提案・アドバイスを行う必要は全くなく、他によい実装があればどうかご教授くださいませ。
6
- 叩き台として使えそうなら加筆、修正のほどよろしくお願いいたします。
6
+ よろしくお願いいたします。
7
7
 
8
8
  ### 現在考えている仕様
9
9
 

2

2020/12/30 09:58

投稿

cushionA
cushionA

スコア90

title CHANGED
@@ -1,1 +1,1 @@
1
- Unity2Dでシームレスマップを実装する方法
1
+ Unity2Dでシームレスマップを実装する方法について
body CHANGED
@@ -20,5 +20,6 @@
20
20
 
21
21
  というようなやり方でシームレスマップと敵キャラを管理したいと思うのですがいかがでしょうか?
22
22
  メモリ管理に自分なりに気を遣った結果ですが、至らぬ点、あるいは根本の方向性からして間違っているということがあればご指摘いただければ幸いです。
23
+ また足りない情報などあればお手数ですがご指摘くださいませ。
23
24
 
24
25
  どうぞよろしくお願いいたします。

1

加筆修正

2020/12/30 08:57

投稿

cushionA
cushionA

スコア90

title CHANGED
File without changes
body CHANGED
@@ -12,7 +12,7 @@
12
12
  ・マップが5つとするなら5つはそれぞれマップにつき一つのTileMapオブジェクトと環境物、敵、ギミックなどで占められていると仮定する。
13
13
  ・それに加えてそれぞれのマップをつなぐ通路的な小さなマップを用意する。
14
14
  ・普段は現在いる一つのマップ以外の4つのオブジェクトは非アクティブにしておく。
15
- ・マップの切れ目近くで次のマップのテクスチャなどのデータをロードし、マップに侵入する通路で次のマップをアクティブにする。
15
+ ・マップの切れ目近くで次のマップのテクスチャなどのデータをロードし、マップに侵入する通路で次のマップのオブジェクト全て一斉に(一部ずつにしたほうがいいでしょうか?)アクティブにする。
16
16
  ・次のマップに入れば通路を除く前のマップは非アクティブにしてデータもアンロードする。
17
17
  ・敵のステータスに所属マップを加えて休憩ポイントで休憩した際とファストトラベルした際に蘇る敵を管理する。
18
18
  ・ギミックと敵はプレイヤーの近くに来るまで機能を停止していて、ある程度離れるとまた機能停止する。しかし初期位置?元の持ち場?というか縄張りを離れていた場合戻るまでは敵キャラは動く。(startメソッドで初期位置を記録する)