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

Unityとゲームプログラムの基本的な構造について / Unity and Game Programming Basic Patterns

Unityとゲームプログラムの基本的な構造について / Unity and Game Programming Basic Patterns

02c47acb1dcec7e7c7fa1e9f94c14abb?s=128

sotanmochi

August 03, 2020
Tweet

Transcript

  1. Unityとゲームプログラムの 基本的な構造について 2019/05/30 S. Sugimoto

  2. ※この資料は作成途中です

  3. 背景 Unityスクリプトを普段なんとなく雰囲気で書いているけど、 実はどういう構造・仕組みでなぜ動いているのかよくわかっていない。 ゲームエンジン(Unity)について理解を深めるためにこの資料を作り始めた。

  4. Unityの基本的な構造

  5. Unityの基本的な構造 UNITYの構造 プロジェクト →シーン   →オブジェクト    →コンポーネント オブジェクトとコンポーネントが 色々と動いてシーンを構成する。 引用元:Unite 2015「Unityプロジェクトをひも解き把握するには」(山村達彦<ユニティ・テクノロジーズ・ジャパン合同会社>)

    https://japan.unity3d.com/unite/unite2015/files/DAY2_1300_room2_Yamamura.pdf
  6. Unityプロジェクトの構造 プロジェクトの構造 • プロジェクトは複数のシーンを持つ事がある。 • シーンは複数のオブジェクトを持つ。 • オブジェクトは複数のコンポーネントを持つ。 • コンポーネントは複数のアセットへの参照を持つ

    引用元:Unite 2015「Unityプロジェクトをひも解き把握するには」(山村達彦<ユニティ・テクノロジーズ・ジャパン合同会社>) https://japan.unity3d.com/unite/unite2015/files/DAY2_1300_room2_Yamamura.pdf
  7. Project Scene1 Scene2 Scene3 GameObject 10 GameObject 11 GameObject 20

    GameObject 21 GameObject 22 GameObject 30 GameObject 31 GameObject 32 GameObject 23
  8. GameObject 1 MoveComponent Speed = 5 XXXComponent YYYComponent ZZZComponent GameObject

    2 MoveComponent Speed = 10 YYYComponent class MoveComponent { float Speed; ・・・ } class XXXComponent コンポーネント (インスタンス) コンポーネント (クラス) ゲームオブジェクト (インスタンス) class YYYComponent class ZZZComponent
  9. ゲームオブジェクトの動作はアタッチされた Component によ り制御されます。 Unity ビルトインのコンポーネントは多目的で使用できるもの の、カスタムのゲーム機能を実装するには十分でない場合が 多いです。 Unity により

    Script を使用してカスタムのコンポーネントを作 成し、ゲーム中のイベント開始、時間の経過に伴ったコンポー ネントプロパティーの修正、ユーザー入力操作への反応がで きます。 引用元:スクリプトの作成と使用 - Unity マニュアル https://docs.unity3d.com/ja/2018.3/Manual/CreatingAndUsingScripts.html Unityスクリプト
  10. Unityスクリプトのイベント関数の実行順 画像出典:イベント関数の実行順 - Unity マニュアル https://docs.unity3d.com/ja/2018.2/Manual/ExecutionOrder.html

  11. ゲームプログラムの基本的な構造

  12. ゲームプログラムってどうやって動いているのか? プログラムはMainメソッドから実行が始まるって習いました! でも、Unityでスクリプトを書くときに見たことないです・・・ ゲームプログラムの基本パターン ・ゲームループ(Game Loop) ・ゲームオブジェクト(Game Object)とコンポーネント(Component) ・更新メソッド(Update Method)

  13. ゲームループ(Game Loop) ゲームプログラム全体の流れを制御する ループ プレイヤーがゲームを終了しない限り、ルー プし続ける 1回のループが1フレーム 入力処理、ゲーム更新、出力(描画) ※開発中のC++のコード(まだゲームとして動いてないよ)

  14. GameObject 1 MoveComponent Speed = 5 XXXComponent YYYComponent ZZZComponent GameObject

    2 MoveComponent Speed = 10 YYYComponent class MoveComponent { float Speed; ・・・ } class XXXComponent コンポーネント (インスタンス) コンポーネント (クラス) ゲームオブジェクト (インスタンス) class YYYComponent class ZZZComponent
  15. 更新メソッド(Update Method) 1フレーム分の処理を実行するUpdateメ ソッドを全てのゲームオブジェクトに実装す る 1フレームに1回、ゲームループはシーンに 含まれる全てのゲームオブジェクトについて Updateメソッドを呼び出す ※開発中のC++のコード(まだゲームとして動いてないよ)

  16. 更新メソッド(Update Method) ゲームオブジェクトに含まれる全てのコン ポーネントについてUpdateメソッドを呼び出 す Componentクラスを継承している様々なコ ンポーネントのUpdateメソッドを呼び出す ※開発中のC++のコード(まだゲームとして動いてないよ)

  17. 更新メソッド(Update Method) Componentクラスを継承している様々な コンポーネントのUpdateメソッドが呼び出 される Unityでスクリプト書く時に public class MyScript :

    MonoBehaviour {} という感じになっているのは、 Componentクラスの継 承に相当する。 これがゲームエンジンで Updateメソッドが勝手に (?)呼び出されて実行される仕組み(のはず) ※開発中のC++のコード(まだゲームとして動いてないよ)
  18. 参考文献 ゲームエンジニア養成読本 https://gihyo.jp/book/2018/978-4-7741-9498-1 https://www.amazon.co.jp/dp/B078HYH26V/ Game Programming Patterns ソフトウェア開発の問題解決メニュー https://book.impress.co.jp/books/1114101121 https://www.amazon.co.jp/dp/B015R0M8W0/

    ゲームプログラミング C++ https://www.shoeisha.co.jp/book/detail/9784798157610 https://www.amazon.co.jp/dp/B07JVMJ9B1/
  19. ※この資料は作成途中です 気が向いたらブラッシュアップします

  20. None