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

Godot Engine でゲームを作ろう!リーダブルノードのススメ

Godot Engine でゲームを作ろう!リーダブルノードのススメ

2024年9月22日に開催された、「ゲームジャム高梁2024 事前勉強会」で発表したスライドです。

イベント詳細 : https://hirouni.connpass.com/event/326500/
ゲームジャム高梁公式サイト : https://gjtakahashi.okayamaunity.com

NAKAOKU Takahiro

September 22, 2024
Tweet

More Decks by NAKAOKU Takahiro

Other Decks in Technology

Transcript

  1. ナカオク タカヒロ Follow me! Github/FB @kamera25 X(旧Twitter) @csc_kamera25 仕事 :

    ネットワークSE@広島 好きなゲーム : ゼルダの伝説 2
  2. 4

  3. 5

  4. 6

  5. 19

  6. 23 よくあるパターン 1. HPなら俺に任せろ! HPマネージャーノード を作る hit_player _by_enemy() 2. 敵に当たったら

    プレイヤーがHPマネージャーの関数を呼ぶ HPManagerNode ゲームオーバーの処理 HPの減らす処理 HPが0になった時の処理 HPを回復させる処理 ❤を表示させる処理 ❤画像ノード 色々な関数()
  7. HPGodManagerNode ゲームオーバーの処理 HPの減らす処理 HPが0になった時の処理 HPを回復させる処理 ❤を表示させる処理 HPが減った時に、攻撃力を上げる処理 +新機能 状態異常を受けた時 ❤の色を変える処理

    HPが減った時に、音を鳴らす処理 急にオンラインゲームになったので HPを他プレイヤーと共有する処理 HPに応じてプレイヤーの動きを 変える処理 HPが減った時に、攻撃力を上げる処理 ゲーム難易度から HPのMAX値を変更する処理 これで、ヨシ!
  8. 26

  9. 30 シグナルとは ある イベント が発生した時に、登録先に通知されるもの イ ベ ン ト マウス

    や キーボード を クリックした 時 当たり判定に 衝突した 時 タイマーが 残り60秒となった 時 HPが 0になった 時
  10. 31 シグナルとは ある イベント が発生した時に、登録先に通知されるもの イ ベ ン ト マウス

    や キーボード を クリックした 時 当たり判定に 衝突した 時 タイマーが 残り60秒となった 時 HPが 0になった 時 ゲームは イベント の カタマリ である
  11. 34 通知 area_enterd シグナル ノード1 処理1 ノード2 処理1 ノード3 処理1

    処理2 シグナルの流れ 発火! バッドパターンを直していきましょう。
  12. 42 知らないこと は 良いこと PlayerNode HPManagerNode hitシグナル 知ってる HPManagerNode 知ってる

    知ってる 敵に当たったら hit_player_by_enemy() を呼び出す処理 前 後 ☝ 知らない PlayerNode
  13. 43 知らないこと は 良いこと PlayerNode HPManagerNode hitシグナル 知ってる HPManagerNode 知ってる

    知ってる 敵に当たったら hit_player_by_enemy() を呼び出す処理 前 後 ☝ 知らない PlayerNode 必要以上 に 関係 を持たないこと!
  14. 52 HP変数を使いたいため、色々な機能が集まる 解 決 方 針 HPManagerNodeを ふるまいごと に分解する ふるまいには

    具体的な名前 をつける HPノードとは シグナル でやりとり ふるまい = Behavior
  15. 57

  16. 59 HPNode ゲームオーバーの処理 HPの減らす処理 HPが0になった時の処理 HPを回復させる処理 ❤を表示させる処理 HP HPを増減させる関数 GameOverHandler

    DamageReceiver HealthRestorer HPIconPresenter ❤画像ノード 分解したのはいいけど HP変数へのアクセス どうするの? ☝
  17. 60 HPNode ゲームオーバーの処理 HPの減らす処理 HPが0になった時の処理 HPを回復させる処理 ❤を表示させる処理 HP HPを増減させる関数 GameOverHandler

    DamageReceiver HealthRestorer HPIconPresenter ❤画像ノード 分解したのはいいけど HP変数へのアクセス どうするの? ☝ 本当に HP変数 へのアクセスが必要なのか?
  18. HP値自体を持つノード HP値自体を操作する必要がある HP値が変更された事が分かれば良い 61 ゲームオーバーの処理 HPの減らす処理 HPが0になった時の処理 HPを回復させる処理 ❤を表示させる処理 GameOverHandler

    DamageReceiver HealthRestorer HeartUIPresenter HPNode HP HPを増減させる関数 シグナル を使おう 継承して 関数呼び出し を使おう ※時間が無いため、ここでは説明割愛
  19. 69 シグナルとは ある イベント が発生した時に、登録先に通知されるもの イ ベ ン ト マウス

    や キーボード を クリックした 時 当たり判定に 衝突した 時 タイマーが 残り60秒となった 時 HPが 0になった 時
  20. 73 参考資料 • 良いコード悪いコードで学ぶ設計入門 - 仙塲 大也 • CODING THE

    ENTITY-COMPONENT PATTERN IN GODOT - GDQuest https://www.gdquest.com/tutorial/godot/design-patterns/entity-component-pattern/ • Godotの設計哲学 - Godot Doc https://docs.godotengine.org/ja/4.x/getting_started/introduction/godot_design_philosophy.html • ぴぽや倉庫 https://pipoya.net/