Unity1週間ゲームジャム(2017/04/24〜)に参加しました
Unity1週間ゲームジャムとは?
Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
- @naichilab さんの運営する unityroom というサイトで開催されたイベント
- 1週間でお題に沿ったUnity製のゲームを製作する
- 今回のお題は「跳ねる」
- 最近まとまった時間は取りにくい自分もこれなら久しぶりにゲームを作れると思い、参加を決めた
- 脳内的には即決だった
作ったもの「BounceShooter」
バー回転式リズミカルブロック崩し
Bounce Shooter | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
Bounce Shooter | ゲーム投稿サイト unityroom #unity1week https://t.co/RuEXTfBCfH pic.twitter.com/ELbdPmylmx
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年4月30日
使用アセット
製作過程
1日目 (月)
- 会社に着いたあと、定時までの1時間は作業すると決めた
- まずは要件/やりたいことをまとめる
- なるべくシンプルで複雑なことをさせない
- シームレスに遊べる
- 久しぶりに曲も作りたい
- デザインモックを作りつつ、作りたいもののイメージを沸かせる
- 帰宅後、1時間くらい作業して大体デザインは完成
(こんな感じの作ろうって妄想した) #unity1week進捗です pic.twitter.com/IrV0jDdPFD
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年4月24日
2日目 (火)
- 先日同様に、会社に着いた後にちょっとだけ作業を進める
- (多分使うであろう) アセット群をインポート
- UniRx
- DOTween
- Music.cs
- 素材を書き出してUnity内に配置する
- 以下の開発を行う
- 左右を押したらバーが回転する仕組み
- 一定時間ごとにボールが落ちて来る
#unity1week pic.twitter.com/POGOTU86oR
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年4月25日
3日目 (水)
- ブロック崩しやるならブロックが必要
- ということでブロックを生やす作業
- 予め非アクティブな状態で敷き詰めておく
- 一定時間ごとに非アクティブな状態なものからランダムで1つ選び、アクティブな状態にする
- ブロック側の OnEnable で出現モーションを実行する
- DOTWeenでのモーション作りに関しては以前Qiitaに記事を書いたのでそちらを参照
- またバーに当たった時のフィードバックもここで作業
- パーティクルの作成
- 当たった瞬間だけ大きくなる
社内Slackのゲームジャム部のチャンネルでFLASH時代の社風ではないブロック崩しの話題で盛り上がる
#unity1week pic.twitter.com/bzsQekPvmk
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年4月26日
4日目 (木)
- Unity側は結構落ち着いてきた
- ここで他のゲームとの差別化要因として音との連動を考える
- やりたいことにも書いたが、ここ最近曲を作ってなかったので曲を作りたいなーと考えていた
- とりあえずプレイ時間(60秒~90秒)だけ制約にして作りたいように作った
- 一応脳内ではゲームの進行イメージして徐々に盛り上がって後半でピークを持っていけるように ... だけ考えて、後は好きなように作った
5日目 (金)
- 曲との連携を考える
- Unityにおける音の実装に関しても以前Qiitaに記事を書いたのでそちらを参照
- 以前、サウンドゲームジャム で使用した @geekdrums さんの Music.cs が使いやすかったので今回もお世話になることに
- これ使ってリズムに合わせて Scale を変形するだけでそれっぽくなるからすごい
- CSVで譜面を作る
- 拍毎に何個ブロックを出すか管理するようにする
- 実装は大体こんな感じに
6日目 (土)
- 土曜日は開発お休み
- 子供の世話したり出かけたりしてた
7日目 (日)
- 日曜日は妻も子供と一緒にお出かけということでラストスパート
- 譜面が途中だったので調整
- スコア機能作ってなかったので急いで作る
- 各種衝突時にSEが当たってなかったので急いで作る
- FLStudioのプリセットからそれっぽいものを引っ張って来る
- タイトル/結果画面を作ってなかったので急いで作る
- なるべく他の操作させたくない (一貫性) のとチュートリアルの役割も含めて、左右のキーだけでなんとかなるようにした
- 最初はボールを任意のオブジェクトに当てたらスタートとか考えたけど、今考えると結構じれったくて、現状が良かったのかなと
- ツイート機能も急いで作る
- WebGLからTweetを行うデモ のおかげで10分で実装できました!
- WebGLビルドしている間にアイコンとスクショを作成
- 間に合ったーーーーーーーーー!!!!!!!!
- 製作時間約15時間、お疲れ様でした!
ゲーム的には色々不足しててぐぬぬな感じだけど、とりあえず遊べる様になったので上げましたー! お疲れ様でした! #unity1week pic.twitter.com/2BiYpRml9X
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年4月30日
感想
自分のゲームに関して
- 完成度はそこそこ高いけど、ゲームとしては面白くない
- 繰り返し遊ぶためのモチベーションが足りない
- 次はこうしてやろう、というビジョンが湧きにくい
- 爽快感が足りない
- ブロックが残った状態で次に行ってしまうのもやっと
- 自分の考え通りにゲームが動かない
- 角度を変えてもどのあたりに飛ぶか分かりにくく、思った通りに操作しにくい
- 繰り返し遊ぶためのモチベーションが足りない
- 上記を解決するアイデアとして以下の様なものはある
- 配置をランダムではなく、指定する
- 的確なタイミングで的確な位置に飛ばすことでコンボする設計
- 上記が繰り返し遊ぶことで認識できる様になる
- 補助線/落下予測地点の設置
- リズムに合わせてボタンを押すことでボム発動
- 現在のボール位置の周辺のブロックを一気に破壊する
- 配置をランダムではなく、指定する
- そもそもの設計が考慮不足な気がするので反省
- かなり勢いで作ってしまった (この勢い、ゲームジャムでは大事なのだけど)
- 次回の1週間ゲームジャムでリベンジしたい
- それでもコメントやTwitterですごいお褒めの言葉を頂いて、とても嬉しく思ってます...!!
他の人のゲームに対して
- 自分のゲームにおける問題点と思う箇所をクリアした素晴らしいゲームがいっぱい!
- 超絶バズってる 椿さん の 超速のブロック崩し(仮) や @teri_yakichan さんの Drop and Bounce であったり
- まだ半分くらいしか遊べてないですが、全部遊びたい!
うへーこれ楽しい… ジャンプ70切りたい | ほっぴんボックス1-2-3 | ゲーム投稿サイト unityroom #unity1week https://t.co/7I2p28Moxd pic.twitter.com/NqHjni1oTj
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年4月30日
これも運命 | UCMR | ゲーム投稿サイト unityroom #unity1week https://t.co/GBNoBIE9Dl pic.twitter.com/w44QeHKWKO
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年4月30日
雰囲気好き、いい感じに難しい | ダンシング・プリン! | ゲーム投稿サイト unityroom #unity1week https://t.co/fkps0aa3mp pic.twitter.com/Av5rg76nln
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年4月30日
ツインテはロマン | ツインドリルジャンプ | ゲーム投稿サイト unityroom #unity1week https://t.co/bPWVhyg8rk pic.twitter.com/ncc43PNBRL
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年4月30日
ぐあああこれ1位狙いたいぞ... | Drop and Bounce | ゲーム投稿サイト unityroom #unity1week https://t.co/J7R7hRxRde pic.twitter.com/P0A7knMkTP
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年5月1日
わぁぁああ、来るな… 来るんじゃない…!! | ゆにぴょん | ゲーム投稿サイト unityroom #unity1week https://t.co/aq6dOdIZAP pic.twitter.com/mrVg4qqcGJ
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年5月1日
最初から綺麗に並べようとするとこうなる… HP高いブロック来るまでやり過ごさな... | ブロックくずリス | ゲーム投稿サイト unityroom #unity1week https://t.co/eZdz37gC7r pic.twitter.com/GmnJv3vm4Y
— 青木とと(ˊ~ˋ*) (@lycoris102) 2017年5月1日
1週間ゲームジャムについて
- 自分のような家庭持ちで土日はちょっと家族と出かけたり子供の世話したりで、通常のゲームジャムには出にくい、みたいな人でも気軽に参加できて良い
- ゲーム製作者の方にいっぱいフォローして頂いてとっても嬉しい
- これを機にどんどん繋がっていきたい、よろしくお願いします!
- 主催の @naichilab さん、参加者のみなさん、お疲れ様でした!ありがとうございましたー!
余談
- 自分の最高スコアは190です
- コツはあまりブロックが蓄積していないときは壁打ちしてボールを温存させておくこと
第3回UnlimitedHandハッカソンに参加しました
参加しました! 久しぶりのイベント参加で楽しかったー(ˊ꒳ˋ*)
ハッカソンでやったこと
- (1) UnlimitedHandの紹介
- (2) 開封/セットアップ
- (3) Unityサンプルプロジェクトの体験
- (4) 各自開発
(1) UnlimitedHandの紹介
- H2L株式会社の開発した腕に巻きつけて利用するデバイス
- VR/AR Gameのコントローラーからスタート、"体験の共有" を目指す
- 例えば、プロの演奏する楽器の指の動きの再現
- 最近ではNHKのサイエンスZEROで紹介
- UnlimitedHandで大まかに出来ること
- (1) インプット: 内側のフォトセンサーによるジェスチャー認識
- (2) アウトプット: 電気刺激による深部感覚の表現
- 筋や腱、関節から伝達される感覚
- 手の位置、重みや抵抗
- e.g) 手に鳥が乗っている感覚の再現
(2) 開封/セットアップ
開封の儀 #UnlimitedHand pic.twitter.com/LxahFRKbpd
— 青木とと(ˊ꒳ˋ*) (@lycoris102) 2017年4月22日
- 3万5000円するUnlimitedHandを1人1つレンタル!
- UnlimitedHand開発に関するドキュメント/ライブラリは以下にまとまっている
- セットアップでやったことは以下の通り
- UnlimitedHand References:How to use at first with Arduino
- ゲルパッドの貼り付け (気泡取り) が最大の関門
(3) サンプルプロジェクトの体験
- サンプルプロジェクトをUnity上で実行
(4) 各自開発
第3回UnlimitedHandハッカソン楽しかった!手を開くと何かを飛ばしつつ、振動が来る感じのやつを作りました! #UnlimitedHand pic.twitter.com/JPXul75fTB
— 青木とと(ˊ꒳ˋ*) (@lycoris102) 2017年4月22日
- (参加者の傾向もあり) 説明を重視して、ここの時間は1.5時間程度
- 手を握った/開いた時のフォトセンサーの値を見つつ調整
- TODO: コード周りやハマりどころは後でQiitaに書く…はず
感想
- 電気刺激やばい!!
- 刺激によって手首や指がピクッと動くのを体験!
- これは結構個人差あるっぽい
- ゆっくりじっくり触ってみたいデバイス
- 8つのフォトセンサーの組み合わせでどの指や手首動きと連動しているか判定する
- ちょっと時間内に見切れなかったので、もうちょい色々試したい
- いろんな分野の人が関心を持つ
- 医学/アートの観点から興味を持って参加している人がいた
- VR/ARコントローラーの視点に留まらない可能性のあるデバイス
- 色々聞ける
- 回路も担当したH2L代表の岩崎さんが直々に講師を務めてくださった
- 懇親会もあったので、今後の展望など気になる人も色々聞ける感じ
- というわけで、多分第4回もあると思うので、興味ある人、とりあえず触って見たい人、おすすめです!
まべ☆てっくvol.3 Unityのお道具箱 に参加しました
- 概要
- うちではこうやってます!UI構築ルールとPlaymakerを使った画面遷移
- Unityパッケージ管理について本気出して考えてみた
- モバイル向けAnimation/AnimatorのTIPS
- LTメモ
概要
- 参加しました(ˊ꒳ˋ*)
- 株式会社マーベラスさん主催の勉強会です!
- 会社独自でやってる取り組みや仕組みオープンにしてくださるのとても嬉しい…!!
うちではこうやってます!UI構築ルールとPlaymakerを使った画面遷移
資料
www.slideshare.net
目的
- 人数増加を見越して悩まずに画面/機能を量産可能な仕組みである
- 導入時にルールが少なく説明しやすい
- 実装時に他の実装から真似でき、担当者が入れ替わってもパッと分かる
Playmaker + uGUI を使用した画面遷移
- Playmaker
- 有名なビジュアルスクリプティングアセット
- ページ構成
- Scene入れ替え方式
- ただし1つのSceneに対し1つのGameObjectのみを配置
- HomeSequenceというGameObjectにてステート管理を行う
- PlaymakerFSM + シーケンスマネージャ
- Playmakerを使ったステート管理
- グラフィカルなステートマシンとして利用
- ステートの配色でグルーピングを行う等工夫
- Playmaker上で使用するアクションは基本CallMethodのみ
- グラフィカルなステートマシンとして利用
- 各ステートで行うこと
- シーケンスマネージャに用意したメソッドをCallMethodで呼ぶ
- UIPrefabのInstantiateや状態管理など
- UIPrefab
- UI要素はPrefabに格納した状態で用意する
- UIHome / UIMenu / UIHeader … etc
- 画面内で発火したイベントの処理について
- 子から親にイベントを伝搬し、その結果から子に指示/
作業フロー
- 仕様書: 企画
- 仕様確認: 全員
- UIPrefabの作成: デザイナ
- UIPrefab作成用のシーンを用意し、解像度などの設定をCanvasに適応しておく
- UIPrefab修正 : エンジニア
- スクリプト開発: エンジニア
- FSM開発: エンジニア
Unityパッケージ管理について本気出して考えてみた
導入
- 新規プロジェクトを作る際に自作のライブラリ入れる
- でもUniRxとTexturePackImporterに依存してるぞ
- AssetStoreからダウンロードマネージャ開いて … めんどい!!!!!
- 依存関係を解消してくるライブラリ作ってるよ
upm
- npmを使用したパッケージ管理ツール
- 依存管理の仕組みはnpmに乗っかる
- イベントシステムはUnity向けにカスタマイズ
- 事前準備
- アセット群を npm publish する
- プライベートなリポジトリ(レジストリ)で管理する
- npm Enterprise
- Vardaccio
- 実行
- npm i -S ${name-of-package} でインストールしつつpackage.jsonの生成
モバイル向けAnimation/AnimatorのTIPS
UnityTechnologyJapan 山村さん ( テラシュールブログ の 椿さん )
Mecanimについて
- Mecanim (以下の機能の総称)
- Animator
- AnimationController
- AnimationClip
- 細かくできること
Animatorに関するTips
- ステートマシンを整理する
- MecanimはGUIで1キャラクターを作り込めるが複雑になりがち
- サブステートマシンでまとめる
- 注意: Exitに出た時に次のステートが存在しない場合、最初のステートに戻ってしまう
- 明示的に任意のステートに割り振らなきゃいけない
- ブレンドツリー使う
- 日本のゲームの場合、色々なキャラがいる
- 1体のキャラを作り込むのではなく、モーションを微調整する
- AnimationControllerが大量にできてしまう
- 理想はAnimationControllerを汎用的に使い回すこと
- リグを合わせる
- Humanoid: HUmanoid同士ならアニメーションは共有可能
- Generic: ボーン構造が一致すれば使える
- リグを合わせる
- 基本となるAnimationContollerを作り込む
- AnimationOverrideContollerでアニメーションを上書き
- 注意: 構造が異なるステートマシンがあると問題になる
- 余裕を持ったアニメーションコントローラーを作る
- PlayableAPI を使う
- ダイナミックにAnimationClipを実行する
- AnimationControllerのブレンドもできる
- Unity5.6で変更入ったので注意
パフォーマンスの話 / モバイル向けのあれこれ
- モバイルには色々制約がある
- ApplyRootMotionを使用しない
- 無駄なCPUを結構使う
- AnimationContoller内で合成するLayerを減らす
- Transion を増やしすぎない
- PlayやFadeで代替する
- AnimatorのついたGameObjectを非アクティブにしない
- Animatorが持つメモリやStateMachine等を破棄する
- 再度有効にした時に再構築される
- Animatorコンポーネントをdisabledにする
- Animatorが持つメモリやStateMachine等を破棄する
- 見えないアニメーションは再生しない
- AnimatorのCullingModeを変更する
- CameraのOcculusionCullingでもOK
- そもそもSkinnedMeshRendererを減らす
- qualityもできれば減らす
- Animationのキーフレームを減らす
- Keyframe Reductionを有効にする
- OptimizeGameObjectを使用する
- Unityに配置したモデルをアニメーション向けに最適化する - テラシュールブログ
- GameObjectの数が減って起動が早くなる
- SkinnedMeshのコストが減る
- Unityに配置したモデルをアニメーション向けに最適化する - テラシュールブログ
- AssetBundleでAnimationをUnloadしないで使い回す
LTメモ
Hot Reloading on Unity Editor
資料: Hot Readloading on Unity Editor
技術書展へのお誘い
Unityで『ニーア オートマタ』の義体システムっぽい機能を作る
- UnityとNCMBで作る話