unity1weekの振り返り(適当)

unity1weekが終わってからすでに十数日たとうとしていますがみなさんいかがお過ごしでしょうか。今日はunity1weekの振り返りを適当にしていきたいと思います。

ちなみに制作したゲームはここに掲載しています。埼玉県民をつかまえて千葉県民としての誇りを養うゲームです。興味のある方はぜひプレイしてみてはいかがでしょうか。

unityroom.com

1日目~2日目

そもそも参加しようと思ったきっかけは春休みで時間が余っており、何かUnityでゲームを作りたいなと思っていたことがきっかけでした。しかし、Unityでゲームを作ろうにも私は絵が壊滅的に下手なので自力でゲームを完成させたことがありませんでした。そんなときに知ったのがunity1weekというイベントでした。ミニゲームを1週間で完成させて公開するという趣旨のイベントで、ぜひとも参加してみたいなと思いました。

しかし、ここでいくつか問題が発生しました。はじめに私は一人でゲームを完成させた経験がありませんでした。そのため、プログラム・イラスト・音楽を全て自分で用意する必要があったのですがこれをどうすればよいのか悩みました。結果として、音楽はフリー素材を利用することにし、イラストについては「絵を描かずにUIを作る」という手抜き仕様でいくことにしました。

そうなると、今度はゲームの内容が重要になります。今回のお題は「逆」ということでしたが、どんなゲームにするか悩みます。先ほどの「絵を描かない」という方法論()との兼ね合いもありましたが、そのときに「いくつかのひらがなの中から『さ』という文字を選ぶ」ゲームを思いつきました。元ネタは『翔んで埼玉』という漫画です。そして、「逆」というお題についてですが、これは「『さ』と『ち』ってなんとなく逆に見えるよね?ね?」という無茶な論理でゴリ押しすることにしました。さらに、『翔んで埼玉』は映画化されているのですがその映画の中では埼玉県と千葉県が敵対しているという設定がありました。そこで、「『さ』をクリックしたら得点が加算されて『ち』をクリックしたら得点が減る」というゲームを作ることが決定されました。こうなると完全にゲームのクオリティを無視した一発ネタですね。大丈夫なんでしょうか・・・。

ちなみに1日目と2日目はまともにゲームを作っていませんでした。なぜかというとバイトのシフトが入っていたからです。みなさんはもう少し計画性のある行動をしましょう。

3日目~6日目

3日目は何もしていませんね。なんかしょうもないツイートばっかりしていた気がします。

4日目についにコンセプトを発表しました。

 同日にはその時点での進捗をブログに書きました。

osenbei-holic.hatenablog.com

 実はこの時点では「スプライトに文字画像を入れてからオブジェクトのクリック判定を行う」という形式にしていました。しかし、のちにボタンUIの文字列を取得してから判定するという形式に変更しました。そして、文字列をランダムに取得する方法も友人から教えてもらいました。こういうときにゲームを作る人が周囲にいる環境にいると勉強になりますよね・・・。

osenbei-holic.hatenablog.com

 5日目はUIをいじってボタンの数を変えようとしましたが私の技術力では無理でした。結局のところ文字の数は15個に固定されるように・・・。ちなみにいまだにどうすればいいのか分かりません・・・。エロい人教えて・・・。

6日目はスタート画面やBGM、文字のフォントなどを実装しました。この日が一番作業量が多かった気がする・・・。BGMとフォントについては様々なサイト様を参考にさせていただいたので詳しくはunityroomにのせています。本当にありがとうございました。

この時点でゲームデザインや演出よりも説明書に力が入っているという意味不明なゲームができました。

しかしこの日は体調が悪かったので早めに寝ました。

7日目

最終日は波乱の一日でした。まず6時の時点でゲームが完成したのはよかったのですが、この時点でランキング機能とツイート機能を実装していませんでした。これらの機能を実装する作業に取り組むのですが、その前にいったんWebGLでビルドしてゲームをテストプレイすることにしました。すると、クリックした文字が「さ」であるにも関わらず不正解になるというバグが発生したのです。原因がわからずじまいでしたが、最終的に「GameObject.FindGameObjectsWithTag」というメソッドを利用すると、ビルド形式によって取得される順番が変わるということが分かりました。そこで、ボタンを格納する配列をpublic GameObject (変数名)とすることにより順番が固定されるようにしました。そしてその時点で20時を過ぎたので()いったんゲームを公開してランキング機能とを後でつけることにしました。

その後、ランキングエラーの理由が判明したので一応の完成版をunityroomにあげることができました・・・。思えば本当に長かった・・・。

感想

こうして実際にゲームを完成させてみると、自分の技術の拙さを感じると同時に一つの物事を完遂させることができたことに感動を覚えました。これがものづくりの醍醐味なんですかね・・・。そして、このようにゲームを完成させたことにより様々な技術を得ることができました。これからもこの経験を糧にしてゲーム制作とプログラミングの学習を続けていきたいです。

 この記事を読んだ方でゲームを作ったことがないという人もぜひゲーム制作に手を出してみてはいかがでしょうか。それでは今日はここで記事を締めたいと思います。本当にありがとうございました。

osenbei-holic.hatenablog.com

 

『埼玉県民をつかまえろ!』で使用した技術メモ

  • 配列の中身を入れ替えるときはcharacter = character.OrderBy(i => Guid.NewGuid()).ToArray();を使用する。
  • for文と配列を組み合わせることで配置を入れ替える。
  • Updateを止めるときにはenabledをfalseにする。
  • deltaTimeを使用することでタイマーを作る。
  • 変数をstaticにすると別のシーンで(スクリプト名).(変数名)と記述するだけで変数を利用することができる。
  • ボタンの中身を判定するときにはOnClickメソッドに引数を与えるか中身のテキストをGetComponentで判定する。
  • いくつかのシーンで使用する機能を実装するときにはシーン名の文字列を変数に入れてDontDestroyOnLoadを使用する。
他にも色んな技術があった気がするがとりあえずこのくらいにしておこう。ちなみに他にも「UIのボタンをtransform.positionの値をいじることで配置を変える」「Instantiateメソッドを用いてステージごとにボタンの場所を変える」などやることはたくさんあるので一つ一つ課題を解決していこう。

unity1weekに参加しました&ゲームを作りました

先日unity1weekというイベントに参加したことはブログに投稿しましたが一応ゲームができたので投稿しました。

unityroom.com

ゲームの内容についてはあえてこのブログでは触れません。興味を持った方はぜひプレイしてみてください。あと私も他の人のゲームをプレイしようと思っています。よろしくお願いします。

unity1week初参加の感想ですが、とにかく大変だったというのが真っ先に浮かびます。最初は文字オブジェクトをクリックで判定する方法から始まり、ボタンの実装・文字列の並び替え・UIの実装・効果音およびBGMのコントロール・ビルドなどとにかく一人でゲームを作り上げたこと自体が初めてなので様々なことでつまづきました。しかし、つまづきが見つかるとその都度ぱっと見楽な方法に逃げたり友人に質問したりインターネットや本で調べたり色々試したりしながらゲームを作り上げていくのは非常に良い経験で今後のプログラミング学習やゲーム制作活動にも何らかの形で生かされると思いました。

さて、今後の課題についてですが現時点でいくつか見つかっています。ステージごとにボタンの配置や数を変える機能を実装したり、ランキング機能のエラーを修正したり、実際に遊んでみて適切な難易度に調整したりなど色々修正していきたい部分はあります。また、今回は文字のフォント・BGM・効果音にフリー素材を使用しましたがグラフィックについてはほとんど何も考えずに制作にとりかかったため、次はグラフィックにもある程度力を入れたいと思っています。ただ絵が下手なのでこれまた他サイト様やイラストレーターの方の協力が必要不可欠ですね・・・。まあこれもまた経験なので積極的に取り組んでいきたいと思います。

とりあえずunity1weekお疲れさまでした。今後もよろしくお願いいたします。

【unity1week進捗】ビルドが思い通りにすすまない・・・

f:id:osenbei-holic:20200301080226j:plain

 

ついにunity1weekに向けて発表してきたゲームが完成した。まだレベルデザインの観点から見ると何もしていないに等しいので正確には完成とは言い難いが少なくとも人前に出して恥ずかしくない程度のゲームにはなっただろう。これに加えて現時点(2020年3月1日8時04分)で残っている作業のうち今日中にやらなければならないのは「ランキング・ハイスコア機能の実装」「ツイッター機能の実装」「WebGL形式でのビルド」の3つであるが、いずれも中々うまくいかない。しょうがないのでビルドだけでも試してみてサークルの人にテストプレイをしてもらおうと思ったのだが、ここでトラブルが発生した。なんと文字をクリックしても得点が加算されず全て不正解の判定になるのだ。プロジェクトの時点では全く問題がなかったのだがどうしてこうなったのだろうか。インターネット上でいくら調べても見つかりそうにないし私はいったいどうしたらいいのだろうか・・・。とりあえず徹夜明けなのでいったん寝てから友人に相談してみよう。きっと何か解決策が見つかるかもしれない。

 

思えばとんでもない1週間だった。アイデアはすぐに浮かんだものの最初の数日間は全くと言っていいほど作業をしておらず、残りの2日間(おとといと昨日)で半分以上の機能を実装してしまった。そのうえ昨日は腹痛でまともに作業ができなかったので実質1日で大半の機能を実装してしまったことになる。しかし、友人に相談したり色々調べたりしながら1つのゲームを作り上げていくという経験はとても大きなもので、なんとなくではあるが達成感のようなものも見えてきた。もっとも、まだまだやるべきことはたくさんあるのでそのうち改善していきたい。

コロナウイルスの影響と今後の予定

もうすぐ3月になり春休みも後半戦に突入する。今年の春休みは長崎に帰省してゆふいんの森号やキハ66・67系に乗車したり地元の大学のゲームジャムに参加したりといったイベントを予定していたのだが、どうやらこれらのイベントは全て中止になるかもしれない。というのも、これを読んでいる方はご存じの通りコロナウイルスが日本中で広がっているからである。

コロナウイルスがどのようなものなのかよく分からないが、どうやら飛沫感染によって感染するケースが多いらしく、持病の種類のよっては重症化する恐れもあるらしい。幸い広島も長崎もまだ感染者は確認されていないが、九州地方の福岡・熊本と中四国地方の徳島では感染者が確認されている。さらに今回は新幹線で帰省するのだがそのときに感染して長崎に持ち込むという可能性もゼロではない。うがい・手洗いには気をつけているがマスクに関してはいまだに入手不可能という状況が続いているのでこのままではマスクなしで帰省する羽目になるかもしれない。

不本意ではあるが春休みの旅行はあきらめるしかない。もしここでコロナウイルスはもちろん他の病気などにも感染してしまうと今後の生活に多大な影響を与えることになる。したがって余った時間をどのように活用するのか考える必要がある。長崎大学のゲームジャムについては今のところ中止の知らせは届いていないが、場合によっては中止になるかもしれない。主催者と連絡を取り合うことが大切であるようだ。実家に帰省したらおそらくは暇になるだろうからゲーム制作をすすめるか、あるいは下宿先から数学とプログラミングの本を持ち込んで勉強したほうがいいだろうか。とにかくこれ以上春休みを無駄に過ごすわけにはいかない。お出かけができないならできないなりに有意義な時間を過ごしたいものだ。

 

さて、春休みが終わるといよいよ2年生である。2年生の間は勉強を頑張るのは当たり前だが、サークルでの活動にも力を入れたい。というのも、夏休みには鉄研の夏合宿とシンフォギアライブ2020が、冬休みにはコミックマーケットがあるからである。これらのイベントに向けて毎月節約生活を送りつつ活動資金を貯めたい。さて、寝ますか...。

【unity1week進捗】ランダム配列の方法について【学習記録】

※以下の内容は全てUnityとC#において有効な内容です。

  • 50音のひらがなから『さ』と『ち』をそれぞれ1つずつ選びその後に『さ』と『ち』以外のひらがなを被らないように複数取得したい場合は以下の手順に従う。
  1. 50音から『さ』と『ち』を抜いたstring配列(ここではcharacterとする)を作成する。
  2. 並べたい文字を組み込んだstring配列(ここではaとする)を宣言する。
  3. a[0]とa[1]に『さ』と『ち』を代入する。
  4. for文を用いてa[2]~a[(適当な変数)]にcharacterの文字列を代入する。
  5. aをOrderBy(i=>Guid.NewGuid()).ToArray()メソッドを用いてランダムに並べ替える。
  • 取得した文字列を画面上に配置するときにはUIのButtonを用いるとよい。なお、このときにGetComponentInChildrenを用いるとテキストをスクリプトから変更することができるようだ。
  • 画面上に配置するときにはfor文を使用する。

 

ちなみに使用環境は

となっております。