Unity1週間ゲームジャムにUnity歴ほぼ0日で参加した話

Unity1週間ゲームジャムに初参加してゲームを提出するまでやったことを忘れないように書き連ねておきます。

自分みたいにゲーム制作初心者でも、この程度のクオリティでも出してもいいんだよー、みんなコメントくれるし温かく迎え入れるんだよー、みたいなのが伝われば幸い。

## はじめに

[Unity1週間ゲームジャム](https://unityroom.com/unity1weeks) とは **Unityを使って1週間でゲームを作るイベントです。**(そのまんま)

今回のお題は「密」で、2020年04月27日(月)〜2020年05月03日(日) 20:00 の間に提出しろというルールでした。

自分のスキルについて、普段はwebエンジニアでRailsを書いたりAWSを弄ったりしています。
過去に[takeokunn/takengine](https://github.com/takeokunn/takengine)というゲームエンジンを勉強がてら作ったことがあるのでゲームがどういう風に動いているのかは知っていました。

きっかけは同僚が一緒に参加しようよって誘ってくれたことでした。元々ずっとUnity触りたいって思ってたけどなんだかんだでやったことがなく、ちょっとしたサンプルコード動かしたは良いけど何やって良いのかわからないというので挫折していまいた。

## 今回の自分ルール

**不具合があろうが、出来が悪かろうが必ず提出すること**

「ゲームはタイトル画面とゲーム画面とリザルト画面があればゲームと言える」とどこかで聞いたことがあるので、最低限これを満たすことにしました。

そもそも自分はフルタイムで働いてるので平日夜+土日しかできなく時間が限られています。
普段やってもいないことでそんなクオリティ出せるわけがないので、とにかく提出することに集中しました。

## 成果物

**[No!密！](https://unityroom.com/games/no_mitsu/)**

2Dアクションで敵にぶつからずにゴール(家)にたどり着けばクリアというめちゃくちゃ単純なゲームを作りました。
壁キック機能がうまく動いていなくて上にスライドしたり、背景画像をうまく貼れなくて適当になってたり、当たり判定がやばくてうまく動いていなかったり色々不具合があります。

<img width="1112" alt="Screen Shot 2020-05-10 at 4.39.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125325/bc6ae162-66ac-5e03-93c6-ab7c3499dc9a.png">

## やったこと

### 4/27(月)

他の人がどんなゲームを過去に提出しているんだろうと思い、[お題「逆」(336作品)](https://unityroom.com/unity1weeks/15)と[お題「さがす」(318作品)](https://unityroom.com/unity1weeks/14)にある人気のゲームを片っ端からやりました。結局40本くらいやった気がする。

中でも良かったゲームは次の3つ

* [△atled](https://unityroom.com/games/atled)
* [YOZORA MAKER](https://unityroom.com/games/coffee-r-202002)
* [セーフ・ハウチュ](https://unityroom.com/games/safehoutyu)

[△atled](https://unityroom.com/games/atled)みたいなゲームが作れたらかっこいいなーってテンション上がりまりました。
[セーフ・ハウチュ](https://unityroom.com/games/safehoutyu)にハマって朝3時までやってしまった。やりこみまくってスコア45000点まで出したんだけど70000点くらい取ってる人どうやったの...?って本気で疑問です。

### 4/28(火)

まずはUnity最新版を入れるところから。UnityHub本当に便利ですねすごい。
他の参加者はどういう風に開発をしているのかわからなかったので、ネット上に転がってるブログを片っ端から読みました。
大体以下のように取り組んでいました。

```
大まかな企画を作る
↓
ゲーム画面のラフの作成
↓
システム設計
↓
素材作成
↓
ざっくり動くものを作る
↓
細かい実装
↓
実際に遊んでみて調整
↓
提出
```

自分の今の能力では企画を作るのも素材を作るのも調整も無理と判断。せいぜいプログラムを書くのが精一杯。無力。
良さそうなチュートリアル探し、それを自分なりにアレンジを効かせてなんとか提出するというのが精一杯というのがわかった。

提出できそうなチュートリアル記事を沢山探したが、blog記事だと細かいUnityのGUI操作がわからなさすぎて無理ということがわかった。Unity複雑すぎて何をどう動かしたらどうなるのかがわからないし、どこに何があるのかが全然わからなくて無理ということがわかった。

なので動画で学べたほうが良いなと思い、youtubeでひたすら良さそうなチュートリアルを探したところ、 [[Unity] Creating a 2D Platformer](https://www.youtube.com/playlist?list=PLFt_AvWsXl0f0hqURlhyIoAabKPgRsqjz) という1動画15~20分、計13回の丁度よい分量のチュートリアルを見つけた。
第1回の視聴回数が35万回くらいあるのに対して、第13回の視聴回数が4万回程度なのが面白い。

<img width="1290" alt="Screen Shot 2020-05-10 at 5.42.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125325/b2e51da5-4c1a-edf8-00f8-46872e8ca6d2.png">

取り敢えず第1回をこなしてみたらとても良い感じだったので、これにしようと決心した。

C#のコード書くならエディタ何が良いんだろうと試行錯誤してたけど、なんだかんだ[Visual Studio for Mac
](https://visualstudio.microsoft.com/ja/vs/mac/)が安牌ぽかったのでインストールした。(時間かかった)
emacsユーザなのでできればemacsが良かったんだけど、良い感じに補完効いてくれなかったので諦めた。

### 4/29(水)

祝日だったので一日まるまるつぎ込めた。

気合で [[Unity] Creating a 2D Platformer](https://www.youtube.com/playlist?list=PLFt_AvWsXl0f0hqURlhyIoAabKPgRsqjz)をやりきった。

このチュートリアルはプログラミング経験のある人だったら20~30時間くらいあれば一通り理解できそうな内容だった。
操作が早すぎるので一つ一つのGUI操作を追うのが非常に大変だったし、コーディングも早いので何をやっているのか逐一printfデバッグをして追うのが非常に大変だった。
C#も使ったことがなかったので文法がわからなく苦労したけど、言語仕様が簡単で良かった。良い言語だと思う。

この日は25時間くらい(?)プログラミングにつぎ込んでなんとか一通り動くようにした。
翌日朝6時くらいに終わって感動していた楽しい！！！！！！！

### 4/30(木)

前日徹夜したから何もせずダウン。
仕事では特定の人しかsshできないec2を見つけて頭抱えてたと思う。

### 5/1(金)

とりあえず画面遷移できないとゲームじゃないよなと思い、Unityの画面遷移についてめちゃくちゃ調べたがイマイチどれもぱっとしなかった。(個人の感想)

以下のような`GameSceneManager`を作り、`Controller`側で呼び出して管理をしやすくした。

```csharp
using UnityEngine.SceneManagement;

public class GameSceneManager
{
    public static void HandleLoadScene(Scenes scene)
    {
        SceneManager.LoadScene(GetScene(scene));
    }

    public static string GetScene(Scenes value)
    {
        string[] values = { "TitleScene", "MainScene", "ResultSuccessScene", "ResultFailureScene" };
        return values[(int)value];
    }

    public enum Scenes
    {
        Title,
        Main,
        ResultSuccess,
        ResultFailure
    }
}
```

```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ResultScene : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Z))
        {
            GameSceneManager.HandleLoadScene(GameSceneManager.Scenes.Title);
        }
    }
}
```

ついでにBGMとSEもつけた。適当にそれっぽい音さえなればいいやということであまり時間をかけずに選んだ。
[【Unity】音声（BGM・SE）の再生・ループ・フェードアウトなどの設定方法を徹底解説！](https://xr-hub.com/archives/18550)がわかりやすくて良かった気がする。

* ぶつかる音: [打撃09](https://otologic.jp/free/se/hit01.html)
* ジャンプ音: [マリオ　ジャンプ音1](http:/commons.nicovideo.jp/material/nc67638)
* タイトル: [Days](http://www.hmix.net/music_gallery/feeling/happy.htm)
* ゲーム画面BGM: [三番街のボス猫](http://www.hmix.net/music_gallery/feeling/happy.htm)
* リザルト成功画面BGM: [フレーズ05](https://otologic.jp/free/se/phrase01.html)
* リザルト失敗画面BGM: [フレーズ04](https://otologic.jp/free/se/phrase01.html)


### 5/2(土)

同僚氏があまりの終わらなさにモンスターを大人買いしててビビった。

シーン管理が前日に作り終わっていたので、実際に敵とゴールを置いて一通り動くところまでもっていった。

たまたまtwitterで過去に素材を提供してくれた友人を見つけたのでラッキーと思い作成を依頼したら快く引き受けてくれた。
想像以上のクオリティで僕満足。
<img width="351" alt="Screen Shot 2020-05-10 at 5.48.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125325/5d68f929-e632-a053-85e6-589d7aaaa3bb.png">

もらった画像を埋め込むために頑張ったが、cameraの挙動がわからなく無事死亡。
今でもわからない。。。。

`RaycastHit2D` や `BoxCollider2D` が自分の思うように動いてくれなくて本当に辛かった。
何故か敵と自機が当たらなくてどうしようかと悩んだし、自機を小さくすると動く床との当たり判定がうまく機能してくれなくて焦った(今もいまいち動いていない)
壁キック機能も作ったのだが、これもまた自機を小さくすると思うように動かなくて壁を登るようになってしまった。(今もいまいち動いていない)

本腰入れて処理を見直そうかなと思ったけど如何せん時間が足りない、妥協。

### 5/3(日)

マップ構成を考えつつ、コードの整理やアセットの整理をした。
ディレクトリ構造やHierachyの整理の仕方が全くわからないし知見が探しても全然ない。。。
<img width="1680" alt="Screen Shot 2020-05-10 at 5.53.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125325/f72b1d50-10eb-3160-9ac6-3deb6c283da5.png">

相変わらずcameraの置き方や背景の反映の仕方がわからなく挫折。
WebGL Buildするとめっちゃずれるし。。。

**まぁいっか！ゲームとして成り立っているし！**

ということで提出！

正直最後の方力尽きてたよね

## おわりに

出来栄えは非常に悪いが提出できてよかった。
いいねが結構ついたしコメントくれた人もいて正直すごい嬉しかった。
参加してよかったなぁ

[unity1week](https://unityroom.com/)のサイトの閲覧回数がGETの度に増え続けるのいいのかな？

いつか[[Unity] Unity1週間ゲームジャム (逆) にて実装した演出をまとめる](https://qiita.com/lycoris102/items/30c3faaa6904c441cd71) のようなエモエモなゲームを作りたいので `Light2D / ShadowCaster2D` や `ShaderGraph` を勉強中。