今日から使える!UnityでのゲームジャムTips で発表した資料です。
イベント詳細 : https://hirouni.connpass.com/event/254973/
今日から使える!Unityで ゲームジャムTips広島Unity勉強会 ナカオクタカヒロ1
View Slide
2ナカオク タカヒロ Follow me!Github/FB@kamera25Twitter@csc_kamera25仕事 : 色々やってる ネットワーク屋さんhttps://hiroshima-unity.jimdofree.com
3
4おことわり・本資料に Webから引用をしている、画像や資料などがあります。 引用元 URLで示している で、正しい情報について そちらをご確認ください。・引用以外 情報 クリエイティブコモンズ -表示 4.0 国際 (CC BY 4.0)でご利用いただけます。・こ 情報 2022年10月8日時点 情報となります。
5つよさUnity完全に理解した!今回 発表でーベテラン 人ちょっと分かる人 対象外ですこんな人に向けた資料です!
6
7
8
https://blog.unity.com/ja/news/introducing-unity-2021-lts9
ゲームジャムためにレッツ勉強!10
話すこと● ゲームジャムでよく使う、Unity 設計について● 新機能 ご紹介U2019〜↓ ような表記をスライド右上に表示しますUnity2019以降で使える機能ジャム設計ゲームジャムでよく使う設計について※Unity バージョン関係なく使える機能12
13T A L K01プロジェクトを作ろう
新規プロジェクトを作るU2020〜14
2D or 3DU2020〜2D 3D15
URPとBultin-RPU2020〜Bultin-RPURP16
新規プロジェクトを作る時● (重要!)プロジェクト 選択 「絶対的なも で 無い」○ 「3D」で作ったプロジェクトを途中で 2D向けに変更することも可能。○ 「3D(Bultin-RP)」で作ったプロジェクトを、 URPを用いるプロジェクトにする事も可能。● ただし、最初に「ど ようなゲームを作るか?」によって、選択をすることが重要。○ プロジェクト制作 途中で変える シンドイよ。○ どちらを採用すれ 良いか分からない時 、経験者に聞いてみよう。https://docs.unity3d.com/ja/2021.3/Manual/2DAnd3DModeSettings.html17
18
19
URPとBultin-RP● Unityで v2018から、レンダーパイプラインを拡張できる仕組みを開発○ これによりURP(旧名 : LWRP)とHDRPが作られる。● それまで 既存 レンダーパイプラインをBultin-RPと呼ぶようになった。U2018〜20
U2018〜URPとBultin-RP● Unityで v2018から、レンダーパイプラインを拡張できる仕組みを開発○ これによりURP(旧名 : LWRP)とHDRPが作られる。● それまで 既存 レンダーパイプラインをBultin-RPと呼ぶようになった。結局、何が変わる か?21
URPとBultin-RPURP Bultin-RPレンダリング 度 軽い 重たい使える機能多い新機能が使える多い過去 資産がそ まま使えるオススメ度新しく作るならオススメ!過去 資産を使うならオススメ!U2018〜【参考】22おおむ 、こ 理解で OK…
URPとBultin-RP● URP出始め 頃 実装されていない機能が多くあった。○ リアルタイムGIが使えない○ 複数 カメラが使えない● アセットストア アセットがURPに対応していない。○ Bultin-RPでほぼ作られていて、変換が必要だった。○ 特殊なシェーダーを使っている場合、だいたい下 色になる。U2018〜23
URPとBultin-RP● さっき 問題 最新環境で おおよそ解消されている。○ ただし昔買ったアセットストアが、そ まま流用できない場合 まだある。○ デザイナーさん 表現したい事を意識合わせしておく事が大切● ゲームジャムで 多く 人にゲームを触ってもらえる事が大切○ 軽いパソコンで動く事に越したこと 無い○ イテレーションを回すにも、軽さ 正義U2018〜24
U2018〜【参考】Bultin-RP URP25
U2018〜[引用] https://learning.unity3d.jp/4484/26
ゲームジャム向けプロジェクトを作る時START!3Dモデルを使う? 過去 3Dアセットを使う?2D (URP) 3D (URP)NoYes/不明 Yes3D (Bulltin)No27
28T A L K02プロジェクト準備をしよう
Unity Editorジャム設計29
Unity Editorを開いたらまずやることジャム設計● (超重要!) ゲームシーン アスペクト比をまず決めること● Project フォルダ構 を決めておくこと● Sceneをあらかじめ作成しておく○ 合わせてビルド設定に Sceneを設定しておく● 上記ができたら、Gitに初期コミットすること30
アスペクト比 調整を行うジャム設計Free Aspect ままだと…・UIが固定化できない・ゲーム性に影響する多く 場合・16:9(HD、Unityroom等)・16:10・4:3(Mac等)忘れると最終日 ビルドで泣く事もし し …31
アスペクト比 調整を行うジャム設計91632
アスペクト比 調整を行うジャム設計101633
アスペクト比 調整を行うジャム設計1091634
Project フォルダ構 を決めておくことジャム設計● Unity 一般的なプロジェクトで 、第一階層に機能ごとにフォルダを分けることが多い○ Script、Scenes、Audio、Materialsなど● ゲームジャムで ユーザ毎にフォルダを分けた方が管理しやすい (と思う)○ 例) 第一階層に Scenes、ユーザフォルダ、アセットしか置かない○ ユーザフォルダに 個別で管理を行う○ you-riさん 発表(初めて ゲームプロジェクト バージョン管理)でも詳細な説明あり35
Project フォルダ構 を決めておくことジャム設計一般的な構成Assets ScenesPrefabsScriptsResourcesAudioAssets ScenesUsersストアアセット等AさんBさんCさんゲームジャムでよくやる 構成36
Project フォルダ構 を決めておくことジャム設計● ゲームジャムで プロジェクト 大規模化 しにくい○ 一般 製品プロジェクト ようにフォルダ構成を厳格にすることが、初期ゲーム開発 度を増やすと限らない● ファイル変更によるコンフリクトが起こりにくい○ ゲームジャムに Gitを使わない人も参加することがある○ 余計なコンフリクトを避けるため○ フォルダ名により所有者が明確となっているため、誰が作成したフォルダかわかりやすい● Sceneについて 単一機能 も ユーザフォルダに格納する○ Sceneフォルダ直下 Scene 常に多人数に触られるも とする○ 個人フォルダ直下 Scene 所掌範囲 機能実装用にとどめる37
Sceneをあらかじめ作成しておくジャム設計共有して触るScene 初め うちから作っておくプロジェクト初期にこ 作業を実施しておきたい● Sceneを作る→ゲーム 大まかな流れ を決める○ ゲーム ゴールを決める○ 必要な工数を考える■ チュートリアル作る か?■ ステージ毎にSceneを変える か?38
ジャム設計39タイトルゲームリザルト
ジャム設計40タイトルゲームリザルト遊び方 クレジット
ジャム設計41タイトルゲーム遊び方ストーリ&遊び方
Unity Editorを開いたらまずやることジャム設計● (超重要!) ゲームシーン アスペクト比をまず決めること● Project フォルダ構 を決めておくこと● Sceneをあらかじめ作成しておく○ 合わせてビルド設定に Sceneを設定しておく● 上記ができたら、Gitに初期コミットすること42
43T A L K03開発を進めよう
プログラミングを開始する前に● 列挙型(enum)を定義しておこう● データを貯めるところを考えよう○ シングルトンを使う?○ GameControllerが持っているコンポーネントにまとめる?● Scene間 データ受け渡しを考えよう● Tagを使わないことも考えよう44
列挙型(enum)を定義しようジャム設計● 対戦型ゲームで チームやプレイヤーを識別する必要がある。○ 1プレイヤー(Red) / 2プレイヤー(Blue) / 3プレイヤー(Green) / 4プレイヤー(Yellow)○ スポーツに 自チームと敵チームがある○ 対立構 が生まれれ 、そこを識別する必要がある● 武器に種類があれ 識別する必要がある。○ メインウェポン / サブウェポン● マップタイルに種類があれ 識別する必要がある。○ 街 / 川 / 山 / 城45
列挙型(enum)を定義しようジャム設計1P 「0」2P 「1」1P 「1」2P 「2」として定義しよう…ゲームシーンリザルトシーン46
列挙型(enum)を定義しようジャム設計1P 「0」2P 「1」1P 「1」2P 「2」winUser = 1ゲームシーンリザルトシーン47
列挙型(enum)を定義しようジャム設計ゲームシーンリザルトシーン2Pが勝った 1Pが勝った48
列挙型(enum)を定義しようジャム設計49
列挙型(enum)を定義しようジャム設計50
列挙型(enum)を定義しようジャム設計winUser = PLAYER.ONEゲームシーンリザルトシーン51 enumについて 後述 CREATE A C# STYLE GUIDEにも詳細が記載されてます
データ 取り扱いを考えようジャム設計● ゲームがどんなデータを扱うか考えてみよう○ HP、MP、マップ構成、アイテム○ プログラマ これら 値をどこに持っておくか、意識をしておくHPMPアイテム 値武器A武器B武器Cマップ構成状態 : 毒データ どこ?52
データ 取り扱いを考えようジャム設計● シングルトン?○ 楽、わかりやすい○ DontDestoryOnLoad()を使って、Sceneまたぎをさせる○ ゲームジャム向きと言える● GameController Componentで一元化する○ わかりやすい○ シーンまたぎ 時に処理を考えてあげる必要がある。● PlayerPrefs○ 最近 あまり使わない53
シーン間 データ 受け渡しジャム設計winType = PLAYER.SOLDIERどうやって渡そう?ゲームシーンリザルトシーン54
データ 取り扱いを考えようジャム設計1. ResultSceneLoadedを登録する(winTypeに PLAYER.SOLDIERが格納済み)2. Endingシーンが呼び出されるゲームシーンリザルトシーン55
データ 取り扱いを考えようジャム設計3. 登録されていたResultSceneLoadedが実行され、変数がコピーされる。ゲームシーンリザルトシーンwinType = PLAYER.SOLDIER56
Tag 使い所を考えようジャム設計● GameObjectを識別するときに便利なTag○ 簡単に使える分、多用しすぎると大変になりがち○ Tag 使い方を再度おさらいしましょう57
Tag 使い所を考えようジャム設計● Tag 比較○ あるオブジェクトに「Player」 タグを持つオブジェクトが当たったか?を検知するコード○ コリジョンを検知する際に文字列比較で Tagと当たったか?を検知したりする。■ こ 方法 比較的遅い58
Tag 使い所を考えようジャム設計● Tag 比較○ CompareTagを使おう■ こっち 方が早い59
Tag 使い所を考えよう● そもそもTag 比較が必要?○ Unity 2019からTryGetcomponentという関数が追加○ 下 コード 「Playerが持ってるコンポーネント」があれ 、 if 中を実行する。■ しかもGetComponentに比べて処理が早いU2019〜60
PlayerTag 使い所を考えようU2019〜プレイヤーA プレイヤーBコンポーネントPlayerControllerPlayerコンポーネントPlayerController↑ どっちかを比較 ↓CompareTag()TryGetComponent()OnCollisionEnter()61
Input Systemを使おう● Unity 2020より新しい入力システムとしてInput Systemが導入○ それまで Input Managerを利用していたU2020〜62
Input Systemを使おう● Input Systemに 2通り 方法で利用か う○ 使い方1 Input Action アセットにキー バインド (紐付け)を作成する■ 癖 あるけど、慣れたら直感的U2020〜63
Input Systemを使おう● Input Systemに 2通り 方法で利用か う○ 使い方2 コードで書く■ プロジェクト初期 こっち 方法が良いと思う■ プレイヤー数が大人数にならない場合にもおすすめU2020〜64
C# コード● Unity社公式 Create a C# style guide を読みましょう○ 英語苦手 人 コードだけ読め OK○ もしく DeepL翻訳つかって読んでみよう● 一般的な話も多く含まれる○ 無駄なコメントを書かない○ DRY原則○ 変数や関数 命名規則 話など● ゲームジャム チーム開発○ もちろん動くコードを書くことが大切○ 綺麗なコードを書くことも考えようhttps://resources.unity.com/ebooks/create-code-style-guide-e-bookジャム設計65
66T A L K04Unity Tips
シーンビュー 操作ロック● シーンビュー 指 マークを入れておくと、シーンで 非選択にできる。U2020〜67
コンポーネント 別窓● コンポーネントを別窓化しておける。U2020〜68
コンポーネント 別窓● 別窓化したオブジェクトがどれか分からなくなったら、Pingしよう。U2020〜69
170まず ゲームジャムに参加してみよう!23みんなで開発することを意識してみよう。Unityでつまづいたら、積極的に質問しよう。