LoLの二次創作ゲーム「DOTEEMO」をつくりました

約一年ぶりの新作となってしまいましたが、大好きな対戦ゲーム「リーグ・オブ・レジェンド」のティーモを題材とした二次創作ゲームを作りました。

実は一年前にティーモの顔を殴るもぐらたたきを作ったので二次創作シリーズは第二弾となるのですが、開発作業が長引いたことによるモチベーション低下もあり想像以上に難産になってしまった。

ダウンロード

https://drive.google.com/uc?export=download&id=0B20BSP0TA7PFWE1pUjVjU1doVTQ

22.5MB程度あるので、ダウンロードが開始されるまでにしばらく時間がかかると思います。

負荷に関しては最適化してないので、ロースペックなPCではもしかしたら動かないかもしれません。すいません。

遊び方

WASD または 上下左右キー ・・・ 移動
SHIFTキー または 右クリック ・・・ ダッシュ
CONTROLキー または 中クリック ・・・ 停止
SPACEキー または 左クリック ・・・ キノコ(敵が踏むと起動する爆弾)を置く

敵に体当たりされないように、ステージ内の全コインを収集することが目的です。全10ステージ。

3万点で1エクステンドします。ポイントは、コインを取ることとステージクリア時の残タイムによって獲得できます。また、各ステージ毎に「一度も敵に見つからない」ことと「一度もキノコを置かない」ことでボーナスポイント(1万点)が貰えます。

ライアットゲームズの知的財産の利用にあたって

ゲーム起動時にも表示していますが誤解なきように一応ここにも書いておきます。このガイドラインに則って作っているつもりですが問題があればご一報ください。

DOTEEMOは、ライアットゲームズが公式承認するものではなく、ライアットゲームズ又はリーグ・オブ・レジェンドの製作・管理に正式に関与したいかなる者の見解・意見に基づくものではありません。リーグ・オブ・レジェンド及びライアットゲームズは、Riot Games, Inc.の商標又は登録商標です。リーグ・オブ・レジェンド © Riot Games, Inc.

http://www.riotgames.com/legal-jibber-jabber-japanese

スペシャルサンクス

Reptileさん ・・・ 全てのボクセル3Dモデルを制作していただきました。ハイクオリティ!頭が上がりません。
Google+の仲間たち ・・・ 製作中のビルドをプレイしてもらいアドバイスをいただきました。

せっかく作っていただいたのに使えなかったモデルたち。バージョンアップもしくは次回二次創作シリーズの際には!

使用アセット

色々使いすぎていて把握しきれていませんが、覚えているものだけ。

UniRXは初めて使いましたが、タイマー処理や変数の値が変わった時のメッセージ発行などかなり有用性を感じました。ただ完全にマスターしきれてないのでタイマーを停止したつもりが停止できていなかったりと予想外の問題に遭遇すること多数。概念の理解も完全には出来てないのでまだまだ修行が必要そうです。

Text Mesh Pro は日本語を扱う際はフォントアトラスを作る際にちょっと配慮が必要ですが、今回はアルファベットしか使わなかったので、デフォルトのTextの完全上位互換みたいな感じで使えて有用性を再認識しました。Textがもうちょっと便利ならね・・・。ただ開発の終盤に差し替えることになったので、置き換えの作業がちょっと面倒でした。Textと互換性があるのでプログラムの書き換えは最小限で済みましたが、コンポーネントの付け替えとかが少し大変だった。TMPを使うなら最初のうちに導入しておいたほうが無駄な作業が省けると思います。

New Post-processing Stackはお手軽にリッチっぽい見た目に出来るのでオススメです。VignetteとSSAOがお気に入り。

制作中の画像など

完全に自己満足ですが忘れた頃に見て楽しむために制作中の画像を記録しておきたいと思います。

2016年5月

最初にG+に上げた画像。多分初日の作業だったと思います。コインの上に玉が乗り上げてそのまま画面外へ飛び出していってしまいました。驚きの低クオリティ。

モグラ叩き作った後に「次はドットイートだな」と考えていたので、それを目指して作り始めたのですが、普通にRigidbody(物理エンジン)を使ってキャラを動かす方法を取っていたので、上の画像みたいにモデルの上に乗り上げてしまったり、壁と壁に引っかかって動けなくなったり散々な感じでした。

結局移動方法は物理エンジンを使用せず、Translateで座標を直接移動させる形を取りました。それでもfloat値を使っている関係で座標は誤差が発生するため、曲がろうとした時や壁にぶつかった時に補正をしています。

5月後半。キノコ(爆弾)を実装してにわかにゲームらしさを醸し出してきています。他に簡単なAI(軸を合わせる程度)と、ダッシュ機能、テキストからマップを生成する仕組みはもう出来ていたと思います。

2016年6月

モデルの差し替えとステージ遷移を実装しました。玉よりはゲームらしくなってきた感じあります。

俺の手作りティーモを見よ!(この時点ではまだ一人で作業していました。)

見かねた友人が作ってくれた3Dモデル。俄然やる気が出ました。

モデルとアニメーションを追加するだけでゲームっぽい!このあたりでほぼ見下ろしだったカメラの角度を40度くらいに傾けた気がします。

ティーモ爆発しろ!と思う多数のプレーヤーのために爆発させる処理を追加。爆発といっても体がバラバラになるのはグロ過ぎるかなと思ってパーティクルと骨が散らばるあたりで妥協しました。

2016年7月

ダッシュに汗をつけたり、壁を8方向に結合させたり、キノコを3Dモデルにしたりしてます。

ヨリックも実装。ヨリックの壁追突後のぺしゃんこになる処理はDOTweenを使っているのですが、単純ながらかなり良い表現になったのではないかと満足してます。(アドバイス:R氏) ヨリックは他の敵キャラと違い独立した処理を書いているのが構造的にはかなりアレですが・・・。制作が長引きすぎてLoLの方ではリメイクされてしまったのが誤算でしたが、旧ヨリックを見られる数少ないゲームということでひとつ。

壁のモデルもいただき、よりそれっぽくなりました。(設定の問題で色が変ですが) このあたりでSSAOを始めとするイメージエフェクトの力を実感しました。

当時使用していたSSAOは、タイル状に敷き詰めているオブジェクト(地面など)の境目にも影を作ってしまう(実際には線が見える)という問題があり、なぜかカメラのClipping Planesの範囲を狭くすることで消えたことをメモしておきます。

テスト版をG+の仲間たちにプレイしてもらったところ、3Dモデルの見栄えを良くするためにカメラを横に傾けたほうが良いのではないかという意見をもらい、導入したところです。

マップ端にティーモが来たらカメラを止めるようにしていたのですが、カメラを傾けた結果、描画範囲に誤差が出る(上から見下ろした範囲とは異なる)せいで、きちんとした位置で止まらず相当苦労した覚えがあります。でも常にティーモが中心にいるよりモデルをしっかりと楽しめるのでそこは頑張った。

2016年8月

新しいPCを作ったりゴタゴタして8月。頭蓋骨のふっ飛ばし処理とビネットエフェクトを掛けたりしています。この辺から段々モチベが低下していく。

旧茂みモデル。上からの見下ろしだと良かったのですが、斜め視点になったことで違和感が出てきたので現在の剣山モデルへ作り直しをお願いしました。

茂みに隠れたらプレイヤーを見失うという処理を作った時に発生したバグ。ハテナがデカくなりすぎる。原因は何だったかあんまり覚えてません。

この時点では敵は常にプレーヤーを発見していて、茂みに入ったときだけ動きがランダムになるというゲーム性でした。

2016年9月

G+で意見をいただき、草むらに入ったらゴーストを残し、ゴーストに敵キャラが向かっていって、ゴーストに到達したら敵キャラが探索を始めるという処理を追加したところ。最終的にこれがゲーム性を大幅に変える要因になった気がします。

テレポーターとトゲ罠実装。テレポーターはUniRXを使って連続ワープしないような処理を入れているのですが、多分バグが残っていると思います。上手く使いこなせていない。

Tiled Map Editor というツールからCSVを取り込めるようにしました。元々テキストからマップを読み込むようになっていたので、互換性を持たせるためにそれを利用して、CSV→テキスト→ステージオブジェクトという処理になってます。

ただ、このTiled Map Editorは高機能でCSV以外にもタイル情報にパラメータも付与できるようなので、ちゃんとしたパース処理を作れば、「左向きの敵」とか、「1秒毎に上下するトゲ」とかもマップエディタ上で定義することが可能だと思います。気力が足りなくて今回はそこまで出来ませんでした。でも便利なので今後このマップエディタを使う際はそこまで頑張ろうと思います。

2016年11月

Civ6をやったり悪魔城シリーズをやったりしてモチベが完全に失われていましたが、なんとか完成させようということで作業を再開。A* Pathfinding Project を使用してA*探索で敵がティーモを追跡するようになりました。これまでは単純な軸合わせ+行き止まり以外では後ろに戻らないという処理だったので、マップの構造次第では同じ場所をぐるぐるとループしてしまいプレイヤーに近づいて行かないという問題がありましたが、ちゃんとした経路探索を入れることで解決しました。

A* Pathfinding Projectは若干とっつきづらい感じもありますが、ちゃんとデモシーンやリファレンスを見たらそこまで複雑ではなく(特にグリッド移動なら)、使いやすいアセットだと思いました。多分グリッド移動なら無料版でも実装できると思うので資金不足の方も使ってみてはどうでしょうか。

ここで大幅なゲーム性の変更を行いました。元々敵はプレイヤーを常に見つけて最短経路を通って近づいてきていたのですが、最初はプレイヤーを見失っていて、視界に入ったら追いかけてくるというステルス重視な形にしました。

前の形だとどうしてもプレイヤー中心に敵が集まってきてしまい、その都度爆弾を置いて切り抜けるだけであまりゲームとして面白くないと感じていたので、敵をバラけさせる目的や、敵を欺いたり出し抜いたりすることでティーモというキャラクターが際立つのではないかと考えた際に、ステルスが良いのではないかと考えました。弊害としてドットイートらしい挟み込みが減ってしまいましたが、ゲームとしての特徴は少し出たのかなという気がしています。

2016年12月

敵がティーモを発見した時に周りに通知を出すような処理を追加しました。これもG+のお友達から意見を頂戴して実装した機能です。これによって敵の攻撃が少し激しくなり、ドットイートらしい挟み込みも多少は増えたかなという感じがします。

その場で方向転換する敵を実装。加えて、全キャラクターの方向転換時のTweenアニメーション(元々は即時に方向転換する形だった)を実装。いまさら!?って感じもしますが、それまでは即時に方向転換することが操作のクイック性を考えると必須だと考えていたのですよね。でもその仕組みだと上の画像のように方向転換する敵が次にどこを向くのが全く分からなくて理不尽感がありそうなので、試しに実装してみたら、操作の問題は特に無いし、リッチに見えるので正式に実装しました。

transform.DORotationを使って簡単に実装したのですが、他の処理でtransform.forwardを使ったりしていて、方向転換中にその処理が走るとforwardが斜めの方向になったりすることがあるのでその辺で手を入れる必要がありました。

Tween関係ではTweenとAnimationによる座標変更を同時に使用すると碌な事にならないので気をつけたほうが良いですね。最後の方のカットシーン的なアニメーションを作る時に割りと苦労しました。

2017年1月

ミニマップを実装。ミニマップ用カメラでしか見えないオブジェクトをマップオブジェクトに追加し、上から撮影しているだけです。

描画はRenderTextureに円形のマスクをかけているのですが、Unity標準のマスクコンポーネントがアルファ値に対応していないせいか、曲線がギザギザに見えてしまいキレそうになりました。これはどうなのUnity・・・。

結局、このサイト様に記載されているシェーダーを使ったマテリアルをマスク元の画像に付与することで綺麗になりました。

月の後半にはエディタ拡張機能を使って迷路を自動生成する機能なんてのも作りましたが、結局使用しませんでした。この機能を使えば無限にステージを自動生成する迷路モードなんてのも作れるのですが、これを遊べる状態にするには、難易度曲線を考えてパラメタを調整する作業でかなり時間がかかりそうだったのでやめようという結論に至りました。でもエディタ拡張に関する知識は深まったので良しとします。

エディタ拡張で詰まった点といえば、この問題で苦しみました。オブジェクトが一部再生時に保存されないという問題。最終的にはSerealizedPropertyを経由してデータをやり取りすることで保存されるようになりました。

2017年2月

仕上げ時にフラグ管理を間違えて何度も同じ処理が走ってしまい遭遇したバグ。怖すぎる・・・。

オープニング、エンディング、ステージ遷移がファミコン風だったのを全部リッチな形にしたり、テキストText Mesh Pro Textに置き換えたり、ハイスコアデータを保存したりという作業は公開までの2日間くらいでやりました。公開時のデータがゲーム進行不可能という酷いバグを含んでいましたがこの辺を急ピッチでやったせいだと思います。ゴメンナサイ!

感想

元々スキルアップのために、2,3週間くらいで、「ティーモがキノコを置いて敵を倒すドットイートを作ろう!」と考えていたものが一年近くかかってしまった上に、実装しきれなかった物もあるので満足はしてませんが、表現しようとしていたことはある程度できているし、ティーモらしさもまああるし、まあまあオリジナリティもあるのでそのへんは良かったのかなと思います。

こうして見ると最初の3ヶ月が一番進歩している気がします。個人制作は情熱が続く間に一気に作り上げないと、「面白くないものに時間をかけて何をやっているんだろう・・・」とか考え始めてより筆が進まなくなってしまうので、一気に作って人に見せてフィードバックをもらい、ダメそうなら闇に葬り、行けそうならまた一気に作って人に見せるというサイクルを繰り返す必要があると実感しました。特に最後の方は、「面白くないのにここまで時間をかけてしまったから一応完成させなきゃ・・・」みたいなネガティブなイメージで制作をしていたので完全に良くない感じでした。

でも経験値はかなり溜まった気がするので、次はもっと良いものを作りたいと思います!

妥協の産物みたいな感じになってしまった感もあるのですが、一応上記の通り長い時間をかけて作ったものなので楽しんでいただけたなら幸いです!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする