【軽量】godot engine【無料】 part4 (835レス)
【軽量】godot engine【無料】 part4 http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
1: 名前は開発中のものです。 [sage] 2024/07/31(水) 07:46:19.20 ID:fxP1vISb Godotエンジンは機能豊富な、クロスプラットフォームのゲームエンジンであり、2D・3Dゲームを単一のインターフェイスで製作することができます。 基本的なツールは一通り用意され、ユーザーはプログラムの再発明をすることなくゲーム製作に集中できます。 製作したゲームは主要なデスクトップ環境(Linux, MacOS, Windows)や、モバイル(Android, iOS)、Webベース(HTML5)環境にワンクリックで書き出せます。 GodotはMITライセンスの下、完全に自由でオープンソースです。 利用に関して特に制限はありませんし、利用料を請求することもありません。 エンジンのコードの最後の一行まで、ゲームは製作したユーザーのものです。 Godotは自主的なコミュニティによって開発されており、エンジンを期待にかなうものにするため、ユーザーの方々も自由に参加できます。 Godotは非営利団体Software Freedom Conservancyによって支援されております。 ■公式サイト https://godotengine.org/ ■コミュニティ https://godotengine.org/community/ ■ドキュメント https://docs.godotengine.org/ja/4.x/ ★次スレは>>950がたててください 前スレ 【軽量】godot engine【無料】 part3 https://mevius.5ch.net/test/read.cgi/gamedev/1708131114/ http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/1
816: 名前は開発中のものです。 [sage] 2025/08/20(水) 11:26:23.53 ID:w6+HP3Ao 自分は1ファイルで見通せる方が好きなのでコードで接続してるが 通常はノードで設定した方が設定状況を纏めて見れるし エディタに接続アイコンが表示されるのでシンプルかつ見やすいと思う 主にシグナル接続をコードで書くのは自前でシグナルを定義した場合になると思うが これもグローバルクラスにすれば標準クラスと同様にノードで設定できる様になる connect以外でのCallableの使い所はラムダ関数を使う場合や関数内関数での使用になるかな http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/816
817: 名前は開発中のものです。 [] 2025/08/20(水) 11:26:50.72 ID:8BIAqddk # connect() の Callable とは? Godot 4.x から connect() の仕様が変わり、シグナル接続時に Callable クラスを使うようになりました。 記述例(4.x): button.connect("pressed", Callable(self, "_on_button_pressed")) Callable は「あるオブジェクトの特定のメソッドを呼び出すための参照」を表すクラスです。 記述例のように connect() によるシグナル接続時に Calalble コンストラクタの第一引数に実行したいメソッドを持つオブジェクト、第二引数に実行したいメソッドを記述します。 これらの引数はそれぞれ第一引数はオブジェクト参照、第二引数はそのオブジェクトが持つメソッド名(文字列)となります。 Godot 4.x では以下のような 3.x の (target, method_name) 形式は廃止され、第2引数に Callable を渡すことが必須になりました。 記述例(3.x) ※4.x 非対応: button.connect("pressed", self, "_on_button_pressed") また上記の記述例(4.x)は以下のショートハンドでも記述可能です。 記述例( 4.x ショートハンドver.) button.pressed.connect(self._on_button_pressed) これは内部的に Callable(self, "_on_button_pressed") を生成します。 Godot 公式もこの「Signal プロパティ経由」の記述方法を推奨しており、 シンプルかつ Callable を意識せずに利用できるため、実務でもこちらを使うのが一般的です。 http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/817
818: 名前は開発中のものです。 [] 2025/08/20(水) 11:28:56.28 ID:8BIAqddk # なぜ Callable を経由するのか? 簡潔にまとめると、以下のメリットがあります。 1. 安全性(未定義メソッドを is_valid() で事前検出可能) 2. IDE 補完・リファクタリング対応(文字列指定ではできなかった恩恵) 3. 統一性(シグナル以外でも「関数参照」として利用可能) 4. 柔軟性(ラムダでシンプルに書ける) 5. 将来性(Godot 4.x 以降の標準記法) http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/818
819: 名前は開発中のものです。 [] 2025/08/21(木) 07:12:58.02 ID:/HImpd/9 tonkusu http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/819
820: 名前は開発中のものです。 [] 2025/08/21(木) 10:04:41.30 ID:/HImpd/9 プログラミングっていきなり答え見たほうがいいのか? http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/820
821: 名前は開発中のものです。 [sage] 2025/08/21(木) 10:26:48.86 ID:OYDY07jx 見ないで答えるにはそれを知っていなければならないから最初は必ず見る クイズだとしても知識を持っていなければ答えられない パズルだとしてもルールを知らなければ考えられない プログラムとはコンピュータとの対話言語を使った会話 言葉を覚えると言う意味では他言語とセオリーは変わらない 曖昧さが少ない分覚えやすいまである http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/821
822: 名前は開発中のものです。 [sage] 2025/08/21(木) 12:09:28.51 ID:Ajf2SJxV 最後はアルゴリズムだからなぁ http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/822
823: 名前は開発中のものです。 [sage] 2025/08/21(木) 12:24:29.89 ID:OYDY07jx ゲームにおけるデータ処理なら必要なアルゴリズムは辞典読めば事足りると思う ゲームに必要な物ならある程度はエンジンが機能を提供してくれる 他がやってない独創的な処理を実装したいなら頭悩ますしかないね http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/823
824: 名前は開発中のものです。 [] 2025/08/21(木) 13:27:58.90 ID:zThVp00O 実装したい機能について考え方さえわからない場合も多い Godotではないが答えを見なければ今でも簡単な当たり判定すら実装できていなかっただろうと思う http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/824
825: 名前は開発中のものです。 [] 2025/08/21(木) 14:05:07.38 ID:/HImpd/9 キャラクターをスイッチしたいのだけども アクティブキャラだけ操作権があって、別キャラと衝突したらそっちに操作権が移る シグナルはキャラA,B共にarea2dを使っていてあらかじめ有効化している シグナルのオンオフをいちいち切り替えるのは面倒そうなんで a,b両方から衝突のシグナルが飛んでくるんで、フィルタリングしたい フィルタリングの条件分岐に必要な要素って何があるかな? 現在操作キャラ(a)からのシグナルを無視して、それ以外(b)からのシグナルが来たら、bに切り替えるって流れかな オンオフで対応したほうがシンプルでいいかな こういう論理的思考が壊滅的に出来ないみたい 練習方法ない? http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/825
826: 名前は開発中のものです。 [sage] 2025/08/21(木) 14:59:17.38 ID:OYDY07jx 自分が理解できない物を論理的に考えるのは無理なのでまず自分が理解できる所まで単純化する コンピュータを指示通りに動く人として捉える 相手に自分の考えを伝えるには相手が理解できる言葉を使う 相手がどこまで理解できているかを想像する >>325の例題を要約すると以下の感じであってるかな? 「アクティブ時にのみ操作可能なキャタクターが複数存在する」 「操作キャラクターが操作可能キャラクターに衝突すると操作権が衝突した相手に移る」 相手が理解しやすい単純な説明を心がける まず概要を伝えて会話する為の基礎を築く シグナルとかArea2Dだとか複雑な話題はなくて良い 相手と共通認識ができたらより複雑な話題へ移る こんな感じで物事を単純化してそこから徐々に複雑化していく 練習方法としては相手が知らない事を説明する事、仕様書を書いて読んで貰う事かな? 場を作るのが難しいけどディスカッションを多数こなすのが良いのではないかな http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/826
827: 名前は開発中のものです。 [sage] 2025/08/21(木) 15:00:29.64 ID:OYDY07jx >>325でなくて>>825だったわ http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/827
828: 名前は開発中のものです。 [sage] 2025/08/21(木) 15:57:31.56 ID:OYDY07jx 必要なのかどうか判らんが>>825の制御方法を回答するなら以下かな 操作可能キャラクターに現在操作権があるかどうかを判定するアクティブフラグを持たせる 操作はフラグが有効な場合にのみ処理する 衝突シグナルの発呼はフラグが有効な場合にのみ処理する 衝突シグナル発呼後にフラグを無効にする 衝突シグナル着呼時にフラグを有効にする http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/828
829: 名前は開発中のものです。 [] 2025/08/21(木) 17:37:16.04 ID:zThVp00O isTouchActiveみたいなbool値でシグナルの受信を管理する必要があるのかと思ったらこれでもいけるらしい ChatGPTにリファクタリングして貰ったらソースがかなり短くなった ttps://pastebin.com/YyjtJXCC ソース冒頭のGameManagerはシングルトンとしてAutoLoadに設定、プロパティはactive_charのみ このactive_charはゲーム内でアクティブなキャラを一意にする意図 プレイヤーノード構成 CharacterBody2D ├Area2D │ └CollisionShape2D └Sprite2D http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/829
830: 名前は開発中のものです。 [sage] 2025/08/21(木) 18:26:36.99 ID:OYDY07jx ゲームマネージャがアクティブなキャラクターを保持する方式だね その方が今誰がアクティブなのかが即判るので良いかもね 一つ気になる点としてはAの処理とBの処理の処理順でAが先に処理される場合 キャラクターAがBに衝突した際にアクティブキャラクターをBに更新してしまうと その後のB側の衝突処理でBは自分がアクティブキャラクターと認識してAに更新してしまうのではと思う さてどうかな? 仕様を誰でも判りやすい言語化するのはAIとの対話にも役立つと思うよ http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/830
831: 名前は開発中のものです。 [sage] 2025/08/21(木) 18:35:03.35 ID:OYDY07jx ちょっと訂正、後から文章足したからキャラクターAの登場がずれた キャラクターAとBが存在する時にAとBの処理順がAが先に処理される場合 AがBに衝突した際にアクティブキャラクターをBに更新してしまうと その後のB側の衝突処理でBは自分がアクティブキャラクターと認識してAに更新してしまうのではと思う http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/831
832: 名前は開発中のものです。 [] 2025/08/21(木) 19:10:14.51 ID:zThVp00O おっしゃる通りキャラAからキャラBにタッチした時にB側の_on_area_enteredが実行されて再度キャラAに操作権が渡る可能性があるため(物理サーバーがシグナルを発火させる順番に依存するため100%ではない) 「アクティブ側だけが切替処理を実行」「同じ物理フレームでの多重切替を禁止」の処理を盛り込む必要ありです 流石です http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/832
833: 名前は開発中のものです。 [sage] 2025/08/21(木) 19:31:45.99 ID:OYDY07jx AIが使えるとかなり捗るね 自分の上げた>>828方式だと発呼するのが一人だけなのが保証されているので複数による切り替えは発生しない >>829方式の場合はもうひと工夫が必要 これもやり方は色々あるけど一つ方法を挙げておくと 即時にアクティブキャラクターを更新するのが問題の発生原因なので更新処理を遅延させる call_deferredを使用すると現フレームと次フレームの間に処理が行われるのでこれを利用する より具体的にはアクティブキャラクター更新処理を関数化してcall_deferredで呼ぶ 自分で使うならこう書くんだけど行儀が良くないコードなので実用するなら適宜直してね (func():gm.active_char = other_char).call_deferred() http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/833
834: 名前は開発中のものです。 [] 2025/08/22(金) 12:59:11.02 ID:5H9qw/cT ありがとう じっくり読んで作るナリよ やっぱりアクティブキャラだけシグナルを発する方式が安全なんすかね? http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/834
835: 名前は開発中のものです。 [sage] 2025/08/22(金) 13:20:20.86 ID:hykeI/+Z 今回上がった>>828,829どちらでも多重切り替えの対策をしていれば安全性は変わらない 作る人が作りやすい間違えにくい方式を選べば良い 現在のアクティブキャラを頻繁に知る必要があるなら>>829の方が良いと思う >>828の場合は対象キャラクターの全件走査が必要になる >>828のメリットはゲームマネージャ不要なので携わるクラスやファイルが少なくなる事かな 全件走査の件はグローバルクラス化して静的変数を持たせればゲームマネージャを用意せずとも同じ結果を得られる やり方は色々存在する 尚現処理では2体以上のキャラクターと同時に衝突した場合の切り替え対象が不定となるので 優先順位が必要な場合は何らかの追加処理が必要 http://mevius.5ch.net/test/read.cgi/gamedev/1722379579/835
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.019s