質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1194閲覧

unityで2Dのちびキャラをできるだけ大量にだして動かしたいです

kanii

総合スコア12

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

1グッド

1クリップ

投稿2019/05/29 13:46

編集2019/05/30 13:26

前提・実現したいこと

unityで2Dのちびキャラをできるだけ大量にだして動かしたいです。
数とキャラの挙動は「ぱちゅコン」というゲームをイメージしています。

●ぱちゅコン参考動画

発生している問題

現在unityで作業しており、自軍500、敵軍500くらいで処理落ちしてしまいます。
(処理落ちを除けば正常に動いてはいます)
ぱちゅコンだと1000は優に出せているのでそこを目指したいです。
可能であれば1万、欲を言えば100万くらい出してみたいです。

試したこと

キャラプレハブを作成し、instansiate関数で増殖させています。
インスタンスごとに近くの敵位置をfindで検索するような処理をさせています。
findが重いことが散見されたので、一度その処理を外して描画してみましたが変わらず処理落ちしてしまいました。

教えていただきたいこと

◆どうすればぱちゅコンのような大量のユニット制御が実現できるのでしょうか?
gameobjectが重い処理だということなので、自力でクラスを作成すればよいのでしょうか。
unity上で再現が不可能なのであればエンジンを変えることも視野に入れています。
ただ最近Ultimate Epic Battle Simulatorというゲームがunityで作られているにもかかわらず、3Dキャラで10万体描画できる(さすがに多少処理落ちしますが)ので私のやり方に問題があると思っています…。

●Ultimate Epic Battle Simulator参考動画

◆ぱちゅコンくらいのキャラが出るゲームはスマホ上でも動作しますでしょうか?
完成した暁にはスマホアプリでリリースしたいと思っていますが、処理負荷的にいかがなものでしょうか。
無理そうであればpcゲームとして開発しなおそうと考えています。

もし現開発状況のソースコードやスクリーンショットが必要なようでしたら、随時共有いたします。
大変恐れ入りますが、アドバイスをいただけますと大変助かります。ご教授の程どうぞよろしくお願い致します。

●追記:unityPlofilerのスクリーンショット
●追記:キャラプレハブの構造

Ajai👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2019/05/30 00:38

処理落ちの原因はどこにあるのか、を先に調べるべきかと思います。 「unity Profiler 使い方」などで検索すると、プロファイラーの使い方が出ますので、原因がCPUなのかGPUなのか、具体的にはどの部分なのかが分かると思います。 私はまだ使っていない&例に上がっているシステムがそうかは分からないのですが「Job System(ECS)」や「GPUインスタンシング」が大量オブジェクト生成の負荷軽減になるかと思いますので、調べてみるとよいかもしれません。
kanii

2019/05/30 13:25

ご返答いただきありがとうございます。 質問の末尾にplofilerとキャラプレハブ構造のスクリーンショットを追加しましたので、よろしければご覧ください。 明らかにphysicsが重いですね。。。大量のユニットの衝突判定についてもう少し軽い処理方法がないか考えてみます。 「Job System(ECS)」「GPUインスタンシング」のご紹介もありがとうございます。 調べてみます!
guest

回答2

0

純粋な回答にはなりませんが、数が増えるごとにキャラクターの処理系統をまとめてしまってはどうでしょう?

おそらく処理落ちの原因はキャラクターのAIにあると思いますので、100匹出たら10匹ごとの集団を作り、集団を制御する、などというのはどうでしょうか。

ぱちゅこんの動画を見てみても、いくつかのキャラがまとまって移動しているので、グループを作って軽量化を図っていると思います。

Ultimate Epic Battle Simulatorでは数が多すぎてどう動いているのかは視覚的にはわかりませんが...^^7
最大数が増えれば増えるほど集団のメンバーが増えるようにすれば、100万も現実的かもしれません。

単数のAIとグループのAIを作り、なるべく単数が少なくなるようにチーム分けをし、
処理資源をキャラの制御以外に回すように書けばいいと思います。

スマホゲームだと、あまり処理性能は期待できないのではないでしょうか?
2Dということで、GPU性能は低くてもいいかもしれませんが、CPUがネックかと思います。

出現最大数やキャラのAI等を調整(グループにする数を増やし、少しアホにする等)すればスマホでも動くでしょう。

また、操作しやすいように命令用のメソッドも書くのもいいかもしれませんね。
Ultimate Epic Battle Simulatorのように、爆発から逃げさせるだとか、R軍とB軍を戦わせるだとか、特定のタグのキャラを襲わせることなどが簡単にできるようになるでしょう。

###簡潔にまとめると
キャラを一つ一つ操作すればその分CPUに対する負荷が高くなるので、
キャラの最大数に合わせてグループを作り、グループ用のAIで動作させる。

投稿2019/05/29 14:05

編集2019/05/29 14:07
Ajai

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kanii

2019/05/30 13:15

ご回答いただきありがとうございます! 個別AIから集団AIへの変更を試してみたいと思います! 集団AIを採用した場合でも、ぱちゅコンですと1ユニットごとに衝突判定や個別の座標、移動、攻撃のタイミグを持っているようなので、負荷を抑えた個別AIと集団AIの仕組みを考える必要がありそうです。 命令メソッドもユニット表示の負荷が解決出来たら試してみたいと思います! またunityのplofilerで負荷について詳しい情報を追記しましたので、よろしければご意見いただけますとありがたいです…!
Ajai

2019/05/30 16:01 編集

負荷については、スクリプトが処理落ちの要因の一つでしょう。 本回答でも申し上げた通り、キャラ一つ一つの処理が大量にあるせいでCPU使用率が跳ね上がっています。 一つ提案ですが、オブジェクトプールを作ってはどうでしょうか。 initializeの時点で使用分のオブジェクトプールを作成することで、生成の負荷を低減させるものです。 以下参考リンクです。 ・https://unity3d.com/jp/learn/tutorials/topics/scripting/object-pooling
kanii

2019/06/03 04:48

ありがとうございます。 オブジェクトプールも今後実装したいと思います!
guest

0

自己解決

plofilerで処理負荷のかかっている箇所を修正することで負荷を抑えることができました。
ご回答くださった皆さん、ありがとうございました!

投稿2019/06/03 04:48

kanii

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問