$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

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

    View Slide

  3. だれ? 3
    #unity1week でゲームを作るのも好きです
    https://unityroom.com/users/lycoris102

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. 8
    ゲームデザインと作り方
    カタン
    アニマロッタシリーズ
    ハニーエイト
    +
    サイコロ2つ降る
    出た目から資源を獲得
    ルーレットを回す
    出た目を起点に領地を広げていく
    出目が当たった時の高揚感と領地が広がったときの視覚的な嬉しさが好き

    View Slide

  9. 9
    ゲームデザインと作り方
    このままだと運しかなくて
    自己統制感/意思決定がない

    (自分がゲームをコントロールしているような感覚がない)
    中間目標がなくて
    メリハリがなく途中でダレる
    脳内プレイによる課題感の洗い出し

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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
    コードの一例

    View Slide

  34. 34
    MonoBehaviourからのイベントを流す責務

    (Timelineの終了時に値を発行)
    TimelineGameStateHandler
    View
    (MonoBehaviour)
    イベント通知/購読の仕組みに UniRx を利用
    コードの一例

    View Slide

  35. 35
    ButtonGameStateHandler
    View
    (MonoBehaviour)
    コードの一例
    MonoBehaviourからのイベントを流す責務

    (ボタンが押された時に値を発行)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  42. 42
    正直ここまでやっちゃうのは
    ゲームジャムだとやりすぎ感もある
    ゲームを作る上で必須な技術というわけでも無いし

    UniRxやZenjectも使っているので
    少なくとも初学者にはオススメ出来ない
    けど責務をきちんと分割することで
    (特にシミュレーションゲームのような情報を扱うゲームは)
    読みやすくなったり、変更しやすくなったりするので
    「こういう風に書いてる人もいるよ」くらいの話
    何か調べてみたりするきっかけになったら良いかも
    コードの一例

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. 46
    おまけ: 大まかなスケジュール
    月    火    水    木    金    土    日
    初期設定
    アイデア出し
    デザインモック
    ビジネスロジック
    (Entity/UseCase)
    MonoBehaviour
    との繋ぎ込み
    コアな挙動の完成
    ターンサイクル
    ショップの実装
    演出ブラッシュアップ
    タイトル/チュートリアル/結果
    ランキング/BGM/SE
    合計25時間程度
    今回は妻から土日に作業時間をたくさんもらえたので、圧倒的に感謝……!!

    View Slide