これまでつくったもの(ゲーム編)

ポートフォリオというほどではないですが、現時点までの軌跡を振り返ってみました。
自分はこんなゲームをこれまで作ってきた者です。

個人編

かずあて

gforestshade.github.io 2017年12月につくりました。数当てゲームと称した謎解きゲーです。
これが事実上の初Unity作品になります。

富山湾を鍋にしよう!

2017年のつくるUOZUハッカソンで作りました。
その後はそのとき組んでた方と連絡がつかず、公開許可が得られなかったため、お蔵入りとなりました。

Teku Teku Note

unityroom.com 2018年下旬ごろから、短期開発がマイブームになります。
その流れでUnityroomの1週間Game Jamに参加するようになりました。
これは2018年11月「10」への投稿で、音符の名前から種類を当てるクイズゲーです。
音符がぴょこぴょこしてかわいいのでお気に入りです。

落ち着いて素数を数えるだけ

gforest-shade.itch.io ほぼ同時期から、ボイスロイドキャラの2次創作ゲームに手を出しています。
そちらのゲームジャムがあるときも、なにか作るようになりました。
これは第2回のゲームジャムへの投稿で、素数ゲーです。
素数を数えるのです。

雲流歌

unityroom.com またまたUnityroom1週間Game Jamへの参加作品です。こいつさては短期開発しかしてないですね?
これは2019年03月「つながる」への投稿で、すごろくです。
このときはいまいちゲームシステムを詰め切れませんでした。

雲流歌 feat. ぼいちぇび

gforest-shade.itch.io 第3回のボイスロイドゲームジャムが続けざまに開催されたので、雲流歌をそのまま続けて開発しました。
unity1week版はいまいち納得がいかなかったこともあり、もうちょっとゲームとしてまとまるような変更を加えています。

はたらくひつじさんとやさしいもぐらさん

unityroom.com いつものUnityroom1週間Game Jamへの参加作品です。
これは2019年07月「あつめる」への投稿で、資材を集めて島を脱出するゲームです。
自分にしてはややストーリーも頑張りました。

チーム編

大ヒットラノベメーカー

unityroom.com チームでも短期開発!
2019年5月の連休を使って、5人のチームで1本つくりました。
チャゲーです。ガチャたのしい。ガチャはいい文明。

github.com また、大ヒットラノベメーカーのソースコードは公開しています。
外部アセット禁止縛りのチャレンジを兼ねていて、
UniRxもDoTweenも無しで今の自分が書くとこうなるという実力が出てしまっています(恥ずかし)。

俺の霊魂をこえてゆけ。

unityroom.com つくるUOZUハッカソンでリベンジ! というわけで、2019年夏のつくるUOZUハッカソンで作りました。
2Dスクロールアクションです。1人でやるのではないとはいえ、
2日間といういつもよりさらに短い超短期開発はスリリングで楽しかったです。

宣伝

みんなー! 途中で出てきたつくるUOZUプロジェクトを知っているかな!?
ゲームクリエイターになりたい人を応援すべく、いろいろなイベントをやっているらしいぞ!
直近では、なんとプロゲームクリエイターによる指導が受けられるイベントもあるんだ! uozu.connpass.com

ふるさとで、好きな仕事で輝きたい。
富山県魚津市ゲームクリエイター育成プロジェクト、
つくるUOZUプロジェクト の詳細はこちらから
つくるUOZUプロジェクト

俺の霊魂を越えてゆけ。 をつくった話

発端

つくるUOZUプロジェクトというものがあります。
富山県魚津市という、どこにあるのかよくわからない田舎の町で、
ゲームで町おこしをするぞ!
……という、なんだかどこかで聞いたような。
そんなことを掲げているプロジェクトです。

しかしつくるUOZUが他とちょっと違うのは、
「ゲーム会社を誘致する」
のみを目的とするのではなく、
「ゲーム開発の人材がたくさんいる町にする」
「ゲーム開発の人材を育成するサイクルを作る」
「創業支援をきっちり行う」
などを同時に目指していることにあります。

とまあそんなことはどうでもよくて、ハッカソンが開かれたんです、ハッカソン
東京なればいざ知らず、ここ富山県でゲームハッカソンが開かれるというのは、
もはや黒船、文明開化の波が来た、高度経済成長期、
とにかく珍しいことです。
行くしかない! 乗るしかないんです! このビッグウェーブに!!

1日目

というわけで、やってきました「UOZUゲームハッカソン 夏の陣」。
ゲーム会社からの仮想案件というテーマを完全に無視しまして、
「自分を犠牲にして後続の道を切り開く」
をコンセプトになんかつくることにしました。

ジャンルを考える

コンセプトを普通に読むと、
パズル要素かアクション要素のどちらかは必要であるように思われました。
なら、パズルアクションでいいかな?
というわけで、2Dプラットフォーマーをベースにやっていくことにしました。
惜しくも今日は持ってきませんでしたが、
和尚本にあったから思い出しながらできるかも!
Unityの寺子屋 定番スマホゲーム開発入門

プレイヤーキャラクターをつくる

さて、そうと決まれば、最低でもプレイヤーの実装は必須です。
あとは流れでなんとかなるでしょう。
今回はRigidbody2Dに全部お任せすることにしました。
とりあえずCapsule Collider2Dをつけておきます。
チームメイトが素晴らしい絵をかいてくださいました。

f:id:gforest_shade:20190727195256p:plain
PC

入力

入力を受け付ける処理を書いていきます。といっても、左右移動とジャンプができれば十分でしょう。

private void Awake()
{
    Rigidbody2D rigidbody = GetComponent<Rigidbody2D>();

    // 左右入力で左右移動
    this.UpdateAsObservable()
        .Where(_ => canMove)
        .Select(_ => Input.GetAxis("Horizontal"))
        .Subscribe(input =>
        {
            transform.localPosition += Vector3.right * input * _MoveingSpeed;
            onPositionChanged.OnNext(transform.position);
        });

    // 右入力で右を向く
    this.UpdateAsObservable()
        .Where(_ => Input.GetAxis("Horizontal") > 0)
        .Subscribe(input =>
        {
            playerDirection.Value = 1;
            transform.localScale = new Vector3(1f, 1f, 1f);
        });

    // 左入力で左を向く
    this.UpdateAsObservable()
        .Where(_ => Input.GetAxis("Horizontal") < 0)
        .Subscribe(input =>
        {
            playerDirection.Value = -1;
            transform.localScale = new Vector3(-1f, 1f, 1f);
        });

    // ジャンプ入力でジャンプ
    // 上方向にAddForce()するだけ
    this.UpdateAsObservable()
        .Where(_ => Input.GetButtonDown("Jump"))
        .Subscribe(input =>
        {
            rigidbody.AddForce(Vector2.up * 4.7f, ForceMode2D.Impulse);
        });
}

接地判定をする

このままでは無限ジャンプできてしまうため、
接地しているかどうか判定しなければなりません。
すこし時間をかけていろいろ試したのですが、
無限に悩んでいるわけにはいかないので、
とりあえず接地判定用のColliderを最初からつけておくことにしました。

f:id:gforest_shade:20190727195256p:plain
下の四角がそれ

カレーを食べる

おいしかった!

ミスの仕組みをつくる

ミスの仕組み自体は、和尚本を思い出して参考にしました。
ステージ全体を覆うような大きいColliderをつくり、
そこから出たときに1ミスとして扱います。

f:id:gforest_shade:20190727204017p:plain
チームメイトからどんどんアートが上がってくる

ここで、
「ミスした地点に新しい足場を出現させ、 それをのりこえて進んでいく」
というアイデアが出たので、
コンセプトの解釈はそれでいくことにしました。
ステージにあらかじめ霊魂スポナーとスイッチを並べておいて、
「プレイヤーがミスしたとき、最後に触れていたスイッチに対応するスポナーから、霊魂(足場)を出現させる」
という実装にしました。

また、ミスすることが前提になるので、
ミスして霊魂を出したらプレイヤーを即リスポーンさせるようにしました。
いちいち操作や演出を挟むとゲームのテンポが悪くなると思ったためです。

温泉に入る

えがった。 www.kintarouonsen.co.jp

霊魂の種類を増やす

ギミックがひとつではさみしいので、
「生前にアイテムを取っておけば異なる種類の霊魂が出てくる」
を実装することにしました。

アイテムの絵、プレイヤーが形態変化した絵、新しい霊魂の絵などが
どんどん上がってくるので、どんどん実装しました。

f:id:gforest_shade:20190727214020p:plain
天使の羽
このあたりはPlayerControllerが神クラス化しないようにわりと気を付けていました。

ちゃんと寝る

えらいっ!

2日目

スクロール処理をつくる

この時点で一応コンセプトは実現していたので、
BGM・SE・背景・アニメーションなどのお化粧に手を付けつつ、
タイトル・ステージ選択などのアウトゲームもつくりつつ、
自分はスクロール処理をつくっていました。

カメラを気持ちよく移動させる処理を書くのが難しいことはわかっていましたので、
そこは思いっきり妥協したアルゴリズムでさくっと実装してしまいました。

あとはお化粧のほうをお手伝いしたりしつつ……

できた

できたー!

総括

たのしかったです。

できたやつ

unityroom.com

『デジタルからくり装置作りワークショップ』に参加してきました

つくるUOZUプロジェクトの2月『GAMEサミット』が開催されるんですって!
よぉし! 見学しにいきましょう!

きちゃった

というわけでやってきました、『デジタルからくり装置作りワークショップ』。

f:id:gforest_shade:20190223204028j:plain
会場の様子(準備中)

小学生~高校生が対象の、「ゲーム作り」と「協働」を
テーマとしたワークショップだそうです。
ぶっちゃけ、Unityでピ〇ゴラ装置をつくろう! というだけなのですが、
これがとてもよく考えられていて、小中学生でも3時間に収まって、
しかも楽しいように設計されていました。

見学だけの予定が、定員割れの回でちゃっかり混ぜてもらえて
体験してきましたので、そのときの感想も交えて書きます。

横文字を自重しない

けっこうびっくりしたのが、
横文字の使用をそれほど自重していなかったところです。
レベルデザイン」とか「アートワーク」とか、
キーとなる言葉はどんどん使っているようでした。
たしかに、そのほうがいいのかも……と思わされました。

UnityのSceneビューだけ

とはいえ、どうやってUnityを子どもたちに導入するんでしょう……?
と思っていましたら、
Sceneビューの移動、回転、拡大の操作に絞ってコーチングがありました。
ロジック組み込み済みのGameObjectを配置するだけでも十分楽しいというのは
実際にやってみて初めて分かった体験で、
前に知り合いがUnityのことを例えて「レゴブロックみたい」と言っていたのがわかった気がしました。

ドミノ楽しい

ピ〇ゴラ装置らしく、ドミノ倒しと球がベースなのですが、もうすでに楽しいです。
近づけすぎて倒れなかったり、離れすぎて届かなかったり、うまく曲がれなかったり。
でもだからこそ、うまくいったときがすごく楽しいです。
ドミノがぱたぱた倒れるの、楽しいですよね。

お絵描き

途中、ゲームに出てくる絵を自分でクレヨンで(アナログ!)描く時間がありました。

どうやって取り込むのかと思いきや、
カメラを使ってWebアプリから撮影して、
サーバサイドで画像処理がされて、
UnityのプレハブにID番号を入力することで
ネット上からランタイムでテクスチャを取得する、
という仕組みのようでした。
なるほど、これならかざすだけ簡単!

アートワークがゲームの印象に与える大きさは、
クリエイターにとっては常識ですが、
初めての子どもたちにはわからないことです。
うまく伝えられるよう工夫されているなあ……と感じました。

みんなでひとつの

1人に1つSceneが割り当てられていて、
シーンの床から落ちた球が次のシーンの入り口に落ちていくようになっていました。

で、UnityCollaborateで同期をとる仕組みになっていました。
これにより、前のステージから落ちてきた球のスピードによって
自分のステージの挙動が変わる、ということを実体験できるようになっていたのです。

これはほんっとうによく考えられていると思いました。
Sceneの分け方、Editor拡張でのちょっとした支援、
クリックのみで操作が完結する簡便なUnityCollaborateの合わせ技で、
なるほどたしかに、「協働」の体験がうまく収まっていました。これはすごい。

楽しかった!

いつの間にか、自分が楽しんでしまっていました。
いっぱい参考になったし、子供たちのぶっ飛びアイデアに刺激も受けたし、
大変有意義でした。

宣伝

こんな楽しげなイベントをやっているつくるUOZUプロジェクトでは、
ゲームクリエイターになりたい人も募集しているぞ!
実際にいくつかのゲームが制作されてもいるんだ!
そして! これが筆者のチームが鋭意制作中の伝奇ノベルゲーだ!
すごく面白いぞ! ぜひ体験版やってね!
f:id:gforest_shade:20181128152051p:plain:w128
喰人記【しょくじんき】公式サイト|すこやかメテオ

ふるさとで、好きな仕事で輝きたい。
富山県魚津市ゲームクリエイター育成プロジェクト、
つくるUOZUプロジェクト の詳細はこちらから
つくるUOZUプロジェクト

Unityroom1週間ゲームジャムに参加しました

最近、ゲームを作る趣味を始めました。
初心者ということもあり、短期で集中してできるイベントないかなー、
できればオフラインじゃなくってオンラインならうれしいなー

っと思っていたところに、
Unityroom1週間ゲームジャムというものが開催されるそうではありませんか!
これは乗っかっていこう!

体験記

お題が発表されるまで

3Dゲーム、少なくともグラフィックが3Dで描画されるゲームに
チャレンジすることは決めていました。
3Dグラフィックはやりたいと思いつつも
ずーっと後回しにしてきたもので、
この機会をとらえて集中してやってみようと思ったのでした。

しかし全く無知の予習なしで飛び込んでも撃沈してしまうでしょう。
いちおう、Unityのチュートリアルのうち、
玉転がしとシューティングだけはやっておきました。
しかし、なぜこうも3Dだけは譲らないつもりだったのかというと......

出会い

時は少しさかのぼり、Asset Storeをぼーっと眺めているときのことでした。
こんなAssetを見つけてしまったわけです。

The Notes
https://assetstore.unity.com/packages/3d/characters/the-notes-17964

か、かわいいーーーーー
かわいすぎるーーーーーーー
このぴょこぴょこ感!
良すぎるううぅぅぅ
ぜったいこれいつか使う!

......ということがあったのでした。

1週間という期間

1週間というのは初心者がゲームを「完成」させるには
あまりにも短い期間だということもわかっていました。
なので「絶対に無理はしない」ということを考えていました。
こだわるのは「3D」だけ。ほかのあらゆる部分で妥協を惜しまず、
音符モデルを使いたいという欲望も必要なら捨てる、
という心構えをしておきました。

1日目:お題「10」

お題が発表されました!
まずは企画です。
10秒・10ステージ・足し算や引き算を用いるパズル.....いろいろありますが、
構想にかけられる時間は多くても1日だとわかっていました。
なんとか音符モデルを使えないか、1日考えたところ、

10種類の音符とかくれんぼをする

が一番よさそうだと思ったので、それで行くことにしました。

2日目:音符を隠す

とりあえず10種類の音符を出してみて、
それらが隠れる場所(木や石)をもう10か所、
合計20のオブジェクトを出してみると、
それら20個をすべて画面内に収めることが困難なことがわかりました。

ここで2つの代替案が浮上します。

  • 音符と同じ位置にシリンダーが出てきて、回転したり入れ替わったりした後にお目当ての音符の入っている位置を当てる
  • ランダムな位置に出てきたいろんな種類の音符たちの中から時間内にお目当ての種類の音符を当てる

時間がないので、あまり悩む時間はありません。
すこしだけ悩んだ末、
「ランダムな位置に出てきたいろんな種類の音符たちの中から時間内にお目当ての種類の音符を当てる」
を選びました。

3日目:カメラ

3日目はランダムに出てきた10種の音符たちを全部視界に収めつつ、
音符っぽさも失わないようにするためのカメラ位置の模索に費やされました。

10種の音符たちは全部床の上に出現するので、
上から見下ろさないと容易に音符同士が重なってしまい、
後ろの音符が見えなくなってしまいます。

そこで、必然的にカメラは見下ろしになりました。
見下ろす角度を大きくすればするほど、音符が前後で重なりにくくなりました。

しかし、見下ろす角度を大きくすればするほど、
音符が音符に見えなくなってしまいました。
音符の棒部分は縦に細く長いので、上から目線になればなるほど、
ちんちくりんの何かに見えるようになってしまいました。

カメラをああでもないこうでもないと動かしたり、
音符自体を後ろに傾けてみたり、やっぱり戻してみたり、
カメラの角度を45度にすることで心が決まったところで、3日目は終わっていました。

4日目:クリック

シーンにEvent Systemを追加して、CameraにPhisics Raycasterをアタッチすれば
カメラの方向からRayが飛んで、ぶつかったColliderを見ることで、
マウスポインタが指しているオブジェクトを取得できることはわかっていました。

しかし、具体的にどのようにすれば選択している感触が再現できるのかは
わかっていませんでした。
後ろにオーラを出すような方法は大変そうだったので、
自分が光ればいいのかな?

ということで、MaterialのColorを取得し、明度を25%上げてEmissionに設定してみたら
いい感じに光ったので、これでいくことにしました。
さらに、普段も少しだけ自己発光させておくと蛍光色パステルカラーっぽさが出て
かわいくなることがわかったので、そうしておくことにしました。

クリック時にGame Controllerに通知する機能もつけました。

5日目:ルール

音符の挙動とカメラワークにかなり時間をとられて、ゲームのルールの実装が全く手つかずでした。
焦りますが、クリック検出まではできているのです。
「絶対に無理はしない」を心に留めてやっていきました。

とりあえずスコアと探しべき音符の種類を指定するUIをつくりました。
Text Mesh Proを使ったのですが、使い方を微妙に忘れていて意外に時間を食いました。

10個の音符を出現させる→正解はどれか決めておく→クリックを待つ→
→正解か間違いか判定する→正解/間違いアニメーションが再生される→
→残りの音符が引っ込んでいく
までを1Waveとして、とりあえず10Waveほど繰り返しました。

こういう制御はコルーチンの出番!ということでガシガシ書いていきました。
これで、ひとまずプレイできる状態になりました。

まだタイトル画面もリザルト画面もないですが、ここでいったんアップロードしました。
最悪、出来上がらなくても努力が完全に無に帰すことはない、
という安心感的なものを確保するのはだいじです。

6日目:UI

あれだけ悩んで45度と決めたはずなのに、実際にプレイしてみると
カメラワークの問題で音符の種類が見分けづらいのなんの!

とくに、2分音符の穴や符点を見間違える事故がテストプレイ中に何度も起こりました。
角度がついているので、下のほうにある穴や点は(とくに手前側にあるときは)
かなり見えづらくなっていたのでした。
正直かなり気持ち悪い間違え方なので(だって見えないんだもん)、
結局カメラを正面に下げる機能をつけることにしました。

そろそろ床や壁もテクスチャを貼りたいころです。
ファンシーなかわいい感じにしたかったのは山々でしたが、
ここは「無理をせず」木の壁とカーペットの床で妥協しました。

リザルト画面やBGMも必要です。
ここも"かわいい路線"を目指す以上世界観を構築する大事な要素だとわかっていましたが、
ある程度のところで妥協していきました。

タイトル画面をとりあえずでっちあげたところで、6日目は終わったのでした。

7日目:難易度

何をするか結構悩んだのですが、
もうちょっとゲームっぽく難易度をつけようと決断しました。

とくに音符の名前というものを全く知らない人には
「なにしていいのかわからない」と言われても仕方ないゲーム性だったので、
音符の種類を紹介する「かんたん」モードは必要だと思ったのでした。

「かんたん」ができたところで、やっぱり

可能なら歩き回る音符を見てもらってかわいさを伝えたい!

という思いが出てきてしまったので、
時間の限り「むずかしい」を制作することにしました。

壁際で方向転換させることにかなりてこずり(rotationむずかしい!)
Transform.LookAt()を使えばいいというところに行きつくまで結構時間がかかってしまいましたが、
どうにか間に合ったのでした。

感想

つかれた!たのしかった!

今こうして振り返ると、
1画面に収まらないのならプレイヤーが動けばいいのだからかくれんぼ諦める必要なかったなあ
とか
シリンダーで隠してシャカシャカ路線のがよかったかなあ
とか
出来上がったゲームはあんまりテンポがよくないものになっちゃったなあ
とか
いろいろ思うところはあります。

でも得るものもだいぶ多かったのです。
3Dグラフィックのゲームを実際に作ってみるという当初の目標はぶれずに最後まで持っていられましたし、
Material, Shader, Camera, Lighting, Animator, Character Controller......などなど、
いろんな概念についても知ることができました。
次以降に活かしていきたいですね。

宣伝

実はUnityroomで開催されているもう1つのイベントにも参加してるよ!
みんなやってね!
伝奇もののノベルゲーだ!すごく面白いぞ!
f:id:gforest_shade:20181128152051p:plain:w128
喰人記 | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

ふるさとで、好きな仕事で輝きたい。
富山県魚津市ゲームクリエイター育成プロジェクト、
つくるUOZUプロジェクト の詳細はこちらから
つくるUOZUプロジェクト

はてなはじめました

自分用のブログもあったほうがいいかなーということで。