Unity 1Week GameJamに参加しました!

Posted: 2017年5月31日 カテゴリー: ゲームジャム, Unity1Week
タグ:, , , ,

Unityroomさんで開催された、ゲームを1週間で作る Unity 1 Week Game Jamに参加しましたー!

「ぺいんとぼーる?」という名前でこんなゲームを作りました

ここで遊べます:

 – https://unityroom.com/games/paintball/webgl

一応無事投稿出来たので、少し振り返ります。

思った以上に長くなったので、暇な時にでも見て下さい m_ _m

 

ネタだし?

テーマが「転がる」でしたので、それを元に考え・・・それよりも何か色々塗りたくない?よし、取り合えず何か塗って遊ぼう!

・・・という訳で、最初は前に何処かで見かけたInk Painterを落として遊んでました

色塗るのたーのしー!って事で、球を転がして床を塗ったり、配置物を塗るゲームにしようってなりました(適当)。

 

実装1 – 床塗り

Ink PainterにあるCollision Paintをベースに制作を始めました。このサンプル内に既に床との接触で色を塗る処理がありましたので、これに要素を追加していきました。

まずやった事は球体にサンプルと同じコンポーネントを付けて行って、更に触ると塗る色を変えるオブジェクトを追加しました。

実装自体は簡単に出来て、色が変わるオブジェクトに当たったら、CollisionPainterコンポーネント内のBrush.Colorに新しい色を設定するだけです。おまけで球体自身のマテリアルの色も同じ色に変更させています。

 

実装2 – マップ

床に色を塗る処理と塗る色を変更する処理が出来ましたので、簡単なマップを用意する事に。はい、行き当たりバッタリで作ってました orz

マップは作るの面倒だからアセットを使う事にしたので、使うアセット選ぶにあたって基準にしたのは色を変えたいので元々あまり色がついていない物、かつあまり複雑じゃ無い物にする事にしました。

それで選んだのがSimple Home Stuffです

このアセットは、まずタダ!かつローポリ!かつ基本灰色!という中々都合にあう物でした。

これをインポートして、床をサンプルの床と同じ様になる様にコンポーネントを突っ込んでいきました。

ただ、床のメッシュがデカすぎると一回で塗る範囲がかなり大きくなり、範囲を小さくしても結構荒くなったので、適当にPlane何個かに分けて床にしました。適当にやりすぎて繋目がわかる所があるのは・・・サボり、ダメ orz

 

実装3 – オブジェクトの色塗り

マップが出来て配置物も出来たので、物に触れたらそれを自分の色に変える処理の実装に入りました。

色を変更する際には徐々に変更したかったのでどうするか考えた所、手っ取り早く出来るメッシュの頂点の色を変えていくという適当な実装にしました。取り合えず動かす事優先、ソウ、ウンコードシカタナイ(白目

実装としては:

– Meshから頂点数を取る

– 頂点数と同じ長さのColorの配列を作る

– 色が変わる時はColor配列の色を新しい色に変えていく

– 変える範囲を一定期間で増やしていく(取り合えずは毎フレームindexを1増やす)

– Mesh.ColorにColor配列を設定

という感じです。処理負荷?知らん!後で考える!(その後では来ない

 

ルール決め

基本的な色塗り処理が出来ましたので、この辺でついにどういうゲームにしようか考えて行きました(今更感

– 現状で出来るひたすら時間内に色を塗るだけだと流石に厳しい

– チャレンジ(ミッション?)、ステージギミック、色塗りのパターン増やす、等は出来るが、作業時間(水曜日~土曜日の朝)を考えるとそれらを面白く作るのは厳しいかなーと思い、時間かかりそうな物は捨てる

– 色の変更は入れたい

– なら対戦形式にして色の範囲で勝敗つけるようにしよう!

という流れで今の仕様になりました。

方向性が決まったので、ここで必要な物をザックリと洗い出して、優先度つけて作業していきました。

 

実装4 – 4人まで対応

対戦形式に決まったので、4人までプレイヤーキャラ(玉)を作って必要に応じて画面分割させる処理を追加しました。

特に特別な事はしていませんが、作りとしては一つのゲームオブジェクトの中にキャラとカメラを入れてプレハブ化し、それをプレイヤー人数分インスタンスを作りました。

 

画面分割はだいぶ前に書いた記事で紹介しています:

 –  Unityメモ – 画面分割する方法

Viewport Rectのサイズを1人の場合は1、2人の場合は横幅0.5縦幅1、3,4人の場合は0.5のサイズと、それに応じた配置にする様に設定を行っています。

3人の時に右下に空間が空くのが寂しいので、カメラをもう一つ設置し、右下に配置される様にして見降ろしで全体が見られる様にしています。

入力は4種類キーの配置を用意しておいて、何番目のプレイヤーかによってどれを使用するか変更しています。

本当はキーコンフィグとかあった方が良いですよねー、配置結構適当ですしー、ねえ?

 

実装5 – 得点計算&リザルト

兎にも角にもゲームを遊べる事を優先する事にして、ここで時間制限とその後の得点計算&リザルトの実装に入りました。

得点の計算方法は深く考えず(何も考えていないなコイツ)

– 床のテクスチャ内で各色1ピクセル=1点

– 配置物は特定の点数

と言う風にしました。

 

Ink Painterはマテリアルのテクスチャの色を変えている為、床のテクスチャで色を確認して塗られている範囲を大雑把に計算しました(元々被っている物があればアウトですが、今回はないのでセーブ)。ただ、TextureクラスにもMaterialクラスにもピクセルの色を獲得する処理が無い為、一回床からInk Painterで使用しているRenderTextureを獲得し、それを元にTexture2D.ReadPixels()でTexture2Dに変換し、その変換したTexture2DでReadPixel()を呼んで色を比較しています。

ReadPixel()だけでも重いのにこんな色々やってて最適化とかは放り投げてとにかく動かす悲しい実装をしてます・・・

 

計算は(Debug.Log()チェックだけ)終わったので表示に。リザルトを表示する際に、遊んでる時は見える範囲が限られているので、全体像を見せたいなーと思い、見降ろしの全体図をスライドインさせています

 

 

 

 

 

見降ろし図のスライドインは3人用の時に使用しているのと同じカメラを使用し、それにRenderTextureを設定して移した画像を表示して移動させています。見降ろしずは結構ぼやけていますが、これはRenderTextureの解像度が低いからです。こうしたのは単にメモリ節約したかったのと、画像の上にスコアを表示しても見える様にしたかったからです。ただ、素直に画面暗くしたり、ウィンドウ出したりした方が良かったかも知れないです。

 

スコア表示はただ全部出すだけだと寂しいし、気持ちよく無くてもやっとするしなので、軽めの演出を入れています。

基本的には:

– 色を表す画像をポッポアップ

– 画像が出終わったら点数をポッポアップしつつ、フレーム毎にカウントアップして表示する様にする

– ポップアップとカウントアップ両方に効果音を付ける

– 全部で終わったら勝者表示をポップアップさせる

だけです。最後に勝者を出す所もちゃんとSEとかつけるべきでした・・・怠けてすみません

 

実装6 – 演出

基本的な流れは出来たので(え、メニュー?ナンデスカソレ?)、実装4入る前からやりたかった演出追加やっていきました。

現状触ってて問題に感じたのが、配置物や壁にぶつかったり、球体の色を変えてもそんなに気持ちよさが無いので、そこを増幅させる演出を追加してーってなってました。

まずぶつかった時には効果音を再生し、エフェクトを球体の上に表示されるように出しました。

使用したエフェクトは Cartoon FX Pack 4です:

音とエフェクトで当たった時の感触が良くなりましたが、一部の配置物の色の変化の速度や色の変更箇所の順番がスッキリしない時があって気になったので、色を変えるループを前からと後ろから両方で変えていくオプションを追加しました。

色を変える所(インク溜まり?)に入った際も効果音とエフェクトを追加するだけで結構マシになりました。ここもCartoon FX Pack 4 を使用しています。

 

実装7 – プレイヤーの衝突

大体最低限必要な物は揃ってきたので、プレイヤー同士が衝突した際に色を入れ替える機能を追加しました。これは負けてる色を使ってる人が勝ってる色を使ってる人に突っ込んで行ったりする為や、当たった時に何も無いのが寂しいのを紛らわす機能です。

やる事は単純でプレイヤー同士が衝突したらお互いの球体とブラシの色を交換し、衝突時のエフェクトを出すだけです。

一人でしか遊んでないのでちゃんと結果確認してないのですが、追加して良い事があるはず、タブン、キット。

 

実装8 – メニュー

メニューを作ろう!・・・と思いかけましたが、力尽きて結局デバッグ画面にボタン画像を張り付けた様な物になってしまいました orz

次があれば、もう少し頑張ります・・・はい・・・

 

オマケ – Cloud Build

制作の途中からCloud Buildを用意しまして、WebGLとアンドロイド版を作る様にしてました。

ビバクラウドビルド!って言いたくなるほど相変わらず便利でした。アンドロイド版もそのままインストールしたら意外と動きました(入力だけジャイロを使うように変更しています)。

 

ゲーム

一応もう一度、ここから遊べます
 – https://unityroom.com/games/paintball/webgl

 

以上になります。

久々にUnity触りましたが、出来は置いておいて何か遊べる物が作れて良かったです。

主催の方ありがとうございました m_ _m

 

いつも通り思っていた以上にダラダラ長文書いてしまった。これ以上の情報をもっと少ない文字で書けるようになりたい。

コメントを残す