Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sweet^2 Honey Hive

Sweet^2 Honey Hive

unity1week online共有会 #1
https://meetup.unity3d.jp/jp/events/1241

▼ゲームはこちらからプレイできます
https://unityroom.com/games/sweet_honey_hive

lycoris102

May 16, 2020
Tweet

More Decks by lycoris102

Other Decks in Programming

Transcript

  1. unity1week online共有会 #1 青木とと@lycoris102

  2. だれ? 2 @lycoris102 青木とと ねんれい:30 かぞく: 妻と3歳の息子 ・Unityアンバサダー ・ゆるふわゲームクリエイター ・ゆるふわイベントオーガナイザー

     ・Gotanda.unity  ・UnityDesigner’sCafe  ・unity1week Meetup
  3. だれ? 3 #unity1week でゲームを作るのも好きです https://unityroom.com/users/lycoris102

  4. 4 「密」で作ったゲーム Sweet^2 Honey Hive

  5. 5 今日の話 アジェンダ 時間があれば コードの一例 (状態管理) Unityで 演出を作る ゲームデザインと 作り方

    10分で話せるだけ話します! (時間ない)
  6. 6 今日の話 アジェンダ Unityで 演出を作る ゲームデザインと 作り方 時間があれば コードの一例 (状態管理)

  7. 7 ゲームデザインと作り方 やったこと 好きなゲームからアイデアを組み合わせる

  8. 8 ゲームデザインと作り方 カタン アニマロッタシリーズ ハニーエイト + サイコロ2つ降る 出た目から資源を獲得 ルーレットを回す 出た目を起点に領地を広げていく

    出目が当たった時の高揚感と領地が広がったときの視覚的な嬉しさが好き
  9. 9 ゲームデザインと作り方 このままだと運しかなくて 自己統制感/意思決定がない
 (自分がゲームをコントロールしているような感覚がない) 中間目標がなくて メリハリがなく途中でダレる 脳内プレイによる課題感の洗い出し

  10. 10 ゲームデザインと作り方 人生ゲーム/桃鉄/じぱんぐ島 … etc から出目や盤面を操作するアイデアを追加 ショップ ゲームをコントロールしている感覚を追加 安定/チャレンジのジレンマ要素の追加

  11. 11 ゲームデザインと作り方 (これ何か元ネタあったっけな……) 宝箱 中間目標を追加し ゲームの流れにメリハリを生み出す

  12. 12 ゲームデザインと作り方 0から面白い体験を作るのは難しいので 複数のアイデアを組み合わせて 課題を解消し ゲームとして成立させる 自分が「面白い!」と思えるものを採択することが面白さにつながる / 「パクリ」を恐れない

  13. 13 ゲームデザインと作り方 やったこと デザインモックから作る

  14. 14 ゲームデザインと作り方 アイデアを決めてから イラレで作ったデザインモック(一枚絵) この時点で実際のゲーム画面に必要な情報は8割くらい揃っている

  15. 15 ゲームデザインと作り方 デザインモックによるデザインマター開発 目指すべき絵作りの指標を定義でき 後発する素材のテイストを統一出来る 素材がある状態で開発に取りかかることができる (仕様としての)要素を洗い出せているので 開発時のクラス設計に役立つ 自分はイラレでやったが、アセットを使う場合Unity上で挙動を組み込む前にハリボテで作ることも可能

  16. 16 ゲームデザインと作り方 画面だけ作ってお腹いっぱいになっちゃうので注意

  17. 17 今日の話 アジェンダ Unityで 演出を作る ゲームデザインと 作り方 時間があれば コードの一例 (状態管理)

  18. 18 Unityで演出を作る やったこと 基本Timeline 時々 DOTween

  19. 19 Unityで演出を作る Unity2017で提供されたビジュアルツール Timeline

  20. 20 Unityで演出を作る ゲームの状態毎に Timeline / PlayableDirector を用意

  21. 21 例: サイコロを振る時の Timeline 「TurnDiceRoll」という状態に遷移したときに、UIを捌けさせ、ダイスを振るアニメを実行する Unityで演出を作る

  22. 22 Timelineのいいところ 複数のオブジェクトの アニメーションを 同時に制御できる Unityで演出を作る

  23. 23 Timelineのいいところ Audio(効果音)の 再生タイミングも 合わせて制御できる Unityで演出を作る

  24. 24 Timelineのいいところ Signalにより Timeline中に 任意のコンポーネントの メソッドを実行可能 Unityで演出を作る

  25. 25 ランダムで画像を差し替え、最後にはターン開始時に定義されたダイス値の画像に差し替えする例 SignalReceiverで どのSignalが来たら どのメソッドを実行するかの定義 Unityで演出を作る

  26. 26 タイムラインの終了を通知するSignalを受けて、次の状態へ遷移する Unityで演出を作る

  27. 27 Signalの詳細について こちらのスライドでも発表してます (手前味噌) https://learning.unity3d.jp/2337/ Unityで演出を作る

  28. 28 Unityで演出を作る Script上で動かすTween系 (2値を補完するように動く) アセット DOTween

  29. 29 今回のDOTweenの使い所 数字のカウントアップ https://qiita.com/RyotaMurohoshi/items/f7312e802f7698e42cd0 ▼ @RyotaMurohoshi さんが拡張を書いてくれています! Unityで演出を作る

  30. 30 今回のDOTweenの使い所 時間をずらしての Timelineの連続再生 マス解放/はちみつを獲得するTimelineを一定時間間隔毎に順序よく再生する Unityで演出を作る

  31. 31 今日の話 アジェンダ Unityでの 演出の 作り方 ゲームデザインと 作り方 時間があれば、どういうコードを書いているか晒します 時間があれば

    コードの一例 (状態管理)
  32. 32 コードの一例 タイトル チュートリアル 初期設定 ターン開始 ダイスロール はちみつ獲得 マス獲得 ターン終了

    結果発表 状態管理(GameState) Enumで定義
  33. 33 IGameStateHandler 大まかな構造 IGameStateRenderer View (MonoBehaviour) IGameStateController IGameStatePresenter Presenter IGameStateUseCase

    IGameStateEntity IDiceEntity IHexEntity IHoneyEntity IShopEntity … UseCase Entity 入力 描画 UseCaseへの伝搬 出力するViewのマッピング ビジネスロジックの実行/複数のEntityを跨ぐ処理 状態の保持/更新/変更の通知 IDiceUseCase IHexUseCase IHoneyUseCase IShopUseCase … Enum Stuct Installer Utility <リスペクト> CAFU (CleanArchitectureForUnity): https://github.com/umm/cafu_core コードの一例
  34. 34 MonoBehaviourからのイベントを流す責務
 (Timelineの終了時に値を発行) TimelineGameStateHandler View (MonoBehaviour) イベント通知/購読の仕組みに UniRx を利用 コードの一例

  35. 35 ButtonGameStateHandler View (MonoBehaviour) コードの一例 MonoBehaviourからのイベントを流す責務
 (ボタンが押された時に値を発行)

  36. 36 Viewからのイベント通知を集約して UseCaseに流す責務 GameStateController Presenter コードの一例 View群は、Zenjectによって依存性注入されている

  37. 37 通知を受けてEntityの状態変更を行ったり、Presenterに描画命令を投げたりする責務 GameStateUseCase UseCase コードの一例 EntityやPresenterは、Zenjectによって依存性注入されている

  38. 38 状態の保持/変更/通知をする責務 GameStateEntity Entity コードの一例

  39. 39 UseCaseからの描画命令を 条件を満たすView(群)に対して実行する責務 GameStatePresenter Presenter コードの一例

  40. 40 描画処理を行う責務 = 今回はTimelineの再生を行う TimelineGameStatePlayer View (MonoBehaviour) IGameStateRendererを実装すればTimeline以外にもState変更時に処理することが出来る コードの一例

  41. 41 Zenjectを使っている Installer経由で各クラスは初期生成され Bindすることで各クラスに依存性注入される GameInstaller 予めSceneにいる View (MonoBehaviour) は ZenjectBinding

    を利用して Bind コードの一例
  42. 42 正直ここまでやっちゃうのは ゲームジャムだとやりすぎ感もある ゲームを作る上で必須な技術というわけでも無いし
 UniRxやZenjectも使っているので 少なくとも初学者にはオススメ出来ない けど責務をきちんと分割することで (特にシミュレーションゲームのような情報を扱うゲームは) 読みやすくなったり、変更しやすくなったりするので 「こういう風に書いてる人もいるよ」くらいの話

    何か調べてみたりするきっかけになったら良いかも コードの一例
  43. 43 今日の話 時間があれば コードの一例 (状態管理) Unityで 演出を作る ゲームデザインと 作り方 断片的な話で恐縮ですが、やっていることの雰囲気が伝われば幸いです

  44. 44 unity1week 毎回色々な事を試せるし 短い時間で自分のゲームを完成出来るし 面白ゲームいっぱい遊べるし サイコー! naichiさん、いつも本当にありがとうございます! さいごに

  45. https://fonts.google.com/specimen/Fascinate ちなみにタイトルロゴの フォントは「Fascinate」

  46. 46 おまけ: 大まかなスケジュール 月    火    水    木    金    土    日 初期設定 アイデア出し デザインモック ビジネスロジック (Entity/UseCase)

    MonoBehaviour との繋ぎ込み コアな挙動の完成 ターンサイクル ショップの実装 演出ブラッシュアップ タイトル/チュートリアル/結果 ランキング/BGM/SE 合計25時間程度 今回は妻から土日に作業時間をたくさんもらえたので、圧倒的に感謝……!!