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

ゲーム開発研修(chapter1.C#講座編)【MIXI 23新卒技術研修】

ゲーム開発研修(chapter1.C#講座編)【MIXI 23新卒技術研修】

23新卒技術研修で実施したゲーム開発研修の講義資料(chapter1.C#講座編)です。
後ほど動画も公開します。

ハンズオン用リポジトリ:https://github.com/mixigroup/2023BeginnerTrainingUnityPublic

<< ゲーム開発研修資料一覧 >>
chapter0.ゲームUX編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter0-ux

chapter1.C#講座編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter1-csharp

chapter2.Unityを使った開発のツボ編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter2-unity

chapter3.課題ゲーム紹介編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter3-problem

chapter3.ハンズオン1編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter3-handson1

chapter4.ハンズオン2編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter4-handson2

出題と解答編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-problem-and-answer

資料の利用について
公開している資料は勉強会や企業の研修などで自由にご利用頂いて大丈夫ですが、以下の形での利用だけご遠慮ください。
・受講者から参加費や授業料などを集める形での利用(会場費や飲食費など勉強会運営に必要な実費を集めるのは問題ありません)
・出典を削除または改変しての利用

MIXI ENGINEERS

May 08, 2023
Tweet

More Decks by MIXI ENGINEERS

Other Decks in Technology

Transcript

  1. この章で実践すること 1. 実用C# 2. 多少のUnity操作 ... Scene/Hierarchy/Inspector 3. ゲーム実装基本テクニック 4.

    ストレージデータ読み書き 5. Webデータ参照 目次 • 準備解説 10min • 実践① 検証アプリ 30min • 実践②ゲーム応用 30min • 実践③データ駆動 30min
  2. ゲーム開発とは何を作ることか 例えばノベル+編成+ターンバトルだとすれば... • コマンドバトルアクションをつくる • 編成・アウトゲームをつくる • ノベルをつくる …? これらゲームっぽい何らかの機能実装はスタートライン

    本質は "さまざまな「システムをつくる」" ということ ※システムとは、主要コンポーネントと相互作用するいくつかのプログラム、関連するファイル、ドキュメント、保 守などを含む包括的な概念( wikipediaより意訳
  3. システムという視点でのゲーム構築 1. アプリシステム 1.1. フレームワーク・アセットデータ管理・セーブデータ・メモリ・キャッシュなど 1.2. + 運営ゲームなら、通信・メンテナンス・中断再開・データ復旧など 2. ゲームパートシステム 2.1.

    画像、モーション、パラメータ、ステージ(レベル)を読み込みゲームルールで実行 (再生)するインタラクティブ(入力に呼応する)プレイヤーシステム 3. アウトゲームシステム 3.1. UI遷移起動と通信API/セーブの効率的な制御とパラメータ管理 4. データシステム(設定は多くの場合プランナーがつける) 4.1. 設定値参照。使いやすいのはJSON , ScriptableObject。配布時に何らか難読化する 4.2. Scene配置(実体またはマーカーで)を併用することもある 4.3. 多くの場合で効率的なツールを提供する
  4. 型情報 型 byte サイズ bit サイズ 値の範囲 利用可能 bit数 bool

    1byte 8bit (0-1) 1 byte整数 1byte 8bit 0~255 8 int整数 4byte 32bit -2147483648 ~ 2147483647 32
  5. sizeof() テスト出力 bool : 1 byte byte : 1 byte, size

    (8), 0~255 short : 2 byte, size (16), -32768~32767 ushort : 2 byte, size (16), 0~65535 Int16 : 2 byte, size (16), -32768~32767 UInt16 : 2 byte, size (16), 0~65535 int : 4 byte, size (32), -2147483648~2147483647 uint : 4 byte, size (32), 0~4294967295 Int32 : 4 byte, size (32), -2147483648~2147483647 UInt32 : 4 byte, size (32), 0~4294967295 Int64 : 8 byte, size (64), -9223372036854775808~9223372036854775807 UInt64 : 8 byte, size (64), 0~18446744073709551615
  6. ビットフラグ渡し • 1つの値に複数のフラグが保持できるビット演算は多様 な状態を並列管理するクライアント開発で重宝 • 例1 ◦ somefunction(A,B,C,D,E,F); ◦ void

    somefunction(bool a, bool b, bool c, bool d, bool e, bool f, bool g); • 例2 ◦ somefunction(A|B|C|D|E|F); ◦ void somefunction(byte value);
  7. ビットフラグと実数を確認する ビットフラグはbyte整数、int整数になるわけなので相互に見比べてみる章 Issue1.unity 1. bool, byteなどの情報をcontextmenu, console確認する(テスト) 1.1. @see SceneBItTest.TestPrint

    2. 画面を作る 2.1. @see SceneBItTest.SetUIInfos 3. 選択したビットフラグがbyte整数がいくつかを出力する(テスト 3.1. @see SceneBItTest.CheckValue 4. 整数をビットフラグでどう表すか次々に試す(クイズ) 4.1. @see SceneBItTest.NextQuestion
  8. ビットフラグをゲームフラグとして利用する 8つビットフラグと連動する扉の正解を開けてゴールに向かうゲーム進行フラグの基本を試す (アドベンチャー・RPGゲーム) Issue2.unity 1. todo 1.1. 現在のビットフラグを取得するproperty実装 @see SceneBitQuest.currentselect

    1.2. 選択のビットがSAFETYか検査するmethod実装 @see SceneBitQuest.SelectValue 1.3. 与えたビットフラグで合格するか検査するmethod実装 @see SceneBitQuest.CheckValue 1.4. 指定テロップを表示してゲームを止めるmethod実装 @see SceneBitQuest.SetGamestop 2. api 2.1. [Flag] Enum.HasFlag 2.1.1. attributeにて[Flag]が与えられているEnumではHasFlagで検査 2.1.2. https://learn.microsoft.com/ja-jp/dotnet/api/system.enum.hasflag?view=net-7.0 2.2. ビット演算 2.2.1. そのほか全ての整数にビット演算によって検査 2.2.2. 例) 4 & (1<<2) == 1 2.2.3. https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/bitwise-and-shift-operators
  9. 0. 自動配置Stage.cs(準備運動) Issue3-2.unity • 画面の指示に沿ってオブ ジェクトを自動配置する Componentを作成しPlay すると期待した配置にな り稼働する様を確認する (写真は12x5体)

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class Stage : MonoBehaviour { public GameObject player; public GameObject enemy; /// <summary> /// /// </summary> private void Start() { // @todo // var rect = (transform as RectTransform).rect; // GameObject.Instantiate() // recttransform.anchoredPosition = leftbottomposition } }
  10. Stage.cs 実装例 using System.Collections; using System.Collections.Generic; using UnityEngine; public class

    Stage : MonoBehaviour { public GameObject player; public GameObject enemy; /// <summary> /// /// </summary> private void Start() { // @todo // var rect = (transform as RectTransform).rect; // GameObject.Instantiate() // recttransform.anchoredPosition = leftbottomposition } }
  11. 1. ゲーム設定データファイル読み込み Issue3.unity 1. StageMaker.ImportStageSettingFromFile() 関数実装 2. DataLoader.ReadCurrentDir() 関数実装 ◦

    プロジェクトフォルダ/stagesetting.json 3. StageMaker.Start() にてImportStageSettingFromFile() 呼び出し
  12. 2. 設定データ出力保存 Issue3.unity 1. StageMaker.ExportCurrentStageSettingToFile()関数実装 2. DataLoader.WriteCurrentDir()関数実装 3. 新データ保存+動作確認 ◦

    保存したデータが反映されていることを確認するためタイトル画面のキャラ クター数と位置を変えるタスク ◦ StageMaker.fieldsettingの配置を変え、”再生中に”canvas/telop/titleのenemy を増やし、StageMakerコンテキストメニュー"export current setting"にて stagesetting.jsonへ保存 ◦ (StageMaker.fieldsetting、StageMaker.enemystatusは空にして )次の再生 時にstagesetting.jsonに保存されるものが反映されることを確認する
  13. Vanvas/telop/title/enemyを増やす  ctrl + D(command + D)でコピー シーンにあるGameSystemを選択して StageMakerの 「…」 メニューから

    export stage setting を実行すると実装でき ていれば現在の値でjson出力されるはず 2. 設定データ出力保存
  14. 3. Webからの設定データ参照を確認する Issue3.unity 1. StageMaker.Start()を IEnumeratorに置き換え ◦ UnityEngine.Networking.UnityWebRequest.Get(url) ◦ テストurl (後日利用はご自身でWebアップロード。

    /chapter1.gameengineerworkflow/stagesetting_websample.json ) ◦ StageMaker.SetStageSettingFromString()呼び出し 2. DataLoader.ConvertData()を実装 ◦ (string) Json to Object 3. StageMaker.SetStageSettingFromString()を実装 ◦ WebRequestリザルトをDataLoader.ConvertData()へ ◦ ConvertリザルトをStageMakerプロパティへ反映