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/
■こんなのが作れるよ
https://www.youtube.com/watch?v=W1_zKxYEP6Q
https://www.youtube.com/watch?v=UAS_pUTFA7o
https://www.youtube.com/watch?v=ao34A0Y2x6c
■前スレ
【軽量】godot engine - part2
https://mevius.5ch.net/test/read.cgi/gamedev/1619755427/
★次スレは>>950がたててください
探検
【軽量】godot engine【無料】 part3
■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
2024/02/17(土) 09:51:54.18ID:lpQfy7dC2024/03/01(金) 16:40:07.75ID:7q9U3fNz
ゲームエンジンも物理エンジンもプログラム
昔は全部自分で作っていたものがライブラリ化されエンジンとなった
既にある同じ目的のコードを自前で書くのは無駄なのでエンジンが使われる
既にある物を自前で作るのは「車輪の再発明」と言われ忌避される事が多い
しかしながら原理を知らずに使っていると様々な弊害もあるので
同じ物を作れなくともある程度の理解はあると良い
エンジンが望み通りに動かないなら自分で対処する事になる
数学や物理学に対して開発者はどうあるべきかは以下の「まえがき」を読んでみて欲しい
https://codezine.jp/article/detail/10873
昔は全部自分で作っていたものがライブラリ化されエンジンとなった
既にある同じ目的のコードを自前で書くのは無駄なのでエンジンが使われる
既にある物を自前で作るのは「車輪の再発明」と言われ忌避される事が多い
しかしながら原理を知らずに使っていると様々な弊害もあるので
同じ物を作れなくともある程度の理解はあると良い
エンジンが望み通りに動かないなら自分で対処する事になる
数学や物理学に対して開発者はどうあるべきかは以下の「まえがき」を読んでみて欲しい
https://codezine.jp/article/detail/10873
68名前は開発中のものです。
2024/03/01(金) 17:18:58.23ID:NSS/yx2e >>67
上のpeglinくらいんものはコードでやってみます(*´ω`*)
上のpeglinくらいんものはコードでやってみます(*´ω`*)
2024/03/01(金) 17:44:41.28ID:WaedCGGn
軌道予測はgodotの物理だと予測用のオブジェクト用意した上で実際に動かして軌跡保存してみたいな手法はあるみたい?
https://github.com/godotengine/godot-proposals/issues/2821#issuecomment-1941706422
https://github.com/godotengine/godot-proposals/issues/2821#issuecomment-1941706422
70名前は開発中のものです。
2024/03/01(金) 17:47:21.10ID:NSS/yx2e2024/03/01(金) 18:08:03.91ID:7q9U3fNz
知識は多ければ多い方が良い
無駄知識でも間違った情報でもそうだと知っていれば役に立つ事もある
その本は題目を見る限りでは有用な情報なので理解できるならその方が良い
内容が難しく理解出来ないならもっと簡単な所から進めるべき
原理を理解できなくても目的通りにエンジンを使えていれば及第点
コードで目的を達成する手段があれば十分
何かあった時に自分で対処する為にそれらの知識が必要
知識が多い方が解決手段を多く選べる
無駄知識でも間違った情報でもそうだと知っていれば役に立つ事もある
その本は題目を見る限りでは有用な情報なので理解できるならその方が良い
内容が難しく理解出来ないならもっと簡単な所から進めるべき
原理を理解できなくても目的通りにエンジンを使えていれば及第点
コードで目的を達成する手段があれば十分
何かあった時に自分で対処する為にそれらの知識が必要
知識が多い方が解決手段を多く選べる
2024/03/01(金) 18:16:46.47ID:7q9U3fNz
73名前は開発中のものです。
2024/03/01(金) 18:25:11.08ID:jbulu0J9 すいません、初心者ですが質問させてください。
数学で言えば、1.7320508のアークタンジェントは約60ですよね?
でも、godotで
print(atan(1.7320508)) と書いても
print(atan2(1.7320508 , 1) と書いても、
1.04719.......と謎の数字を返してきます。
これは何の数字ですか?
座標から角度を求めるのってどうやればいいんでしょうか?
数学で言えば、1.7320508のアークタンジェントは約60ですよね?
でも、godotで
print(atan(1.7320508)) と書いても
print(atan2(1.7320508 , 1) と書いても、
1.04719.......と謎の数字を返してきます。
これは何の数字ですか?
座標から角度を求めるのってどうやればいいんでしょうか?
74名前は開発中のものです。
2024/03/01(金) 18:30:36.78ID:NSS/yx2e2024/03/01(金) 18:36:19.64ID:7q9U3fNz
戻り値に想定している単位が違うのじゃろ
print(rad_to_deg(atan(1.7320508)))
print(rad_to_deg(atan2(1.7320508, 1)))
print(rad_to_deg(atan(1.7320508)))
print(rad_to_deg(atan2(1.7320508, 1)))
2024/03/01(金) 18:40:34.74ID:l95YCyF0
>>73
2π(6.28...)が360°のラジアン(弧度法)
2π(6.28...)が360°のラジアン(弧度法)
77sage
2024/03/01(金) 18:44:28.99ID:jbulu0J92024/03/01(金) 18:47:49.94ID:7q9U3fNz
ちょっと回答が投げやりすぎた
座標から角度の変換はVectorクラスに便利メソッドあるからそれ使うと良いよ
print(rad_to_deg(Vector2(1, 1).angle()))
座標から角度の変換はVectorクラスに便利メソッドあるからそれ使うと良いよ
print(rad_to_deg(Vector2(1, 1).angle()))
79名前は開発中のものです。
2024/03/02(土) 06:26:20.23ID:fHi1iYWZ godotって3dオブジェクトを2dとして扱う機能はないんですよね。
unityのように
unityのように
80名前は開発中のものです。
2024/03/02(土) 11:35:55.96ID:fHi1iYWZ エディタをフローティングにすると画面大きくて使いやすい
今まで気づかなかった(*´ω`*)、、、
今まで気づかなかった(*´ω`*)、、、
81名前は開発中のものです。
2024/03/02(土) 11:37:49.45ID:fHi1iYWZ しかし、gptがあるとだいぶ楽だねぇ
godot4には対応してないみたいだけど
godot4には対応してないみたいだけど
2024/03/02(土) 19:41:02.09ID:2foM6lQ9
無いわけじゃないけど
自分の知る限りはビューポート使うか3D素材をgodot外で2Dに起こすくらいじゃないか
もっと効率のいい方法があるなら自分が知りたいくらいだ
じゃなきゃ最初から3Dシーンで2.5Dゲーム作るほうが早いだろうな
自分の知る限りはビューポート使うか3D素材をgodot外で2Dに起こすくらいじゃないか
もっと効率のいい方法があるなら自分が知りたいくらいだ
じゃなきゃ最初から3Dシーンで2.5Dゲーム作るほうが早いだろうな
2024/03/03(日) 02:31:35.80ID:EG5KL4S5
Unityは3Dオブジェクトを2Dにしてるんじゃなくて2Dを全部3D空間上に配置してて、2Dのテンプレートも内部的には全部3Dだからそういうことができてるように見せかけてるだけ
84名前は開発中のものです。
2024/03/03(日) 04:50:28.56ID:UwGRXxZo あの2d表示が便利だなと思うこともありますよね
3dから2d素材作るために一度画像にレンダリングしないといけないのも手間ですし
3dから2d素材作るために一度画像にレンダリングしないといけないのも手間ですし
85名前は開発中のものです。
2024/03/03(日) 04:55:09.45ID:UwGRXxZo スキルもないしコツコツと小さいクソゲー作るしかないね
86名前は開発中のものです。
2024/03/03(日) 06:30:48.29ID:UwGRXxZo 他人のコードを読む能力がないわ
難しいね 他人のコードは
難しいね 他人のコードは
87名前は開発中のものです。
2024/03/04(月) 14:33:40.24ID:Y8uyU2JR 質問なんですが、下にあるデバッガーの位置は変更出来ないのでしょうか?
少し邪魔に感じることがあり、フローティング表示にしたいのですが
少し邪魔に感じることがあり、フローティング表示にしたいのですが
2024/03/04(月) 14:39:30.96ID:MRQbhd4x
>>69
コードをコピペして動かしてみた
予測軌道は描けたが実際のRigidBodyの挙動とは同じにならなかったので調整は必要そう
書かれていない初期設定部分で正しく調整されているのかも知れない
物理エンジンは自分の思い通りに動かない事が多くて悩ましい
コードをコピペして動かしてみた
予測軌道は描けたが実際のRigidBodyの挙動とは同じにならなかったので調整は必要そう
書かれていない初期設定部分で正しく調整されているのかも知れない
物理エンジンは自分の思い通りに動かない事が多くて悩ましい
2024/03/04(月) 14:47:11.25ID:MRQbhd4x
90名前は開発中のものです。
2024/03/04(月) 15:15:45.96ID:Y8uyU2JR ありがとう
諦める
実行すると勝手に開いたりするのが煩わしいなと感じて
諦める
実行すると勝手に開いたりするのが煩わしいなと感じて
2024/03/04(月) 15:49:14.81ID:MRQbhd4x
[エディタ設定][実行][出力][Always Open Output on Play]をfalseにする
変更反映はエディタ再起動後
変更反映はエディタ再起動後
92名前は開発中のものです。
2024/03/04(月) 16:51:04.53ID:Y8uyU2JR ありがとう
93名前は開発中のものです。
2024/03/04(月) 18:19:56.65ID:Y8uyU2JR extends Node2D
var line2d_node:Line2D
var mouse_pos
func _ready() -> void:
line2d_node = get_node("Line2D")
func draw_to_cursor():
for i in range(1):
# 点を打つ処理
var line_point = self.position
line2d_node.add_point(self.position)
line2d_node.add_point(mouse_pos)
print("draw")
line2d_node.clear_points()
連投すみません
数時間やって解決出来なかったので質問させてください
上で放物線の質問をしたものです。
自キャラを起点としてマウス位置にline2dを伸ばしたいのですが、描画されません。
画像のように線を1本だけ描きたい感じです
clear_points関数がなければ描画されるので、この部分の処理がまずいのだと思います。
inputでdraw_to_cursorを実行しているので、マウスを動かしたときに処理が走りますが、瞬時に消えてしまうから問題なのだと思います。
しかし、process内でやってもすぐ消えてしまいます(ラインが描画されない)。
var line2d_node:Line2D
var mouse_pos
func _ready() -> void:
line2d_node = get_node("Line2D")
func draw_to_cursor():
for i in range(1):
# 点を打つ処理
var line_point = self.position
line2d_node.add_point(self.position)
line2d_node.add_point(mouse_pos)
print("draw")
line2d_node.clear_points()
連投すみません
数時間やって解決出来なかったので質問させてください
上で放物線の質問をしたものです。
自キャラを起点としてマウス位置にline2dを伸ばしたいのですが、描画されません。
画像のように線を1本だけ描きたい感じです
clear_points関数がなければ描画されるので、この部分の処理がまずいのだと思います。
inputでdraw_to_cursorを実行しているので、マウスを動かしたときに処理が走りますが、瞬時に消えてしまうから問題なのだと思います。
しかし、process内でやってもすぐ消えてしまいます(ラインが描画されない)。
2024/03/04(月) 18:58:36.71ID:maXrH/rV
点追加→描画→クリアじゃなくて最初にクリアしてから点を追加する様にすればいいんじゃない?
それかLine2dは使わずdraw_line()で描くとか
それかLine2dは使わずdraw_line()で描くとか
2024/03/04(月) 21:05:07.83ID:MRQbhd4x
ほぼ正解なのに後一考が足りないのが惜しい
clear_points()が何をする命令かを理解し
処理の最後にclear_points()するとどうなるのか考えれば自明だと思うのだがな
clear_points()が何をする命令かを理解し
処理の最後にclear_points()するとどうなるのか考えれば自明だと思うのだがな
96名前は開発中のものです。
2024/03/05(火) 05:33:04.51ID:NetOoeu2 リファレンス見直してみます ありがとう
消し方の部分ですね
消し方の部分ですね
97名前は開発中のものです。
2024/03/05(火) 06:35:57.44ID:NetOoeu2 godotってaiインテリセンスとかないのですかね?
visual studioのあれは楽すぎてビビった記憶があります
先の先まで先読みしてくれるので
visual studioのあれは楽すぎてビビった記憶があります
先の先まで先読みしてくれるので
98名前は開発中のものです。
2024/03/05(火) 12:37:06.97ID:NetOoeu2 >>95
こんなふうに描画関数内の削除ではなく、フレーム内で削除するようにしたらうまくいきました。
どうもコードの流れが分かってないみたいです
https://imgur.com/a/GgVKnGF
図にしてみましたがこれの違いを言語化出来ないでしょうか?
https://ideone.com/hZmhwc
extends Node2D
var line2d_node:Line2D
var mouse_pos
func _ready() -> void:
line2d_node = get_node("Line2D")
func _process(delta: float) -> void:
mouse_pos = get_global_mouse_position()
line2d_node.clear_points()
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
draw_to_cursor()
func draw_to_cursor():
for i in range(1):
# 点を打つ処理
var line_point = self.position
line2d_node.add_point(self.position)
line2d_node.add_point(mouse_pos)
print("描画")
こんなふうに描画関数内の削除ではなく、フレーム内で削除するようにしたらうまくいきました。
どうもコードの流れが分かってないみたいです
https://imgur.com/a/GgVKnGF
図にしてみましたがこれの違いを言語化出来ないでしょうか?
https://ideone.com/hZmhwc
extends Node2D
var line2d_node:Line2D
var mouse_pos
func _ready() -> void:
line2d_node = get_node("Line2D")
func _process(delta: float) -> void:
mouse_pos = get_global_mouse_position()
line2d_node.clear_points()
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
draw_to_cursor()
func draw_to_cursor():
for i in range(1):
# 点を打つ処理
var line_point = self.position
line2d_node.add_point(self.position)
line2d_node.add_point(mouse_pos)
print("描画")
99名前は開発中のものです。
2024/03/05(火) 13:32:23.84ID:LGdF4KOk 図表が何の例なのかが判らないのでそれとは違う話をする
GUIアプリはライフサイクルに従って動作する
Godotの良い例が見つからなかったのでUnityのライフサイクルを元に話を進める
https://docs.unity3d.com/Manual/ExecutionOrder.html
図中の処理を以下の様に読み替えて欲しい
Awake=_init()
Start=_ready()
FixedUpdate=_physics_process()
OnMouseXXX=_input()
Update=_process()
ここで注視するのは画面描画のタイミングでそれは各種Renderingのステージで行われる
Initialization:初期化
Physics:物理演算
Input events:入力反映
Game logic:ゲーム処理
を経て、それらの処理で作られた描画データを元に描画が行われる
描画後は物理演算から繰り返し
これはUnityの例なのでGodotにおいては実行順が異なる可能性がある
GUIアプリはライフサイクルに従って動作する
Godotの良い例が見つからなかったのでUnityのライフサイクルを元に話を進める
https://docs.unity3d.com/Manual/ExecutionOrder.html
図中の処理を以下の様に読み替えて欲しい
Awake=_init()
Start=_ready()
FixedUpdate=_physics_process()
OnMouseXXX=_input()
Update=_process()
ここで注視するのは画面描画のタイミングでそれは各種Renderingのステージで行われる
Initialization:初期化
Physics:物理演算
Input events:入力反映
Game logic:ゲーム処理
を経て、それらの処理で作られた描画データを元に描画が行われる
描画後は物理演算から繰り返し
これはUnityの例なのでGodotにおいては実行順が異なる可能性がある
100名前は開発中のものです。
2024/03/05(火) 14:58:24.96ID:2jT49Fhn そもそもdraw_to_cursor内に描画処理は入ってない
add_pointは後から_draw()で描画される事になる線を構成する点を追加するというだけ
add_pointは後から_draw()で描画される事になる線を構成する点を追加するというだけ
101名前は開発中のものです。
2024/03/05(火) 16:14:33.95ID:WbtfMd0/102名前は開発中のものです。
2024/03/06(水) 06:26:28.33ID:0YKHfOtY103名前は開発中のものです。
2024/03/06(水) 06:39:24.06ID:xC/Ga180 自分は同じような内容列記するときだけ使ってるかな
APIの使い方が間違ってたり、文法がおかしかったりと普段使いはむしろ邪魔
APIの使い方が間違ってたり、文法がおかしかったりと普段使いはむしろ邪魔
104名前は開発中のものです。
2024/03/06(水) 06:45:51.37ID:0YKHfOtY 放物線あと2日くらいで完成させる(*´ω`*)
105名前は開発中のものです。
2024/03/06(水) 06:49:31.06ID:0YKHfOtY インテリコードっていう呼び名でしたっけね
106名前は開発中のものです。
2024/03/06(水) 17:57:53.24ID:0YKHfOtY is_mouse_button_pressedはありますけど、
マウスにjust pressed系はないんですかな?
マウスにjust pressed系はないんですかな?
107名前は開発中のものです。
2024/03/06(水) 18:12:02.85ID:0YKHfOtY あっ、action pressのほうでやるんすね ごめんなさい(*´ω`*)
108名前は開発中のものです。
2024/03/06(水) 18:15:22.40ID:mNCkxtfo そもそもjust pressedはactionにしかない
109名前は開発中のものです。
2024/03/07(木) 14:31:20.08ID:pWb+fA4v110名前は開発中のものです。
2024/03/07(木) 15:51:23.86ID:qvtd0tl6 今日仕入れた豆知識
ランダムでtrueかfalseの2択を使いたい時
var random : bool = randf() > 0.5
この1行でOK
ランダムでtrueかfalseの2択を使いたい時
var random : bool = randf() > 0.5
この1行でOK
111名前は開発中のものです。
2024/03/08(金) 10:20:06.16ID:G13/EPQ6 randiの方が早いよ
112名前は開発中のものです。
2024/03/08(金) 15:09:31.48ID:4aurAYnx 速度詰めるなら(randi() & 1) == 1;とか?
113軌道予測
2024/03/08(金) 19:43:07.94ID:vGL0nvHr 軌道予測の者です
考え方として、予測軌道を描きたい場合、軌道予測用のオブジェクトを一度投げないと、ポイントを取得出来ないのではないでしょうか?
物理を使わない場合、方角と力の値があれば、そこから事前に予測出来るのでしょうか?
方法を思いつかなかったので質問させてください
>>109
ですよね(*´ω`*)
考え方として、予測軌道を描きたい場合、軌道予測用のオブジェクトを一度投げないと、ポイントを取得出来ないのではないでしょうか?
物理を使わない場合、方角と力の値があれば、そこから事前に予測出来るのでしょうか?
方法を思いつかなかったので質問させてください
>>109
ですよね(*´ω`*)
114名前は開発中のものです。
2024/03/08(金) 23:32:43.87ID:Eb0+PHr0115名前は開発中のものです。
2024/03/08(金) 23:52:05.37ID:Eb0+PHr0 >>112に補足
速さを求めるなら==は要らない
bool型に代入すると型変換で遅くなるので代入するならint型
var random:int = randi() & 1
しないなら
if randi() & 1:
pass
だけどゲームで使う分には誤差だから判りやすい記述が良いと思う
速さを求めるなら==は要らない
bool型に代入すると型変換で遅くなるので代入するならint型
var random:int = randi() & 1
しないなら
if randi() & 1:
pass
だけどゲームで使う分には誤差だから判りやすい記述が良いと思う
116名前は開発中のものです。
2024/03/09(土) 00:57:45.63ID:TY4JoG/O >>113
>物理を使わない場合、方角と力の値があれば、そこから事前に予測出来るのでしょうか?
できる
予測用のオブジェクトを投げなくても計算で求められるが
RigidBodyがやってくれている計算と同等の処理は必要
ノードツリーにSprite2Dがあるとして以下のコードで右上方向に投げた場合の再現ができる
var d:Vector2 = Vector2(500, -500) #初期運動量
func _physics_process(delta: float) -> void:
d += Vector2(0, 980.0 * delta) #運動量に経過時間分の重力加速度を加算
$Sprite2D.position += d * delta #座標に経過時間分の運動量を加算
リアルタイム制のゲームは座標計算→描画を繰り返し行うのが基本
前回の座標計算からの経過時間を元に計算を行う
概ね運動量に経過時間を掛ける事で求められる
>物理を使わない場合、方角と力の値があれば、そこから事前に予測出来るのでしょうか?
できる
予測用のオブジェクトを投げなくても計算で求められるが
RigidBodyがやってくれている計算と同等の処理は必要
ノードツリーにSprite2Dがあるとして以下のコードで右上方向に投げた場合の再現ができる
var d:Vector2 = Vector2(500, -500) #初期運動量
func _physics_process(delta: float) -> void:
d += Vector2(0, 980.0 * delta) #運動量に経過時間分の重力加速度を加算
$Sprite2D.position += d * delta #座標に経過時間分の運動量を加算
リアルタイム制のゲームは座標計算→描画を繰り返し行うのが基本
前回の座標計算からの経過時間を元に計算を行う
概ね運動量に経過時間を掛ける事で求められる
117名前は開発中のものです。
2024/03/09(土) 01:59:11.51ID:TY4JoG/O 言い回しは運動量dじゃなく速度velocityとした方が良いかな?
118軌道予測
2024/03/09(土) 06:47:06.36ID:HzeElu7U 初速、方向ベクトル、力、時間の4要素がおそらく必要なんですね
運動方程式物理の本買ったんですけど、数学への抵抗感なくなればいいなぁ(*´ω`*)
運動方程式物理の本買ったんですけど、数学への抵抗感なくなればいいなぁ(*´ω`*)
119軌道予測
2024/03/09(土) 11:31:15.25ID:HzeElu7U Programmingの理解が遅い人って何が問題なんでしょうか
自分のことですけども
抽象化、というかイメージ化が出来てないのかも
自分のことですけども
抽象化、というかイメージ化が出来てないのかも
120名前は開発中のものです。
2024/03/09(土) 12:48:53.19ID:TY4JoG/O 理解できないのは理解できるサイズまで対象を分解できていないから
思い描いているイメージを具体化できてない
抽象的かつ大雑把過ぎるので細かい要素に分割する
分割した要素毎に必要な知識を理解する
Peglinを作りたい→軌道予測線を描きたい
線を描くとは→線分を画面に表示する
軌道予測とは→放物運動の開始から終了までの線分を描くための座標を取得する
放物運動とは→等速運動と自由落下する運動
座標の取得とは→放物運動の計算式から得られる
放物運動の計算式とは→(a)物理エンジンから取得するか(b)自前で自前で計算するかの二択
(a)物理エンジンで取得する→RigidBodyを実際に投げた結果から座標を取得する
実際に投げるには→他に影響を与えずに投げた結果を得るには特殊な手法が必要
特殊な手法とは→>>69が提示
(b)自前で計算する→放物運動の計算式を作る
計算式を作る→線分を描くために時間経過毎の座標を取得する→>>116で提示
要素を分解するとこんなもんか?
放物運動の計算は複雑な計算式は不要で時間経過毎に等加速と自由落下を加算するだけ
判らないなら判る所まで分解して考える
思い描いているイメージを具体化できてない
抽象的かつ大雑把過ぎるので細かい要素に分割する
分割した要素毎に必要な知識を理解する
Peglinを作りたい→軌道予測線を描きたい
線を描くとは→線分を画面に表示する
軌道予測とは→放物運動の開始から終了までの線分を描くための座標を取得する
放物運動とは→等速運動と自由落下する運動
座標の取得とは→放物運動の計算式から得られる
放物運動の計算式とは→(a)物理エンジンから取得するか(b)自前で自前で計算するかの二択
(a)物理エンジンで取得する→RigidBodyを実際に投げた結果から座標を取得する
実際に投げるには→他に影響を与えずに投げた結果を得るには特殊な手法が必要
特殊な手法とは→>>69が提示
(b)自前で計算する→放物運動の計算式を作る
計算式を作る→線分を描くために時間経過毎の座標を取得する→>>116で提示
要素を分解するとこんなもんか?
放物運動の計算は複雑な計算式は不要で時間経過毎に等加速と自由落下を加算するだけ
判らないなら判る所まで分解して考える
121軌道予測
2024/03/09(土) 18:53:53.21ID:HzeElu7U >>120
1つずつ単体テストみたいなことをやるといいんですかね?
1つずつ単体テストみたいなことをやるといいんですかね?
122名前は開発中のものです。
2024/03/10(日) 01:50:55.82ID:sSa6etmR コードを書いた時に単体テストする必要なく動くと言える事
勘違いもあるので単体テストばりに実際に確認が取れると尚良い
それが出来るなら理解したと言えるだろう
例えば線を描くならこうなる
これだけだと線分配列pointsの中身が無く動かないが
あれば動くと自信を持って言える
短いコードで動作条件も少ないので実際に動かしてテストするのも容易だろう
var points:Array
$Line2D.clear_points()
for point in points:
$Line2D.add_point(point)
分解した個々の要素が理解できたら次の課題は
目的の機能を実現する為に個々の要素を合成する事に変わる
下位工程の知識が曖昧なまま作業を進めるとやり直しが発生し効率が落ちる
余談になるが線を描く方法はdraw_line()を使う方法もある
CanvasItemクラスの継承が条件でLine2Dの様な子ノードが不要
但し描画処理は_draw()で行う必要がある
func _draw() -> void:
for idx in range(points.size() - 1):
draw_line(points[idx], points[idx + 1], Color.RED, 4)
手法それぞれメリットデメリットが存在するので目的に合わせて選択する
知識が多い方が問題解決方法を多く選択できるので何かと有利に働く
慣れない間は混乱の元にもなるので一つ一つ知識固めをする事を勧める
勘違いもあるので単体テストばりに実際に確認が取れると尚良い
それが出来るなら理解したと言えるだろう
例えば線を描くならこうなる
これだけだと線分配列pointsの中身が無く動かないが
あれば動くと自信を持って言える
短いコードで動作条件も少ないので実際に動かしてテストするのも容易だろう
var points:Array
$Line2D.clear_points()
for point in points:
$Line2D.add_point(point)
分解した個々の要素が理解できたら次の課題は
目的の機能を実現する為に個々の要素を合成する事に変わる
下位工程の知識が曖昧なまま作業を進めるとやり直しが発生し効率が落ちる
余談になるが線を描く方法はdraw_line()を使う方法もある
CanvasItemクラスの継承が条件でLine2Dの様な子ノードが不要
但し描画処理は_draw()で行う必要がある
func _draw() -> void:
for idx in range(points.size() - 1):
draw_line(points[idx], points[idx + 1], Color.RED, 4)
手法それぞれメリットデメリットが存在するので目的に合わせて選択する
知識が多い方が問題解決方法を多く選択できるので何かと有利に働く
慣れない間は混乱の元にもなるので一つ一つ知識固めをする事を勧める
123軌道予測
2024/03/10(日) 09:50:48.90ID:uoG0dKmX どうも
必要な要素が把握出来てないのかもですね
線はline2dでやってみます
必要な要素が把握出来てないのかもですね
線はline2dでやってみます
124軌道予測
2024/03/11(月) 14:26:20.28ID:CzcLH5L4 gdscriptでは関数入れ子はサポートされてないんですかね?
125名前は開発中のものです。
2024/03/11(月) 23:30:22.40ID:ZDvnxGD5 されてる
例としてはこんな感じ
func my_function():
var f = func inner_function(x)->String:
return "inner_function called from %s" % [x]
print(f.call("my_function"))
例としてはこんな感じ
func my_function():
var f = func inner_function(x)->String:
return "inner_function called from %s" % [x]
print(f.call("my_function"))
126軌道予測
2024/03/12(火) 10:22:31.68ID:6dOLlAtw myfnctionのプロパティー化しないと駄目ということですかね
127名前は開発中のものです。
2024/03/12(火) 10:43:32.43ID:Ui38L6jh 短いコードなのだから疑問に思ったら自分で試してみれば良いじゃない
var f = func inner_function(x)->String:
return "inner_function called from %s" % [x]
func my_function(name):
print(f.call(name))
公式ドキュメントはこちら
https://docs.godotengine.org/ja/4.x/classes/class_callable.html
var f = func inner_function(x)->String:
return "inner_function called from %s" % [x]
func my_function(name):
print(f.call(name))
公式ドキュメントはこちら
https://docs.godotengine.org/ja/4.x/classes/class_callable.html
128名前は開発中のものです。
2024/03/12(火) 11:23:29.64ID:Ui38L6jh 関数の実体はCallableクラスで変数fに代入しなくても扱えるし引数で渡す事もできる
関数でもループでもifブロックでもネストが増えれば難読化するので不用意には使わない
func _ready():
my_function(external_func)
func external_func(name:String):
return "external_func called from %s" % [name]
func my_function(ext_func:Callable):
print(ext_func.call("my_function"))
関数でもループでもifブロックでもネストが増えれば難読化するので不用意には使わない
func _ready():
my_function(external_func)
func external_func(name:String):
return "external_func called from %s" % [name]
func my_function(ext_func:Callable):
print(ext_func.call("my_function"))
129軌道予測
2024/03/12(火) 15:08:54.31ID:6dOLlAtw ありがとう
今すぐ使うわけじゃないんだけど知識として知りたかったんだ
会話に飢えてるのかも
今すぐ使うわけじゃないんだけど知識として知りたかったんだ
会話に飢えてるのかも
130軌道予測
2024/03/15(金) 14:19:26.75ID:z+ILEsEI ペイントソフトの筆のように線を描くのは可能でしょうか?
ペイントソフトってよく見ると点を打ってるんですよね
line2dとそれにコリジョンつけるためのsegment shapeあたりで調べてます
ペイントソフトってよく見ると点を打ってるんですよね
line2dとそれにコリジョンつけるためのsegment shapeあたりで調べてます
131軌道予測
2024/03/15(金) 14:44:55.65ID:z+ILEsEI あ、描くのはすんなり行けたナリ(*´ω`*)
132軌道予測
2024/03/15(金) 20:10:53.69ID:z+ILEsEI https://docs.godotengine.org/ja/4.x/classes/class_segmentshape2d.html
segment shapeで太さは指定出来ないっぽい
となると頂点を打って、ぐるっと囲む感じでコリジョンを作るって感じなのね
segment shapeで太さは指定出来ないっぽい
となると頂点を打って、ぐるっと囲む感じでコリジョンを作るって感じなのね
133名前は開発中のものです。
2024/03/15(金) 20:19:43.83ID:v4U5bWGM カプセルとかの単純形状系でもいけそう
134軌道予測
2024/03/16(土) 03:54:55.34ID:ECp53ZYt ライン描いてそれをコリジョン化する感じ
unityならアセットでサクッとできるんだけろうけど、godotだとサンプルが少ないナリ
unityならアセットでサクッとできるんだけろうけど、godotだとサンプルが少ないナリ
135軌道予測
2024/03/16(土) 09:40:56.08ID:ECp53ZYt136軌道予測
2024/03/16(土) 12:06:33.95ID:ECp53ZYt https://imgur.com/a/KTYggOG
単純図形をフレームごとにadd_childしてるのじゃが、一定間隔でadd_childしたとしてもつながるほど短い間隔になる保証はないのだけど、何か方法はありますかね?
単純図形をフレームごとにadd_childしてるのじゃが、一定間隔でadd_childしたとしてもつながるほど短い間隔になる保証はないのだけど、何か方法はありますかね?
137軌道予測
2024/03/16(土) 12:16:39.25ID:ECp53ZYt elapseTime+=delta
if elapseTime >= 0.001:
print("hoge")
たとえばelapseTimeでこんなふうにして実行しても、フレーム以上の描画スピードにはならんわけよね(*´ω`*)
if elapseTime >= 0.001:
print("hoge")
たとえばelapseTimeでこんなふうにして実行しても、フレーム以上の描画スピードにはならんわけよね(*´ω`*)
138名前は開発中のものです。
2024/03/16(土) 13:03:45.25ID:+bq7XejG 2点の線の間を埋めたい時は線形補完を使用する
Vector2にlerp()という線形補完メソッドがある
2点の位置ベクトルaとbが存在する時
for t in range(10):
var p = a.lerp(b, 0.1 * t)
でa-b間を通る位置ベクトルpを10得られる
公式ドキュメント
https://docs.godotengine.org/ja/4.x/tutorials/math/interpolation.html
Vector2にlerp()という線形補完メソッドがある
2点の位置ベクトルaとbが存在する時
for t in range(10):
var p = a.lerp(b, 0.1 * t)
でa-b間を通る位置ベクトルpを10得られる
公式ドキュメント
https://docs.godotengine.org/ja/4.x/tutorials/math/interpolation.html
139軌道予測
2024/03/16(土) 13:13:32.53ID:ECp53ZYt 多分、描いた線をコリジョン化したい場合は、ジオメトリー系を使うみたいです
今から調べます
今から調べます
140名前は開発中のものです。
2024/03/16(土) 13:42:11.02ID:33L2QT9a Qは一定間隔で円なの普通に見てわかるな
>>133でカプセルっつってんだからカプセルか間に長方形挟むでもいいと思うけど直線がダメか
>>133でカプセルっつってんだからカプセルか間に長方形挟むでもいいと思うけど直線がダメか
141軌道予測
2024/03/16(土) 14:03:51.94ID:ECp53ZYt 1フレームあたり座標をずらしたものを複数個追加する方法でいけるかもね
142軌道予測
2024/03/16(土) 17:55:12.95ID:ECp53ZYt ↑駄目だった
やっぱりカーソル早く動かすと1フレームあたりの描画量が足りなくて、点々になっちまう(*´ω`*)、、、、
ジオメトリあたり試してみるナリが、godotの場合、線を引いてそれにコリジョンをつけるには何の機能がいいの?
やっぱりカーソル早く動かすと1フレームあたりの描画量が足りなくて、点々になっちまう(*´ω`*)、、、、
ジオメトリあたり試してみるナリが、godotの場合、線を引いてそれにコリジョンをつけるには何の機能がいいの?
143軌道予測
2024/03/18(月) 06:18:37.02ID:sBH5kPda line2dにコリジョンつけたいんだけど、方法ある?
segmentshapeで太さ出せるだろうか?
segmentshapeで太さ出せるだろうか?
144名前は開発中のものです。
2024/03/18(月) 12:34:34.92ID:/glnBgCG SegmentShape2Dで太さは指定できない
厚みを持たせるなら元ネタ同様に球を並べるか二点を通るポリゴンを自分で作る
二点の中点にRectangleShape2Dを置いて傾けるという方法でも可能
厚みを持たせるなら元ネタ同様に球を並べるか二点を通るポリゴンを自分で作る
二点の中点にRectangleShape2Dを置いて傾けるという方法でも可能
145名前は開発中のものです。
2024/03/18(月) 13:18:28.54ID:/glnBgCG 端の処理を考えたらCaosuleShape2Dの方が綺麗にできる
146軌道予測
2024/03/18(月) 13:26:05.86ID:sBH5kPda rectangleshape2dだと曲線とか難しそうですね
玉連続の場合、1フレームあたりに複数個追加しないと玉が飛ぶんですが、どういうやり方があるんでしょうか。
玉連続の場合、1フレームあたりに複数個追加しないと玉が飛ぶんですが、どういうやり方があるんでしょうか。
147名前は開発中のものです。
2024/03/18(月) 13:30:42.80ID:/glnBgCG148軌道予測
2024/03/18(月) 13:40:45.88ID:sBH5kPda どうも
玉手法はgptに聞いてみます
線形補間もやってみます
玉手法はgptに聞いてみます
線形補間もやってみます
149軌道予測
2024/03/18(月) 19:15:29.31ID:sBH5kPda こういうときはunityでのやり方を調べると参考になるかもですね
godotだとやはり情報が少ないっす
godotだとやはり情報が少ないっす
150軌道予測
2024/03/19(火) 14:44:11.82ID:D3Qdtv84 https://www.youtube.com/watch?v=L3Lls9fY6s4
このゲームのラインって玉の連続と上で教えてもらったんですが、どこを見ると玉ということが分かりますか?
玉であってもコリジョンを曖昧にすればいけそうですね
このゲームのラインって玉の連続と上で教えてもらったんですが、どこを見ると玉ということが分かりますか?
玉であってもコリジョンを曖昧にすればいけそうですね
151名前は開発中のものです。
2024/03/19(火) 15:20:17.53ID:n2087dMP 引ける線が無制限のつもりならgd_paintみたいなお絵描き機能実装してopaque_to_polygonsの方がいいかも
152軌道予測
2024/03/19(火) 17:15:47.28ID:D3Qdtv84 無制限とはどういうことですか?
色をポリゴン化する機能は知りませんでした
色をポリゴン化する機能は知りませんでした
153名前は開発中のものです。
2024/03/19(火) 17:55:59.32ID:n2087dMP ドラッグで線を描くとして、線を引いてる間に毎フレーム線や円を追加してるとそのうちオブジェクト数がえらい事になる
154名前は開発中のものです。
2024/03/19(火) 18:44:46.90ID:hE1w1zmY えらい数になる前に点を間引いたり直線近似するんよね
155軌道予測
2024/03/20(水) 09:55:11.93ID:o2i+3Cka 球が増えすぎると重くなるとしたら、ラインのながさを制限するなりしないとだめってことですよね
それもゲーム性にすりゃいいかもです
それもゲーム性にすりゃいいかもです
156軌道予測
2024/03/20(水) 09:55:52.73ID:o2i+3Cka 点の連続で線を描くというのは一般的な方法なんでしょうか。
点が飛ぶのは、lerpでどうにか補完できないか考えてます
点が飛ぶのは、lerpでどうにか補完できないか考えてます
157軌道予測
2024/03/21(木) 11:09:56.75ID:IgSPnTWH godotで3dゲーム作るのはあり?
お遊びだけどさ
お遊びだけどさ
158軌道予測
2024/03/21(木) 13:13:49.23ID:IgSPnTWH やっぱホワイトボックスレベルでも3d作るのは大変だと感じるナリ
159名前は開発中のものです。
2024/03/21(木) 16:40:50.08ID:XmwxGLbE Godotで3Dゲームを作るのが無しだったら>>1の作例は無いだろう
3Dの方が要求知識が増えるので簡単とは言わないが苦手意識が強すぎる様に思う
3Dでもカメラを固定して一軸を全く使わなければ2Dとほぼ同じ扱いになる
3Dを使ったエフェクトが使いやすくなるのでメリットもある
3Dの方が要求知識が増えるので簡単とは言わないが苦手意識が強すぎる様に思う
3Dでもカメラを固定して一軸を全く使わなければ2Dとほぼ同じ扱いになる
3Dを使ったエフェクトが使いやすくなるのでメリットもある
160軌道予測
2024/03/21(木) 18:06:43.28ID:IgSPnTWH まあね
完成させられないで失敗しかしてないから
完成させられないで失敗しかしてないから
161名前は開発中のものです。
2024/03/21(木) 23:24:33.92ID:XmwxGLbE 少なくとも自分で調べたり聞いた結果
線の引き方は覚えたし内容は理解しきれなくとも線形補完という手法も知った
以前と比べれば何かした分は成長している
how-toを聞いただけで理解して使いこなせたら秀才
使いこなせないのは知識も経験も足りないからで功を焦りすぎ
線の引き方は覚えたし内容は理解しきれなくとも線形補完という手法も知った
以前と比べれば何かした分は成長している
how-toを聞いただけで理解して使いこなせたら秀才
使いこなせないのは知識も経験も足りないからで功を焦りすぎ
162名前は開発中のものです。
2024/03/21(木) 23:30:23.01ID:XmwxGLbE 点と点の間の線を引く際に不足する点を補完する方法が線形補完
線を引く上では一般的と言えるがゲームでの利用においては制限があるのは指摘されている通り
制限が問題になるなら対策を打つなり別方法を使用する事になる
線を引く上では一般的と言えるがゲームでの利用においては制限があるのは指摘されている通り
制限が問題になるなら対策を打つなり別方法を使用する事になる
163軌道予測
2024/03/22(金) 14:16:19.70ID:jsxrvFIK コツコツやってきます
興味が長続きしないので解決しなくても課題は定期的に変えますが、、、それが問題
興味が長続きしないので解決しなくても課題は定期的に変えますが、、、それが問題
164軌道予測
2024/03/22(金) 20:17:17.38ID:jsxrvFIK godotのコードサンプルってどこで手に入りますか?
kids can codeはたまに見ますが
kids can codeはたまに見ますが
165名前は開発中のものです。
2024/03/22(金) 22:12:21.80ID:YF/BaExa 公式のデモプロジェクト
https://github.com/godotengine/godot-demo-projects?tab=readme-ov-file
細かく解説されている訳ではないので読み解くのは大変だが物量はある
GodotEngineのバージョンで差異があるのでコードを参考にするなら対象バージョンのブランチを選ぶ
全てではないがブラウザで動かせるので手っ取り早くイメージを掴める
https://godotengine.github.io/godot-demo-projects/
https://github.com/godotengine/godot-demo-projects?tab=readme-ov-file
細かく解説されている訳ではないので読み解くのは大変だが物量はある
GodotEngineのバージョンで差異があるのでコードを参考にするなら対象バージョンのブランチを選ぶ
全てではないがブラウザで動かせるので手っ取り早くイメージを掴める
https://godotengine.github.io/godot-demo-projects/
166軌道予測
2024/03/23(土) 10:59:33.56ID:apw+jUEF■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 首相官邸前で「戦争あおるな」 台湾有事巡る答弁に抗議 [蚤の市★]
- 高市首相告白「『なめられない服』を選ぶことに数時間を費やしました」「外交交渉でマウント取れる服、買わなくてはいかんかもなぁ」 [ぐれ★]
- 【高市リスク】立民・小西洋之参院議員「高市総理がとんでもない安全保障オンチで外交オンチ」 [ぐれ★]
- 『DOWNTOWN+』会員数50万人突破で見えてきた 松本人志の“月収4ケタ万円”驚愕収入 [阿弥陀ヶ峰★]
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 ★2 [ぐれ★]
- 【悲報】東京都民さん、20過ぎてるのに自転車に乗っててて大炎上wwwwwwwwwwww女「いい歳した男で自転車に乗るのは知的障がい者だけだよ? [483447288]
- 【悲報】ミスター東大さん、高度な『ずらし』を披露するも愚民には理解されず大炎上wwwwwwwwwwww [455031798]
- 【悲報】飲酒運転で逆走し大麻所持の男(28)、とんでもない髪型で逮捕される [954071222]
- 車の窓割られ9400万円盗まれる 路上駐車1時間…痛恨のミス🥺 [399259198]
- 中国は「レアアース」のたった一言でアメリカを黙らせることができる国なのに、なんで日本はその国に喧嘩売ったの? [805596214]
- 阪神守護神・岩崎優(抑え転向後の防御率1.96→1.77→2.20→2.10) ←なんでこの人評価低いんやろ?
