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

今日から使える! UnityでのゲームジャムTips

今日から使える! UnityでのゲームジャムTips

今日から使える!UnityでのゲームジャムTips で発表した資料です。

イベント詳細 : https://hirouni.connpass.com/event/254973/

NAKAOKU Takahiro

October 12, 2022
Tweet

More Decks by NAKAOKU Takahiro

Other Decks in Technology

Transcript

  1. 今日から使える!
    Unityで ゲームジャムTips
    広島Unity勉強会 ナカオクタカヒロ
    1

    View Slide

  2. 2
    ナカオク タカヒロ Follow me!
    Github/FB
    @kamera25
    Twitter
    @csc_kamera25
    仕事 : 色々やってる
       ネットワーク屋さん
    https://hiroshima-unity.jimdofree.com

    View Slide

  3. 3

    View Slide

  4. 4
    おことわり
    ・本資料に Webから引用をしている、画像や資料などがあります。
     引用元 URLで示している で、正しい情報について そちらをご確認ください。
    ・引用以外 情報 クリエイティブコモンズ -表示 4.0 国際 (CC BY 4.0)でご利用いただけます。
    ・こ 情報 2022年10月8日時点 情報となります。

    View Slide

  5. 5
    つよさ
    Unity完全に理解した!
    今回 発表
    でーベテラン 人
    ちょっと分かる人 対象外です
    こんな人に向けた資料です!

    View Slide

  6. 6

    View Slide

  7. 7

    View Slide

  8. 8

    View Slide

  9. https://blog.unity.com/ja/news/introducing-unity-2021-lts
    9

    View Slide

  10. ゲーム
    ジャム
    ために
    レッツ
    勉強!
    10

    View Slide

  11. 話すこと
    ● ゲームジャムでよく使う、Unity 設計について
    ● 新機能 ご紹介
    U2019〜
    ↓ ような表記をスライド右上に表示します
    Unity2019以降で使える機能
    ジャム設計
    ゲームジャムでよく使う設計について
    ※Unity バージョン関係なく使える機能
    12

    View Slide

  12. 13
    T A L K
    01
    プロジェクトを作ろう

    View Slide

  13. 新規プロジェクトを作る
    U2020〜
    14

    View Slide

  14. 2D or 3D
    U2020〜
    2D 3D
    15

    View Slide

  15. URPとBultin-RP
    U2020〜
    Bultin-RP
    URP
    16

    View Slide

  16. 新規プロジェクトを作る時
    ● (重要!)プロジェクト 選択 「絶対的なも で 無い」
    ○ 「3D」で作ったプロジェクトを途中で 2D向けに変更することも可能。
    ○ 「3D(Bultin-RP)」で作ったプロジェクトを、 URPを用いるプロジェクトにする事も可能。
    ● ただし、最初に「ど ようなゲームを作るか?」によって、選択をすることが重要。
    ○ プロジェクト制作 途中で変える シンドイよ。
    ○ どちらを採用すれ 良いか分からない時 、経験者に聞いてみよう。
    https://docs.unity3d.com/ja/2021.3/Manual/2DAnd3DModeSettings.html
    17

    View Slide

  17. 18

    View Slide

  18. 19

    View Slide

  19. URPとBultin-RP
    ● Unityで v2018から、レンダーパイプラインを拡張できる仕組みを開発
    ○ これによりURP(旧名 : LWRP)とHDRPが作られる。
    ● それまで 既存 レンダーパイプラインをBultin-RPと呼ぶようになった。
    U2018〜
    20

    View Slide

  20. U2018〜
    URPとBultin-RP
    ● Unityで v2018から、レンダーパイプラインを拡張できる仕組みを開発
    ○ これによりURP(旧名 : LWRP)とHDRPが作られる。
    ● それまで 既存 レンダーパイプラインをBultin-RPと呼ぶようになった。
    結局、何が変わる か?
    21

    View Slide

  21. URPとBultin-RP
    URP Bultin-RP
    レンダリング 度 軽い 重たい
    使える機能
    多い
    新機能が使える
    多い
    過去 資産がそ まま使える
    オススメ度
    新しく作るなら
    オススメ!
    過去 資産を使うなら
    オススメ!
    U2018〜
    【参考】
    22
    おおむ 、こ 理解で OK…

    View Slide

  22. URPとBultin-RP
    ● URP出始め 頃 実装されていない機能が多くあった。
    ○ リアルタイムGIが使えない
    ○ 複数 カメラが使えない
    ● アセットストア アセットがURPに対応していない。
    ○ Bultin-RPでほぼ作られていて、変換が必要だった。
    ○ 特殊なシェーダーを使っている場合、だいたい下 色になる。
    U2018〜
    23

    View Slide

  23. URPとBultin-RP
    ● さっき 問題 最新環境で おおよそ解消されている。
    ○ ただし昔買ったアセットストアが、そ まま流用できない場合 まだある。
    ○ デザイナーさん 表現したい事を意識合わせしておく事が大切
    ● ゲームジャムで 多く 人にゲームを触ってもらえる事が大切
    ○ 軽いパソコンで動く事に越したこと 無い
    ○ イテレーションを回すにも、軽さ 正義
    U2018〜
    24

    View Slide

  24. U2018〜
    【参考】
    Bultin-RP URP
    25

    View Slide

  25. U2018〜
    [引用] https://learning.unity3d.jp/4484/
    26

    View Slide

  26. ゲームジャム向けプロジェクトを作る時
    START!
    3Dモデルを使う? 過去 3Dアセット
    を使う?
    2D (URP) 3D (URP)
    No
    Yes/不明 Yes
    3D (Bulltin)
    No
    27

    View Slide

  27. 28
    T A L K
    02
    プロジェクト準備をしよう

    View Slide

  28. Unity Editor
    ジャム設計
    29

    View Slide

  29. Unity Editorを開いたらまずやること
    ジャム設計
    ● (超重要!) ゲームシーン アスペクト比をまず決めること
    ● Project フォルダ構 を決めておくこと
    ● Sceneをあらかじめ作成しておく
    ○ 合わせてビルド設定に Sceneを設定しておく
    ● 上記ができたら、Gitに初期コミットすること
    30

    View Slide

  30. アスペクト比 調整を行う
    ジャム設計
    Free Aspect ままだと…
    ・UIが固定化できない
    ・ゲーム性に影響する
    多く 場合
    ・16:9(HD、Unityroom等)
    ・16:10
    ・4:3(Mac等)
    忘れると最終日 ビルドで
    泣く事もし し …
    31

    View Slide

  31. アスペクト比 調整を行う
    ジャム設計
    9
    16
    32

    View Slide

  32. アスペクト比 調整を行う
    ジャム設計
    10
    16
    33

    View Slide

  33. アスペクト比 調整を行う
    ジャム設計
    10
    9
    16
    34

    View Slide

  34. Project フォルダ構 を決めておくこと
    ジャム設計
    ● Unity 一般的なプロジェクトで 、第一階層に機能ごとにフォルダを分けることが
    多い
    ○ Script、Scenes、Audio、Materialsなど
    ● ゲームジャムで ユーザ毎にフォルダを分けた方が管理しやすい (と思う)
    ○ 例) 第一階層に Scenes、ユーザフォルダ、アセットしか置かない
    ○ ユーザフォルダに 個別で管理を行う
    ○ you-riさん 発表(初めて ゲームプロジェクト バージョン管理)でも詳細な説明あり
    35

    View Slide

  35. Project フォルダ構 を決めておくこと
    ジャム設計
    一般的な構成
    Assets Scenes
    Prefabs
    Scripts
    Resources
    Audio
    Assets Scenes
    Users
    ストア
    アセット

    Aさん
    Bさん
    Cさん
    ゲームジャムでよくやる 構成
    36

    View Slide

  36. Project フォルダ構 を決めておくこと
    ジャム設計
    ● ゲームジャムで プロジェクト 大規模化 しにくい
    ○ 一般 製品プロジェクト ようにフォルダ構成を厳格にすることが、
    初期ゲーム開発 度を増やすと限らない
    ● ファイル変更によるコンフリクトが起こりにくい
    ○ ゲームジャムに Gitを使わない人も参加することがある
    ○ 余計なコンフリクトを避けるため
    ○ フォルダ名により所有者が明確となっているため、誰が作成したフォルダかわかりやすい
    ● Sceneについて 単一機能 も ユーザフォルダに格納する
    ○ Sceneフォルダ直下 Scene 常に多人数に触られるも とする
    ○ 個人フォルダ直下 Scene 所掌範囲 機能実装用にとどめる
    37

    View Slide

  37. Sceneをあらかじめ作成しておく
    ジャム設計
    共有して触るScene 初め うちから作っておく
    プロジェクト初期にこ 作業を実施しておきたい
    ● Sceneを作る→ゲーム 大まかな流れ を決める
    ○ ゲーム ゴールを決める
    ○ 必要な工数を考える
    ■ チュートリアル作る か?
    ■ ステージ毎にSceneを変える か?
    38

    View Slide

  38. ジャム設計
    39
    タイトル
    ゲーム
    リザルト

    View Slide

  39. ジャム設計
    40
    タイトル
    ゲーム
    リザルト
    遊び方 クレジット

    View Slide

  40. ジャム設計
    41
    タイトル
    ゲーム
    遊び方
    ストーリ&遊
    び方

    View Slide

  41. Unity Editorを開いたらまずやること
    ジャム設計
    ● (超重要!) ゲームシーン アスペクト比をまず決めること
    ● Project フォルダ構 を決めておくこと
    ● Sceneをあらかじめ作成しておく
    ○ 合わせてビルド設定に Sceneを設定しておく
    ● 上記ができたら、Gitに初期コミットすること
    42

    View Slide

  42. 43
    T A L K
    03
    開発を進めよう

    View Slide

  43. プログラミングを開始する前に
    ● 列挙型(enum)を定義しておこう
    ● データを貯めるところを考えよう
    ○ シングルトンを使う?
    ○ GameControllerが持っているコンポーネントにまとめる?
    ● Scene間 データ受け渡しを考えよう
    ● Tagを使わないことも考えよう
    44

    View Slide

  44. 列挙型(enum)を定義しよう
    ジャム設計
    ● 対戦型ゲームで チームやプレイヤーを識別する必要がある。
    ○ 1プレイヤー(Red) / 2プレイヤー(Blue) / 3プレイヤー(Green) / 4プレイヤー(Yellow)
    ○ スポーツに 自チームと敵チームがある
    ○ 対立構 が生まれれ 、そこを識別する必要がある
    ● 武器に種類があれ 識別する必要がある。
    ○ メインウェポン / サブウェポン
    ● マップタイルに種類があれ 識別する必要がある。
    ○ 街 / 川 / 山 / 城
    45

    View Slide

  45. 列挙型(enum)を定義しよう
    ジャム設計
    1P 「0」
    2P 「1」
    1P 「1」
    2P 「2」
    として定義しよう…
    ゲーム
    シーン
    リザルト
    シーン
    46

    View Slide

  46. 列挙型(enum)を定義しよう
    ジャム設計
    1P 「0」
    2P 「1」
    1P 「1」
    2P 「2」
    winUser = 1
    ゲーム
    シーン
    リザルト
    シーン
    47

    View Slide

  47. 列挙型(enum)を定義しよう
    ジャム設計
    ゲーム
    シーン
    リザルト
    シーン
    2Pが勝った 1Pが勝った
    48

    View Slide

  48. 列挙型(enum)を定義しよう
    ジャム設計
    49

    View Slide

  49. 列挙型(enum)を定義しよう
    ジャム設計
    50

    View Slide

  50. 列挙型(enum)を定義しよう
    ジャム設計
    winUser = PLAYER.ONE
    ゲーム
    シーン
    リザルト
    シーン
    51 enumについて 後述 CREATE A C# STYLE GUIDEにも詳細が記載されてます

    View Slide

  51. データ 取り扱いを考えよう
    ジャム設計
    ● ゲームがどんなデータを扱うか考えてみよう
    ○ HP、MP、マップ構成、アイテム
    ○ プログラマ これら 値をどこに持っておくか、意識をしておく
    HP
    MP
    アイテム 値
    武器A
    武器B
    武器C
    マップ構成
    状態 : 毒
    データ どこ?
    52

    View Slide

  52. データ 取り扱いを考えよう
    ジャム設計
    ● シングルトン?
    ○ 楽、わかりやすい
    ○ DontDestoryOnLoad()を使って、Sceneまたぎをさせる
    ○ ゲームジャム向きと言える
    ● GameController Componentで一元化する
    ○ わかりやすい
    ○ シーンまたぎ 時に処理を考えてあげる必要がある。
    ● PlayerPrefs
    ○ 最近 あまり使わない
    53

    View Slide

  53. シーン間 データ 受け渡し
    ジャム設計
    winType = PLAYER.SOLDIER
    どうやって渡そう?
    ゲーム
    シーン
    リザルト
    シーン
    54

    View Slide

  54. データ 取り扱いを考えよう
    ジャム設計
    1. ResultSceneLoadedを登録する(winTypeに PLAYER.SOLDIERが格納済み)
    2. Endingシーンが呼び出される
    ゲーム
    シーン
    リザルト
    シーン
    55

    View Slide

  55. データ 取り扱いを考えよう
    ジャム設計
    3. 登録されていたResultSceneLoadedが実行され、
    変数がコピーされる。
    ゲーム
    シーン
    リザルト
    シーン
    winType = PLAYER.SOLDIER
    56

    View Slide

  56. Tag 使い所を考えよう
    ジャム設計
    ● GameObjectを識別するときに便利な
    Tag
    ○ 簡単に使える分、多用しすぎると大変になりが

    ○ Tag 使い方を再度おさらいしましょう
    57

    View Slide

  57. Tag 使い所を考えよう
    ジャム設計
    ● Tag 比較
    ○ あるオブジェクトに「Player」 タグを持つオブ
    ジェクトが当たったか?を検知するコード
    ○ コリジョンを検知する際に文字列比較で Tagと
    当たったか?を検知したりする。
    ■ こ 方法 比較的遅い
    58

    View Slide

  58. Tag 使い所を考えよう
    ジャム設計
    ● Tag 比較
    ○ CompareTagを使おう
    ■ こっち 方が早い
    59

    View Slide

  59. Tag 使い所を考えよう
    ● そもそもTag 比較が必要?
    ○ Unity 2019からTryGetcomponentという関数が追加
    ○ 下 コード 「Playerが持ってるコンポーネント」があれ 、 if 中を実行する。
    ■ しかもGetComponentに比べて処理が早い
    U2019〜
    60

    View Slide

  60. Player
    Tag 使い所を考えよう
    U2019〜
    プレイヤーA プレイヤーB
    コンポーネント
    PlayerController
    Player
    コンポーネント
    PlayerController
    ↑ どっちかを比較 ↓
    CompareTag()
    TryGetComponent()
    OnCollisionEnter()
    61

    View Slide

  61. Input Systemを使おう
    ● Unity 2020より新しい入力システムとしてInput Systemが導入
    ○ それまで Input Managerを利用していた
    U2020〜
    62

    View Slide

  62. Input Systemを使おう
    ● Input Systemに 2通り 方法で利用か う
    ○ 使い方1 Input Action アセットにキー バインド (紐付け)を作成する
    ■ 癖 あるけど、慣れたら直感的
    U2020〜
    63

    View Slide

  63. Input Systemを使おう
    ● Input Systemに 2通り 方法で利用か う
    ○ 使い方2 コードで書く
    ■ プロジェクト初期 こっち 方法が良いと思う
    ■ プレイヤー数が大人数にならない場合にもおすすめ
    U2020〜
    64

    View Slide

  64. C# コード
    ● Unity社公式 Create a C# style guide を読
    みましょう
    ○ 英語苦手 人 コードだけ読め OK
    ○ もしく DeepL翻訳つかって読んでみよう
    ● 一般的な話も多く含まれる
    ○ 無駄なコメントを書かない
    ○ DRY原則
    ○ 変数や関数 命名規則 話など
    ● ゲームジャム チーム開発
    ○ もちろん動くコードを書くことが大切
    ○ 綺麗なコードを書くことも考えよう
    https://resources.unity.com/ebooks/create-code-style-guide-e-book
    ジャム設計
    65

    View Slide

  65. 66
    T A L K
    04
    Unity Tips

    View Slide

  66. シーンビュー 操作ロック
    ● シーンビュー 指 マークを入れておくと、シーンで 非選択にできる。
    U2020〜
    67

    View Slide

  67. コンポーネント 別窓
    ● コンポーネントを別窓化しておける。
    U2020〜
    68

    View Slide

  68. コンポーネント 別窓
    ● 別窓化したオブジェクトがどれか分からなくなったら、Pingしよう。
    U2020〜
    69

    View Slide

  69. 1
    70
    まず ゲームジャムに参加してみよう!
    2
    3
    みんなで開発することを意識してみよう。
    Unityでつまづいたら、積極的に質問しよう。

    View Slide