調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果とか感想とか

タイピングゲームを作ってみたら完成までたどりつけなかった件について~Unityで遊んでみよう①~

最初の思いとかそのあたり

・なにか「ゲーム」を自分でつくってみたかった。
・Unityってのがいいらしい。おっしゃ使ってみよう。

最初からあきらめてたところ

・音楽はあきらめよう。
・画像もあきらめよう。拝借するコースで進める。
https://pixabay.com/ja/ をお借りしました。あざます。

ゲームのコンセプト

・ゲーム名は「HaiBaiPai」。
・タイピングゲーを目指してみた。出てくる画像をみて
「hai」なのか「bai」なのか「pai」なのか。入力するだけのシンプルなルール
※本当は「π」が来た時だけ「3.14」という面倒な入力をさせるとかもしたかったが・・・

出来上がったもの

・なんか中途半端にでてくる画像をみて入力する。
・スコアもくそもなく、音もないので高揚感ゼロ。
・乱数が雑。アンド問題数が極端に少ないせいでもうダメ。
そんな感じになった。もうちょい何とかなりそうだったけど、
・スコア出すのもどうせ今知ってることの応用でどうでもいいか・・・
・問題数増やすのは単純に手がかかってやだ。面倒・・・(せっかく共通化したのに)
となって開発をやめることにした。

ソース
github.com

せっかくだからゲーム画面も・・・(1画面しかないんだ。本当にひどい)
f:id:couraeg:20190429235106p:plain

つまづきポイント①ー画像の処理が点でさっぱりな件ー
↓はPngからUnityの画像(Sprite)にコンバートをかける関数。

    public static class PngConvertToSprite
    {
        private static Texture2D byteConvertToTexture2D(byte[] bytes)
        {
            // そのまま使わないならサイズ適当でOK.
            Texture2D texture = new Texture2D(1, 1);
            texture.LoadImage(bytes);
            return texture;
        }

        private static byte[] ReadPngFile(string path)
        {
            using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                BinaryReader bin = new BinaryReader(fileStream);
                byte[] values = bin.ReadBytes((int)bin.BaseStream.Length);
                bin.Close();
                return values;
            }
        }

        public static Sprite Convert(string pngPath)
        {
            Texture2D texture = byteConvertToTexture2D(ReadPngFile(pngPath));
            //ネットを漁りながらがんばったが、サイズがきっちり決まらなくてやばい。なんでこれでいいのかも不明
            return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f), 480);
        }
    }

コメントに書いてある通り、Sprite.Createに指定している数値の根拠が不明。
これで動いてるからこれで。という残念な感じになった。
Unity本体のほうの解像度設定もよくわからずで、僕のほしいゲーム画面の状態にするのに非常に苦労した。
上のゲーム画面を見てもらっても分かる通り、はみ出てるんだ。結局ちょうどよい数字をつかむことができなかった。

つまづきポイント②ー無駄に設計にこだわりすぎて―
平素より、きれいな設計を心がけているわけだけど、
今回の作成については完全にボトルネックだった。
・謎にインターフェースつくってみたり
・メソッドの名称なり、共通かなりを必死で考えて作業した。
これ自体は収穫もあったけど、結果的に成果物が全然あがらなくてゴリゴリモチベが落ちていった。
ある程度締め切りを決めないといつまでたっても同じ部分を作っていた。仕事で適当にケツをたたいてもらわないと、
あれこれウンウン悩んでるだけで一向に作業は進まずという状態に容易に陥ることが分かった。

まとめ

・自作とはいえ、期限はちゃんと決めよう。ダラダラおんなじ所作ってる。結果的に成果物もなくモチベもさがっていいことなし。
・画像を大量に使うゲームはやめておこう。用意するところで挫折する。悲しい。
・UnityのUnitTest、Assetsのロード、C#との連携周りがある程度学習できたのはGood。これは次に生かせる。
 ※特にPngConverterは次回以降も使えるかな。2Dなら。
・自作はモチベの維持が重要。1週間でも2週間でも、ちゃんとしないとダメ。ダメ絶対。