hildsoftの裏庭

メインでは書かない種類の雑記です

unity1week第六回お題「Space」に参加したので開発まとめ

unity1weekとは

Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

月曜0時開始、日曜20時締切の1週間ゲームジャムです。

毎回お題が発表されるので、それに沿った(拡大解釈可)ゲームを作ります。

時間配分などは各自に任されているので、有給取るなどして1週間ガチでやるも良し、毎日少しずつ作って週末ブーストするも良し、ネタに走って短時間で片づけてもokなお祭りです。

日曜提出なので、自分の技術力やリソースとも相談しながらあまり複雑にならないようなゲームを作るというバランスも求められます。

時間オーバーしても提出できるみたいですが、この辺はルールなので極力守りたいところ。

今回は1日以上遅れてしまいました。

どうしても風呂敷を広げがちで収めきれない、今後の課題です。

参加の記録

今回の目標

今回で3回目の参加になります。まだまだ期間内で満足のいく仕様に収めて完成させることができてないですね。反省です。

今回の目標は

  • UnityでWebGLを使ったら弾幕系シューティングゲームって作れるかを調べること
  • ネットランキング、SNS対応

を設定しました。

前回までと違い、少し時間をかけてでも今後のスマートフォンアプリなどで使えるよう、そろそろマネタイズを意識した動きになりました。


今回作成したもの

f:id:hildsoft:20171121060905p:plain

https://unityroom.com/games/survivalspace

迫りくる弾幕を制限時間まで避けるだけのゲームです。

敵を倒したり、ボムを使って弾をかき消すなどはありません。

1発被弾で即死というものではなく、シールド値を削りきられたらゲームオーバーです。


事前準備など

今回はシューティングゲームかローグライクゲームを作ろうとゲームジャムの前から考えていました。

実際に作業を開始したのはお題が発表されてからですが、どちらかのジャンルに結び付けられれば開発、そうでなければ簡単なもので済ませる予定でした。


ジャンル決定と方針

Spaceというお題から、シューティング系や宇宙系はかなり被るだろうなぁと感じました。

ゲームジャムですしネタ被りは問題ないのですが、個人的に避けたいのです。

グラフィック素材での差別化が難しいので、アイディアか技術面で何か独自色を出せないかなと思っていたところ、昔LibGDXを使って弾幕シューティングを作ろうとしてGCの壁に跳ね返されたのを思い出し、Unityで再挑戦することにしました。

当時はスマートフォンもCPU性能が低く、メモリも少なかったので結局諦めたのでした。


まずは調査

WebGLでは今までも痛い目を見ているので、特に処理負荷の面で心配だったので最初にどのくらいの弾数を出せるか実験してみました。

f:id:hildsoft:20171121064318p:plain

f:id:hildsoft:20171121064554p:plain

Unityでのオーソドックスな手法で弾を出してみたところ、案の定GC発生して等間隔で打ち出していた弾がズレました。

弾幕ゲームは弾幕の形状が曲線で綺麗に表示されるのが好ましいので、完全には無理だとしても違和感がない状態までに抑えないといけないことと、操作時にカクつきを感じないくらいまで処理を高速化or弾数を制限しなければいけません。


GC対策

GC回避の特効薬はオブジェクトプールを利用することですが、メモリを解放しないのでメモリ管理の知識は要求されます。
今の時代ある程度メモリには余裕があるので、結構雑にメモリを確保しても大丈夫だと考えて大きめにプールを確保することにしました。

f:id:hildsoft:20171121065106p:plain

オブジェクトプールを使って、表示だけしたところです。

当たり判定は実装していませんでしたが、GCが発生していたときの4倍くらいの量(2500程度)の画像を表示しても問題なく動くようになりました。

この状態で一度WebGLに書き出して試したところ、Unityエディタ上ほどの性能は出ませんが十分動くことが確認できました。

一般的な弾幕ゲームでは1500くらい弾数を出せれば十分なので、このまま進めることにしました。


ゲームエンジンを使う意義

直接DirectXやOpenGLを触ったことのある方ならわかると思いますが、オブジェクトがどこに行ったか分からなくなるんですよね。

カメラとは別でゲーム内の空間を自由に見ることができるだけでも、ゲームエンジンを使うメリットは十分あると感じています。

性能だけを追求したいのであればC++でネイティブのコンパイラを使えばいいのでしょうが、やはり複数プラットフォーム展開、開発効率を考えたらUnityなどのエンジンを工夫して使う方が効率的だと感じました。


アセット

前回からArbor2を使用しているのですが、今回のメイン処理は高速化が求められるので、残念ながらモック作成用に序盤と最終的に画面遷移などの外枠での使用にとどまりました。

便利なアセットなので、最適化が必須となる環境では使用が制限されるのが残念です。
利便性を取るか性能を取るか、バランスを考慮する必要があります。


以下は今回使用したアセットです。

少しずつの利用でしたが、自分で作成するよりは良い物ができました。

製作者の方にこの場を借りてお礼申し上げます。

総括

やりたいことを絞れなかったため色々と未消化な部分があります。

前回できなかったSNS対応は、1日遅れたこともあり一応達成することができました。

UnityではIL2CPPの恩恵が得られるので、それほど専門的な知識がなくても実装次第では弾幕ゲームを作れる事が分かったことは収穫でした。

今回のノウハウはスマホゲームを作る上での経験値になったと思います。

もう少しソースコードを整理してスマホゲームのプロトタイプができたら、デザイナーさんを誘ってマネタイズできるようなゲームとして出してみたいですね。

最近読んだ印象が強かった漫画(2017/09)

辺獄のシュヴェスタ

辺獄のシュヴェスタ(1) (ビッグコミックス)

辺獄のシュヴェスタ(1) (ビッグコミックス)

中世の物語です。

魔女狩りがメインテーマで、親を殺された主人公の復讐劇が描かれています。

まだ完結はしていませんが、既刊5巻というボリュームでも読み応えのある作品です。

権力に抗う一人の少女エラ、突きつけられる非常な選択、それをどのようにして切り抜けるのか。

読んでいて展開が気になる物語ですが、少々残酷な表現を含んでいますのでこの点だけはご注意を。


少女終末旅行

少女終末旅行 1巻 (バンチコミックス)

少女終末旅行 1巻 (バンチコミックス)

今週からアニメも放映される作品です。

現代の文明が滅んだあとの、荒廃した世界を旅する二人の少女の話です。

食料や燃料を残された施設などから補給しながら終末を迎えた世界でどこへ向かうのか?

まだ物語の核心に触れる展開には至っていませんが、舞台の世界観やキャラは好みです。


ホーリーブラウニー

Holy Brownie (1) (ヤングキングコミックス)

Holy Brownie (1) (ヤングキングコミックス)

エクセルサーガが好きならハマる、ブラックユーモアを詰め込んだおとぎ話です。

主役は妖精なのですが、登場するキャラは毎回異なっていて1話完結のショートストーリーが多いです。

パロディ的なネタが多めなので、ある程度の知識が無いと読んでてもピンと来ないかもしれません。

ですが、分かると面白い、皮肉にまみれた作品であることは確かです。

エロや残酷な表現もあるので、その辺に抵抗のある方は読まない方が良いです。

最近読んだ印象が強かった漫画(2017/08)

転生したらスライムだった件

転生したらスライムだった件(1) (シリウスコミックス)

転生したらスライムだった件(1) (シリウスコミックス)

ラノベが元ですが、またしても異世界転生ものです。

流行りの物はどうしても目につきますし、出版社としても定番の物を出して安全圏を狙いたいし、読者としても一つ面白い物を見つけると似たようなジャンルを読みたくなるものなのでしょう。

内容的には、現世で死ぬ>転生したらスライムだった>一般的にスライムは弱いと思われがちだが、あるきっかけで強くなる。というベタな展開です。

理不尽な設定で強引に物語を進めるのではなく、順序だてて展開していきます。(運の面では都合は良いですが、小説なんてそんなもんでしょう)

そういう面で、テンポよく物語が進んで行くのでどんどん続きが読みたくなります。

1回目はさらっと読み流して、2回目に気づくこともあったので割としっかり作られている印象を受けました。


ぱらいぞ

ぱらいぞ1 (ワニマガジンコミックススペシャル)

ぱらいぞ1 (ワニマガジンコミックススペシャル)

さすが道満先生というシュールな内容の4コマ漫画です。

ネタは色々な方面から飛んでくるので、いくつか意味不明な物もありますが、マンガやゲーム好きなら理解はできるでしょう。

恐らく漫画を殆ど読まないような層の人は理解に苦しむ作品かと思います。万人向けではありませんが、こういう作品は個人的には好きです。


ADAMAS

ADAMAS(1) (イブニングコミックス)

ADAMAS(1) (イブニングコミックス)

ダイヤモンドに宿る力を得て、裏世界の荒事を解決する主人公、流崎麗華。

宝石の力を使う能力者をジュエルマスターとよび、もちろんこの力を悪用する組織も出てきます。

行方不明になった父と、その原因と思われる闇の組織を追って仕事をこなす主人公の物語です。

序盤は単発のストーリーが多めですが、徐々に伏線が張られ終盤に向かっていきます。

少し長めの漫画ですが、流れのある作品で読みごたえがありました。


結婚指輪物語

結婚指輪物語 1巻 (デジタル版ビッグガンガンコミックス)

結婚指輪物語 1巻 (デジタル版ビッグガンガンコミックス)

こちらは異世界転生ではなく、異世界が別世界として存在していたファンタジー系のストーリーです。

主人公サトウが幼馴染のヒメを追いかけると、そこは異世界だった。流れで告白し結婚することになる二人。

ヒメもサトウも相思相愛だが、結婚しても恥ずかしさから中々進展しない関係。

その上、指輪を集め悪を倒すという大目的の途中、王家に伝わる指輪を授ける=結婚という図式から複数の国の王女と重婚をしていく主人公サトウ。

初々しい二人+他国の王女というハーレム状態な異世界冒険ものです。

やはり見どころはヒメの心情変化ですね。

unity1week第五回お題「フロー」に参加したので開発まとめ

unity1weekとは

Unity 1週間ゲームジャム | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

月曜0時開始、日曜20時締切の1週間ゲームジャムです。

毎回お題が発表されるので、それに沿った(拡大解釈可)ゲームを作ります。

時間配分などは各自に任されているので、有給取るなどして1週間ガチでやるも良し、毎日少しずつ作って週末ブーストするも良し、ネタに走って短時間で片づけてもokなお祭りです。

日曜提出なので、自分の技術力やリソースとも相談しながらあまり複雑にならないようなゲームを作るというバランスも求められます。

時間オーバーしても提出できるみたいですが、この辺はルールなので極力守りたいところ。

今回は1時間オーバーして、さらに3時間弱オーバーで修正も加えました。

参加の記録

今回の目標

まだ2回目ですが、参加する際に事前に目標を設定しています。

今回の目標は

  • arbor2を使うこと
  • FSMでどこまで出来るか試してみること
  • スマートフォン対応できる操作、アスペクト比にすること
  • ネットランキング、SNS対応

を設定しました。

あくまで目標なので、挑戦したうえで失敗しても得られるものがあればokというゆるーい姿勢です。


今回作成したもの

f:id:hildsoft:20170828005404p:plain

https://unityroom.com/games/slidefloor

矢印の床に乗ると自動で運ばれていき、ゴールまで到達できればクリアというパズルゲームです。


最初に考えていたもの

最初に考えていたものは、紙風船のようなゆっくり落ちてくるボールに送風機を設置して風の流れでゴールまで運ぶというゲームでした。

  • ドラッグ&ドロップで送風機の強さを決定しながら設置
  • 送風機は一定時間で消える
  • 強い力の送風機ほどエネルギーを消費する
  • エネルギーは有限
  • 複数ステージごとのタイムアタック制

という大ざっぱに仕様を考えた段階で、いざモックを作ってみようとすると問題が露呈しました。

ドラッグ&ドロップの操作は、小さなスマートフォンでは画面外に出てしまう。

PC上なら画面外に出てもマウスを引っ張れば問題ないのですが、スマートフォンではそうはいきません。

これでは画面端で送風機を設置する場合に、強さか角度の設定に制限がかかります。

そして画面が小さなスマートフォンではゲームエリアを小さくすると、今度は操作性や視認性の問題が出てきます。

ここで一旦参加を諦めましたが、辞書でflowの意味を再度調べたところ今回作成したゲームのアイディアが降ってきました。


arbor2の威力

今回、開発にはarbor2を使用しました。

FSMの便利なところと苦手なところを把握するためにも、なるべくコーディングをせずに作ってみることにしました。

実際、書いたコードはクラス3個、合計でも80行程度。

その反面、FSMはごちゃごちゃしました。

f:id:hildsoft:20170828012524p:plain

コーディングを減らした状態でも上手く切り分けするともう少し見やすくなるかもしれません。

コーディングを減らしたせいで、一つのFSMに集中して書かざるを得なかった部分があるので、結構密な結合になってしまっています。

再利用性が犠牲になっているので、これではFSMの利点が活かせず良くありません。

次回以降は、バランスの良いできるだけ疎結合なものを目指してみようかと思います。


arbor2の欠点

arbor2は基本的なパーツで構成されており、細かい部分は自分でカスタマイズする設計になっています。

ソース自体は全部付いてきますので、魔改造するなりして使いやすいように今後進めていこうと思います。

今回実装して、これは標準で欲しかったなぁと思うのが、(本当はあるけど探せなかった可能性もありますが)

transformからgameobjectを取得するcalculatorです。

    public override void OnCalculate()
    {
        Transform transform = _Transform.value;
        if (transform != null)
        {
            _GameObject.SetValue(transform.gameObject);
        }
    }

また、calculatorがVer2から追加されたためか一部固定値のみ入力を受け付けるbehaviourがあるので、ここは本当に必要なのか、回避方法があるか、もう少し勉強してからフィードバックしてみようかと思っています。

モックを作るうえでコードをあまり書かずにノード接続だけでざっくりと作りたいのですが、if文や定数値に相当するノード(calculator)が無いのでこの辺は公式のコンセプトとは異なるので自前で拡張する必要がありそうです。


FSMの限界

UE4のような開発環境によるノードコーディングとは違うので、リフレクションを多用するために速度面の問題が出る可能性があります。

特にモバイル向けなどの非力な環境では注意が必要です。

ですので、モックはFSMでさくっと作って、それをスクリプトに落とし込む。最終的に速度面の問題が出るようなら手動カスタマイズするか、機械的にリフレクションを解消したスクリプトを生成するようなマクロを組むなどが必要になるでしょう。

この辺りは開発コストや求められる品質と天秤にかけることになりそうです。


総括

今回の開発、最終的な作業時間はトータルでは20時間くらいになりました。
arbor2の習得とグラフィック素材の作成などに大半の時間を取られてしまったので、予想より少し長めに時間がかかってしまった印象です。

また、今回目標に挙げていたネットランキングとSNS対応はできませんでした。
ゲームの内容を変更したのでしょうがない部分はあります。

個人開発だと開発速度が早いと大きな武器になります。
小さなプロジェクトをサクサク回すためにも、FSMは十分な武器になると感じました。

最近読んだ印象が強かった漫画(2017/07)

賭ケグルイ

賭ケグルイ(1) (ガンガンコミックスJOKER)

賭ケグルイ(1) (ガンガンコミックスJOKER)

2017年7月からアニメ放送している作品です。

学園が舞台になっており、学園内で序列を決めるのはギャンブルという空想設定の元で繰り広げられる賭博のお話。

純粋なギャンブルの話かと思えば、ギャンブルにありがちなイカサマやルールのトリックがメインの構成になっています。
イカサマが分かっているうえでの心理戦などもあり、2,3回読み返すと新たな描写に気づく面白い作品です。


汚物は消毒です

汚物は消毒です(1) (サンデーうぇぶりコミックス)

汚物は消毒です(1) (サンデーうぇぶりコミックス)

ヒャッハーな世紀末のお話・・・ではなく、親の再婚により潔癖症の姉とズボラな弟が一緒に暮らすことになり、掃除する話です。

何が言いたいのかというと、姉+弟+掃除を含めたギャグ漫画。

この作者の前作「姉ログ」

姉ログ 靄子姉さんの止まらないモノローグ(1) (少年サンデーコミックス)

姉ログ 靄子姉さんの止まらないモノローグ(1) (少年サンデーコミックス)

の類似作品と言いましょうか。

登場人物が変わって、掃除ネタを主軸に据えられている作品です。

これを読めば掃除ネタが少しずつ蓄積されると思いますが、基本は姉萌え作品かと。


ビリオネアガール

ビリオネアガール(1) (アフタヌーンコミックス)

ビリオネアガール(1) (アフタヌーンコミックス)

平凡な大学生の主人公、高遠恵が教授から請け負った姪っ子の家庭教師アルバイトを破格の金額で受けるところから物語は始まります。

実はこの姪っ子、藤岡紫は天才的なデイトレーダーで、とある事情から大学には行かなかったために統計学を学びたいとアルバイトを雇ったわけですが、極度の人見知り、大金を持っているが故の人間不信が重なって少しズレてる子でした。

お金の魔力、恋愛、友人関係が交錯するストーリーです。

打ち切りになったのか、3巻完結で少し内容が浅いイメージはありますが、軽く読む分には面白い作品でした。


RATMAN

RATMAN(1) (角川コミックス・エース)

RATMAN(1) (角川コミックス・エース)

ヒーローという特殊能力を持った存在が実在する世界、子供の頃にヒーローに助けられてからずっとヒーローになることを目指していた少年、葛城修斗。

身長も伸びず、ヒーローには向かない体格な修斗は悪の組織ジャッカルに捉えられ改造人間?RATMANになってしまう。

そしてダークヒーローとして悪事を働き、ヒーローと戦うのであった。

というヒーローものの逆視点から始まるストーリーですが、実際はヒーローの方にも問題があり、お互いの信じる正義のために戦う展開になっていきます。

序盤は短編的なストーリーですが、途中から核心に迫る長めのストーリーに移行していきます。

個人的には好きな作品ですが、後半のシリアスパートはちょっと強引な設定だなぁと感じました。

スカルプトをするための人体モデル資料

f:id:hildsoft:20170724063431j:plain

人体モデルをスカルプトするための資料

粘土でもZBrushでも既に存在するものをスカルプトをするためには、その物についての形状の知識が必要になってきます。

特に人間の場合、見慣れているが故に適当にスカルプトすると違和感を覚えてしまいます。

ネットでの資料収集

ネットでもある程度の資料集めはできます。

何せ人間のモデルですから、普通の写真からでも見る人が見れば十分な資料になります。

ですが、ちょうどよいものを探すのにも時間がかかりますし、初心者はどこを注目するべきかも分かりづらいです。

そこである程度まとまった資料があれば時間の短縮もできるため、いくつか探してみておススメの物を見つけましたので紹介します。

スカルプターのための美術解剖学 -Anatomy For Sculptors日本語版

こちらは初心者におススメです。

骨格、筋肉について、いろいろなポーズでの形状が写真があり、その写真の上に筋肉や骨、トポロジーが描かれているため、立体構造を理解しやすいです。

また、間違いやすい項目についても説明が書かれているのも初心者におススメの点です。

人体についての資料を持っていないのであれば、ぜひ買ってほしい1冊です。

少々高い値段ですが、資料として値段分の価値はあると思います。

3Dアーティストのための人体解剖学

こちらも初心者におススメです。

内容的には上記の「スカルプターのための美術解剖学」と似ています。

被る部分は多いのですが、資料なので余裕があれば両方欲しいところです。

しかしどちらも結構な値段しますし片方持っていれば知りたいことは解決すると思いますので、無理して買うほどではありません。

「スカルプターのための美術解剖学」と比較して図が少なく、説明が多めの印象です。

ANATOMY SCULPTING(アナトミー・スカルプティング) 片桐裕司 造形テクニック

ある程度基本を押さえている人向けに、更なるスキルアップとして注目すべきところを書いています。

ポーズの種類は少ないので網羅的な資料というよりは、幾つかのモデルを作りながらピンポイントでレクチャーをする感じです。

粘土での造形を説明しているので、実際にモデルを作成する場合のテクニックも得られるかと思います。

ZBrushだけで作業をする場合は必須というほどでもないかと思います。

unity1week第三回お題「積む」に参加したので開発まとめ

unity1weekとは

Unity 1週間ゲームジャム | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

月曜0時開始、日曜20時締切の1週間ゲームジャムです。

毎回お題が発表されるので、それに沿った(拡大解釈可)ゲームを作ります。

時間配分などは各自に任されているので、有給取るなどして1週間ガチでやるも良し、毎日少しずつ作って週末ブーストするも良し、ネタに走って短時間で片づけてもokなお祭りです。

日曜提出なので、自分の技術力やリソースとも相談しながらあまり複雑にならないようなゲームを作るというバランスも求められます。

時間オーバーしても提出できるみたいですが、この辺はルールなので極力守りたいところ。

参加の記録

1日目(月曜日)

お題を見て寝るまで少し考えるもアイディア出ず。

1回目が「跳ねる」、2回目が「転がる」なので、3回目の「積む」は少々難しい。

どうしてもネタ被りになりそうけど、参加者多いのでネタ被りは気にしない。

仕事中の休憩時間に少しずつアイディア出しして幾つかリストアップ。

1日目はコーディング無しで終了。

隙間時間で考えていたので時間は未計測。

2日目(火曜日)

Rigidbodyの仕様を少し調査。

デモ用プロジェクトを作成して、適当にコード書いてネックになりそうなところの検証作業。

作業時間:2時間

3日目(水曜日)

実際にプロジェクトを作成して作業開始。

SDユニティちゃんを出して、少しブロックを積んでみた。

f:id:hildsoft:20170622004824j:plain

調査に時間かかったので、実進捗としては殆どゼロ。

作業時間:2時間

4日目(木曜日)

作る内容を方向修正して、ゲームの基本部分となる仕様がほぼ固まる。

当初はブロックを積み上げてWave方式の攻撃からユニティちゃんを守るゲームを考えていたところ、

かなりの数を積まないといけないことになって、面倒さを感じてレミングス風のゲームにする方向に路線変更。

プロジェクトを作りなおして同じような状態まで戻してユニティちゃんを動かすところまで進んだ。

作る方向性は確定したので、あとは面白くできることを信じて進めるしかない。

f:id:hildsoft:20170623014637g:plain

作業時間:3時間

5日目(金曜日)

ntnyさんの作ったplayGROWndのデモを見ていると、これで作りたいという衝動に駆られる。

しかし、パーツ数的にWebGLで動くかどうかも含め検証している時間が無さそうなので断念。

でも部品として、いくつか使わせてもらいました。

その後、夜更かししながらまったり開発。

Animation部分の知識が無くてハマったため、後回しにしてできるところから進めた。

UI周り間に合わなさそうな雰囲気・・・。

作業時間:5時間

6日目(土曜日)

Animation部分のバグ取り開始。

これが思いのほか、原因が掴みづらい。

デバッグ方法を知らないのもあるかもしれないけど、動いている物でバグの瞬間を捕まえるのがすごく大変だった。

結局今回は根本的な解決はできず、対症療法的に回避。

細かく見ると違和感あるけど、ゲームを進めるうえでは何とかなるのでこの辺で妥協。

この辺で、時間が無いのでステージギミックを減らして完成させるしかないと舵を切る。

作業時間:8時間

7日目(日曜日)

昼前にようやく開始~終了まで一連のゲーム部分の流れが完成。

気づいたら残り2時間で急いでUI作成。

ビルドの時間もかかるので、ゲーム内のスクリーンショットを少々加工して終了。

サイトに上げるも衝突判定が予定通りに機能しない・・・。

さすがに時間も足りないので、このまま公開することに。

NavigateUnityChan | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

ただ積んで道を作るだけなので、当初考えていたパズル要素もあまり無く、ステージも5個だけと寂しい結果に・・・。

作業時間:6時間

感想

約30時間くらいをつぎ込んでゲームを作ったわけですが、半分以上は調べものと検証の時間に使ってしまったので、 やはり作り慣れていないと1週間である程度のボリュームと品質を両立するのが難しいなと痛感しました。

作業時間の把握や取捨選択など、反省点が多く、勉強になった1週間でした。

また時間が取れる時は参加してみたいと思います。

今度こそはまともな作品に仕上げてリベンジするぞ!