Unity,ECSで宇宙艦隊を創設してみた

この記事は、NITKC Prolab Advent Calender 2019 の25日目の記事として書かれました

adventar.org

 

はじめに

皆さんこんにちは。虎太郎です。今年のプロラボアドベントカレンダーは、皆さんのおかげで3枚全て埋まりました。この場をお借りして御礼申し上げます。

 

さて今回は、25日目、プロラボアドベントカレンダーラストの記事です。そのためしょうもない記事で埋めてしまうのは申し訳ないなあと思っていたのですが、気づいてみたらもう前日まで来ていました。

 

というわけでどういうわけかわかりませんが、Unityの記事です。

 

今回は、いろいろな人がいろいろなことを言っている?Unityの最先端のDOTSに手を付けてみた記事です。

ECSをかじってみました。

 

参考文献

https://qiita.com/simplestar/items/17b0886be0170f79aa2e

https://qiita.com/orange_lily1127/items/77310e31e64485280377

https://qiita.com/pCYSl5EDgo/items/caac60ee41058cde085a

以上3つの記事はコピペさせて参考にさせていただきました。とても感謝しています。

 

利用したアセット

宇宙艦隊を作るためには宇宙船が必要です。以下のアセットを利用しました。

assetstore.unity.com

 

ECSを使ってみた理由

たくさんオブジェクト(Entity)が生成できると巷で耳にしたからです。

そこで思いついたのが、たくさん宇宙船を並べて宇宙艦隊を作ればいいのでは?

ということです。

 

ここまで至る理由が一つあって、余り言うとネタバレになるのですが、スター・ウォーズ9の予告編からも分かる通り、めっちゃたくさん宇宙船がスターウォーズ9には出てきます。

 

それを見たあとに思いついた感じですね。はい。

本文

 ECSの導入の下りは省きます。参考文献をご覧ください。

 

f:id:kotarosakata:20191224161248p:plain

ちなみにこれはEntity debuggerのサイズを変更しようとしたら強制終了を始めた可哀想なUnityの図です。

ECSがいまだ不安定である事実が見て取れます。

ちなみに筆者は5回ぐらいこれで強制終了して教室にも関わらずクソッタレと叫んでおりました。

 

(中略) 

 

できましたーー

f:id:kotarosakata:20191224172219p:plain

総数1万隻を擁する大艦隊です。

f:id:kotarosakata:20191224172402p:plain

このように、きちんと生成できています。

Entityはヒエラルキーにも表示されないので、このようにEntity Debuggerから見ることが必要です。

 

f:id:kotarosakata:20191224180859p:plain

間隔を大きくするとこんな感じになっていますf:id:kotarosakata:20191224181216p:plain


SF映画の雰囲気を醸し出せていそうですね。

 

ちなみにFPSなんですが、密集して、かつ画面の殆どが埋め尽くされていると60FPSの維持は難しく、間隔を大きくしたり描画が少ないと軽いようです(それはそう)

1万表示してもかなり重いということはなさそう。普通のゲームオブジェクトを1万も表示したら死ぬので、とてもすごいことです。

もう少し、たくさん表示することに向いた軽めのシェーダーなりメッシュにすると、多分余裕かもしれない。

 

実装は...参考文献のものをうまく合わせて作りました。多分位置から作れって言われたら無理ですね。

 

本来は動画を上げたいのですがgifと僕との相性が悪くはてなブログにアップロードできませんでした。

github.com

Githubに上げたのでみんな見てみてください...

 

終わりに

ECSなんもわからん。