X



【軽量】godot engine【無料】 part3
0001名前は開発中のものです。
垢版 |
2024/02/17(土) 09:51:54.18ID:lpQfy7dC
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がたててください
0002名前は開発中のものです。
垢版 |
2024/02/17(土) 09:53:05.63ID:lpQfy7dC
■非公式フォーラム(redditのほうが人が多いかも)
https://www.reddit.com/r/godot/
0003名前は開発中のものです。
垢版 |
2024/02/17(土) 10:20:55.34ID:RX1RYYC1
>>1
コミュニティのリンク先を見て欲しいのだが>>2のサイトも公式として紹介されている
公式・非公式綺麗に纏められているのでリンク一つに纏めさせてもらった
0004名前は開発中のものです。
垢版 |
2024/02/17(土) 10:41:51.16ID:lpQfy7dC
そこまで見てなかったよ(*´ω`*)
0006名前は開発中のものです。
垢版 |
2024/02/17(土) 14:39:20.74ID:lpQfy7dC
低スペpcにはマジありがてぇ
0007名前は開発中のものです。
垢版 |
2024/02/17(土) 20:42:22.71ID:eCZf6LS8
1乙、この板って保守とかしないでも大丈夫?
0008名前は開発中のものです。
垢版 |
2024/02/18(日) 13:34:45.25ID:pPH7PCwn
必要な作業以外しないってすごく大事だね
スムーズに開発するにはスキルが必要

>>7
大丈夫だと思う
0009名前は開発中のものです。
垢版 |
2024/02/20(火) 10:36:21.66ID:TYJz4VqA
保守
1週間で作品が完成しなかかっったら次のアイディアを試す
気力がキープ出来ないから
0010名前は開発中のものです。
垢版 |
2024/02/21(水) 18:07:53.24ID:pdI9ZoxT
保守

機能が実現できりゃ、難しいコードを使う必要はないのかな
0020名前は開発中のものです。
垢版 |
2024/02/23(金) 10:51:47.15ID:SBDKsaXP
godetteってギークなの?
0021名前は開発中のものです。
垢版 |
2024/02/23(金) 13:58:18.82ID:kaYFHsTE
バックパックバトルがまさかのGodot製と知って驚いてるんだけど
対戦相手の鯖に一時保存したプレイヤーデータ、デッキ構成はどんな仕組み使ってるんですかね
FireBaseとかSilentWolfみたいなサービス?それとも独自鯖立ててデータのやり取りをしてる?
0022名前は開発中のものです。
垢版 |
2024/02/23(金) 16:33:12.77ID:KaOghwk2
>>21
まさかのどころか昔からyoutubeでgodotのtips紹介してた人達が開発してるし
赤い猫のキャラは古い動画にもいて見おぼえあったからトレーラー見て
「あれ、このゲームあの人らが作ったやつ?」って気づいた
0024名前は開発中のものです。
垢版 |
2024/02/24(土) 00:34:21.72ID:pQc5HIwF
キャラクターのスクリプトがだいぶゴチャゴチャしてきたので空ノードに移動周りを分割して置こうかと思ったんですが、
合計の長さはほぼ同じとして、分割すると1つの長いスクリプトより動作速度が遅くなったりしますかね?
アクションゲームなので数フレームでも差が出たら困るので……

ちなみにgodotは静的型付けをするだけで結構速度が向上するらしく、
意外と繊細なのかなと思ったので質問した次第です
0025名前は開発中のものです。
垢版 |
2024/02/24(土) 09:56:05.94ID:UJ2cIK+9
変数参照が一回増えるんじゃね
すでに複雑な関数を呼ぶなら大して変わらんやろう
0026名前は開発中のものです。
垢版 |
2024/02/24(土) 11:23:13.63ID:jvQUe1xj
ゲームて自分が面白いと思った仕組みや現象から作る?
どういうアイディアだと情熱が長続きするか分からん
短期間で作れるものをガンガン作るというのも1つだけど
0027名前は開発中のものです。
垢版 |
2024/02/24(土) 18:07:04.50ID:jvQUe1xj
いいアイデアがないときどうしたらいいだろう
パクリでもいいから作るとか
0029名前は開発中のものです。
垢版 |
2024/02/24(土) 20:15:30.90ID:oiuR+FqZ
それはなかなか良い学び姿勢だよ
プログラミングでダメな奴はだいたい仕上げる前に「もっとカッコイイしゅっとした方式にしたい」とか
「もっと美しく書くにはどうしたら」とか「コーディング環境をもっとクールにしたい」とか枝葉にこだわって自滅する
そういう枝葉は、まず動くものを作るこれが出来てからやることなのだ
0030名前は開発中のものです。
垢版 |
2024/02/24(土) 20:30:09.20ID:SG1+4YcH
>「もっと美しく書くにはどうしたら」とか
いやほら、書いたコードは三日で忘れるっていうから・・(言い訳)
003124
垢版 |
2024/02/24(土) 20:54:02.58ID:pQc5HIwF
>>25
色々調べてみたけど分ける分けないはまあだいたい場合による、好みによるって感じみたいですね
セレステのキャラクター制御コードは5000行らしいというのを見かけて
たかだか数百行で文句言ってもしょうがないなって思いました
0033名前は開発中のものです。
垢版 |
2024/02/25(日) 09:42:22.86ID:JZ4LT6DH
ゲームどこで売ってる?
ある程度質が良くなけりゃsteamは無理だしね
0034名前は開発中のものです。
垢版 |
2024/02/25(日) 10:53:36.73ID:JZ4LT6DH
ドロー系の物理って簡単に作れる?
0035名前は開発中のものです。
垢版 |
2024/02/25(日) 18:25:58.84ID:SdrgoNWx
プレイヤーが描いた絵からメッシュを生成できればコリジョンもできるよね
0036名前は開発中のものです。
垢版 |
2024/02/25(日) 22:44:08.51ID:C1J2BM3C
ゲームの多重起動を防止する設定ってありますか?
設定項目が無いなら、自分で起動時にチェックすりゃいい話だけど
0037名前は開発中のものです。
垢版 |
2024/02/26(月) 13:59:54.24ID:Hx1+xlVG
型付けする変数としない変数って、混在してもいいんですかね?
補完をだしたい場合は混在させてる

>>35
そう、出来るみたい
そういうパズルゲーム作ろう
0038名前は開発中のものです。
垢版 |
2024/02/26(月) 15:09:58.13ID:Hx1+xlVG
スレが賑わっていて嬉しいナリね
0039名前は開発中のものです。
垢版 |
2024/02/26(月) 17:14:01.53ID:Hx1+xlVG
見た目から入る作り方もありだと思う
見た目がしょぼいとやる気がなくなるから
peglinパクる
0040名前は開発中のものです。
垢版 |
2024/02/27(火) 14:40:25.81ID:BNNCM4m5
contact monitorの設定は地雷だな
0041名前は開発中のものです。
垢版 |
2024/02/27(火) 17:58:16.94ID:BNNCM4m5
https://www.youtube.com/watch?v=2eqRX3rZrZE
予測軌道の描画かなり難しそうなんだけど、簡単にやる方法ないかな?
仮の弾丸を発射させることを考えてみたけど
0043名前は開発中のものです。
垢版 |
2024/02/28(水) 10:16:40.11ID:Dy7hE2G/
>>42
カスタムテンプレートってコピペと大差ない?
characterbodyには最初から付いてるね

>>42
なるほど characterbodyのスクリプトで弾丸を動かすのですか。
rigidbodyを使ったら予測が難しくなりますか。
0044名前は開発中のものです。
垢版 |
2024/02/28(水) 10:41:06.33ID:iBFNXgc5
テンプレートは自動化されたコピペ、自動なら手間要らずで忘れる事もない
contact_monitorに関しては処理が重いから初期値がオフなので
そこを意識しないと別な問題を誘発する

予測軌道を描くには点や線の座標が必要になる
RigidBodyを使って座標取得はできなくはないが手間が掛かる
RigidBodyを使う場合はどうすればできるか考えてみて欲しい
その手間を無くす為に自前で座標を計算する
0045名前は開発中のものです。
垢版 |
2024/02/28(水) 11:10:36.60ID:Dy7hE2G/
>>44
ありがとう
チャレンジしてみます

確かにrigidbodyを使う場合、物理エンジンの中?に触らないといけないイメージ
0046名前は開発中のものです。
垢版 |
2024/02/28(水) 11:21:17.38ID:iBFNXgc5
物理エンジン内は触れないから
状態を保存し必要な所まで時間を進めて座標を取得し状態を戻す手順になる
文章にすると一行だが状態の保存と復元は処理コストがとても高い

ゲーム物理はなんちゃってで十分なので本格的演算は不要
初速と重力加速度だけでそれっぽく動く
0048名前は開発中のものです。
垢版 |
2024/02/28(水) 13:06:22.58ID:iBFNXgc5
そのスクリプトは黒で予測軌道を描く部分だけでRigidBodyを使った計算はしていない
19行目が初速
vel = new Vector3(initVel * Mathf.Cos(angle), initVel * Mathf.Sin(angle), 0);
33行目が重力加速
y = vel.y * time - 0.5f * gravity * time * time;
時間毎に線分を描いている

実行結果はRigidBodyを使って線分通りに動くかの確認
RigidBodyと全く同じにしようすると計算が若干複雑になる
y = vel.y * time - 0.5f * gravity * (time * time + time * Time.fixedDeltaTime);

適当に見繕った参考ページでUnityの例なのでRigidBodyの挙動は異なる可能性がある
RigidBodyを模倣するより座標を自前計算する方が楽
0049名前は開発中のものです。
垢版 |
2024/02/28(水) 15:11:50.00ID:Dy7hE2G/
ありがとう
一定間隔で座標を取る感じですね
0050名前は開発中のものです。
垢版 |
2024/02/29(木) 12:21:24.56ID:DIGOgAn2
characterbodyでボールの挙動をする場合、バウンドやフリクションの設定も自分で作る感じでしょうか?
move_and_collideで初速と重力は出来ました
0051名前は開発中のものです。
垢版 |
2024/02/29(木) 12:53:46.44ID:HPBXgIgC
反射や摩擦も反映して予測軌道として表示したければそうなる
実現は可能だが要素を足せば足すほどコードも複雑になる
全ての物理現象に対して予測線は必要なのか動作停止まで予測線を描くのか?
何をしたいかによるが自分なら射出方向と最初のヒットまで表示できていれば十分とする

ゲームでそこまで処理している例が思いつかないが何か知っている物はあるかい?
投擲武器で反射後まで予測してるのはあった気はするが実装としてはコスト高
大抵は最初の接触点までで最後まで反射させるのは直線移動の物だと思う
0052名前は開発中のものです。
垢版 |
2024/02/29(木) 13:09:07.90ID:HPBXgIgC
反射や摩擦を含んだ挙動が必要ならRigidBodyを使うと良い
予測線処理に自前演算を勧めたが最初の接触までの予測はそれで行い
実際の挙動はRigidBodyに任せるという方法も取れる
自前演算と標準の演算で結果に差がでるかもしれないが誤差で許容する
どれくらいの精度が必要か開発コストは見合っているかの判断が要求される
0053名前は開発中のものです。
垢版 |
2024/02/29(木) 13:10:48.11ID:DIGOgAn2
ありがとうございます
反射後の予測軌道ではなくて、単にブロック崩しのような壁バウンドを作りたかったです(重力あり)
説明が悪かったです

frictionの記事は見つかりました
バウンドは単純にノーマルを逆にすればいいんですね コードでやるのは初めてなので
0054名前は開発中のものです。
垢版 |
2024/02/29(木) 13:14:39.43ID:DIGOgAn2
>>52
そっちのほうがスマートかもしれないですね
0055名前は開発中のものです。
垢版 |
2024/02/29(木) 13:18:05.73ID:HPBXgIgC
ブロック崩しで良いなら
反射は反転で良いし壁に角度があってもそれほど処理は複雑にならない
摩擦も壁に当たったら適当に減速で良い
厳密な物理シミュレーションする必要がなければ自分で作った物理法則で問題ない

予測軌道で最初の方向性を示すだけで良いならRigidBodyに任せるのが楽
0057名前は開発中のものです。
垢版 |
2024/02/29(木) 14:26:37.93ID:DIGOgAn2
peglinというゲームです
0058名前は開発中のものです。
垢版 |
2024/02/29(木) 15:14:10.01ID:HPBXgIgC
放物線を描いてるから重力はある物理演算だね
予測軌道は初回ヒットまででヒット後は軌跡を描いて跳ね返り表現
単純だから自前でやっても良いしRigidBodyでやっても良い
RigidBodyの方が物理パラメータ色々弄るの楽だからRigidBodyを勧めるかな
今までの知識を纏められたら同じ物は作れるんじゃない?
0059名前は開発中のものです。
垢版 |
2024/02/29(木) 17:11:25.31ID:DIGOgAn2
どうもです
じゃあ勉強がてらコードでやってみます
0060名前は開発中のものです。
垢版 |
2024/02/29(木) 17:16:30.98ID:DIGOgAn2
まよったらエンジンに頼らない方向で作成してみる
難しすぎて出来ないことならともかく
0061名前は開発中のものです。
垢版 |
2024/02/29(木) 20:06:33.97ID:DIGOgAn2
何度もごめんなさい
https://youtu.be/174vFOCbONI?si=RU6NyS9XwuCQzUUT&t=133
よくあるブロック崩しはこの動きですが、スクリプトだと勢いが徐々に減算していく動きっていうのは難しいんでしょうか。
0062名前は開発中のものです。
垢版 |
2024/02/29(木) 20:28:47.87ID:HPBXgIgC
衝突時や毎フレーム速度を減少する
空気抵抗的に徐々に速度を落とすなら毎フレーム減速すれば良い

コードで実現するのは難しいと思い込んでいる様に思われるが少し違う
再現したい事象はどういう式で成り立っているかの数学的知識が求められている
演算式をコード化するのは機械的作業でしかない
0064名前は開発中のものです。
垢版 |
2024/02/29(木) 20:51:41.92ID:HPBXgIgC
リンク再生して等速運動しかしてないなって思ってたが時間指定付いてたの気が付いてなかったわ
確かに動画内で説明してるな
今は英語判らなくても自動翻訳で日本語字幕付けられるから上手く使う癖は付けた方が良いな

とは言え自分も先日どうしても判らない処理の解説が動画しかなかったので翻訳も付けて見てみたが
やっぱり判らなかったので苦手意識があると内容が理解し難くなるってのはあるかもね
0065名前は開発中のものです。
垢版 |
2024/03/01(金) 12:37:24.64ID:NSS/yx2e
>>62
>>63
ありがとうございます
多少の数学の知識が必要になるんですかね
公式など探してみます
0066名前は開発中のものです。
垢版 |
2024/03/01(金) 13:22:36.85ID:NSS/yx2e
物理エンジンもこのようにコードで制御しているのでしょうか
より複雑でしょうけども
0067名前は開発中のものです。
垢版 |
2024/03/01(金) 16:40:07.75ID:7q9U3fNz
ゲームエンジンも物理エンジンもプログラム
昔は全部自分で作っていたものがライブラリ化されエンジンとなった

既にある同じ目的のコードを自前で書くのは無駄なのでエンジンが使われる
既にある物を自前で作るのは「車輪の再発明」と言われ忌避される事が多い
しかしながら原理を知らずに使っていると様々な弊害もあるので
同じ物を作れなくともある程度の理解はあると良い
エンジンが望み通りに動かないなら自分で対処する事になる

数学や物理学に対して開発者はどうあるべきかは以下の「まえがき」を読んでみて欲しい
https://codezine.jp/article/detail/10873
0068名前は開発中のものです。
垢版 |
2024/03/01(金) 17:18:58.23ID:NSS/yx2e
>>67
上のpeglinくらいんものはコードでやってみます(*´ω`*)
0070名前は開発中のものです。
垢版 |
2024/03/01(金) 17:47:21.10ID:NSS/yx2e
https://www.sbcr.jp/product/4797376999/
そういえばこれを持っていたけど、このくらいの理解では足りないのかな?
この本のあまり理解出来なかったけど
0071名前は開発中のものです。
垢版 |
2024/03/01(金) 18:08:03.91ID:7q9U3fNz
知識は多ければ多い方が良い
無駄知識でも間違った情報でもそうだと知っていれば役に立つ事もある
その本は題目を見る限りでは有用な情報なので理解できるならその方が良い
内容が難しく理解出来ないならもっと簡単な所から進めるべき

原理を理解できなくても目的通りにエンジンを使えていれば及第点
コードで目的を達成する手段があれば十分
何かあった時に自分で対処する為にそれらの知識が必要
知識が多い方が解決手段を多く選べる
0072名前は開発中のものです。
垢版 |
2024/03/01(金) 18:16:46.47ID:7q9U3fNz
>>69
move_and_collideを1フレーム中に連続使用するのは思いつかなかった
この方法で行けそうな気はするね
自前でやると誤差が気になったのでエンジンに任せられるならその方が良いね
0073名前は開発中のものです。
垢版 |
2024/03/01(金) 18:25:11.08ID:jbulu0J9
すいません、初心者ですが質問させてください。
数学で言えば、1.7320508のアークタンジェントは約60ですよね?
でも、godotで
print(atan(1.7320508)) と書いても
print(atan2(1.7320508 , 1) と書いても、
1.04719.......と謎の数字を返してきます。
これは何の数字ですか?
座標から角度を求めるのってどうやればいいんでしょうか?
0074名前は開発中のものです。
垢版 |
2024/03/01(金) 18:30:36.78ID:NSS/yx2e
>>71
ありがとう
物理なしでやります
案外、脱線しているときにアイディアでたりしますしね(*´ω`*)
0075名前は開発中のものです。
垢版 |
2024/03/01(金) 18:36:19.64ID:7q9U3fNz
戻り値に想定している単位が違うのじゃろ
print(rad_to_deg(atan(1.7320508)))
print(rad_to_deg(atan2(1.7320508, 1)))
0077sage
垢版 |
2024/03/01(金) 18:44:28.99ID:jbulu0J9
>>75、76
あーラジアンでしたっけ…
もともと数学苦手なうえにもう忘れてました
rad_to_degって組み込み関数があるんですね
覚えておきます
ありがとう
0078名前は開発中のものです。
垢版 |
2024/03/01(金) 18:47:49.94ID:7q9U3fNz
ちょっと回答が投げやりすぎた
座標から角度の変換はVectorクラスに便利メソッドあるからそれ使うと良いよ
print(rad_to_deg(Vector2(1, 1).angle()))
0079名前は開発中のものです。
垢版 |
2024/03/02(土) 06:26:20.23ID:fHi1iYWZ
godotって3dオブジェクトを2dとして扱う機能はないんですよね。
unityのように
0080名前は開発中のものです。
垢版 |
2024/03/02(土) 11:35:55.96ID:fHi1iYWZ
エディタをフローティングにすると画面大きくて使いやすい
今まで気づかなかった(*´ω`*)、、、
0081名前は開発中のものです。
垢版 |
2024/03/02(土) 11:37:49.45ID:fHi1iYWZ
しかし、gptがあるとだいぶ楽だねぇ
godot4には対応してないみたいだけど
0082名前は開発中のものです。
垢版 |
2024/03/02(土) 19:41:02.09ID:2foM6lQ9
無いわけじゃないけど
自分の知る限りはビューポート使うか3D素材をgodot外で2Dに起こすくらいじゃないか
もっと効率のいい方法があるなら自分が知りたいくらいだ

じゃなきゃ最初から3Dシーンで2.5Dゲーム作るほうが早いだろうな
0083名前は開発中のものです。
垢版 |
2024/03/03(日) 02:31:35.80ID:EG5KL4S5
Unityは3Dオブジェクトを2Dにしてるんじゃなくて2Dを全部3D空間上に配置してて、2Dのテンプレートも内部的には全部3Dだからそういうことができてるように見せかけてるだけ
0084名前は開発中のものです。
垢版 |
2024/03/03(日) 04:50:28.56ID:UwGRXxZo
あの2d表示が便利だなと思うこともありますよね
3dから2d素材作るために一度画像にレンダリングしないといけないのも手間ですし
0085名前は開発中のものです。
垢版 |
2024/03/03(日) 04:55:09.45ID:UwGRXxZo
スキルもないしコツコツと小さいクソゲー作るしかないね
0086名前は開発中のものです。
垢版 |
2024/03/03(日) 06:30:48.29ID:UwGRXxZo
他人のコードを読む能力がないわ
難しいね 他人のコードは
0087名前は開発中のものです。
垢版 |
2024/03/04(月) 14:33:40.24ID:Y8uyU2JR
質問なんですが、下にあるデバッガーの位置は変更出来ないのでしょうか?
少し邪魔に感じることがあり、フローティング表示にしたいのですが
0088名前は開発中のものです。
垢版 |
2024/03/04(月) 14:39:30.96ID:MRQbhd4x
>>69
コードをコピペして動かしてみた
予測軌道は描けたが実際のRigidBodyの挙動とは同じにならなかったので調整は必要そう
書かれていない初期設定部分で正しく調整されているのかも知れない
物理エンジンは自分の思い通りに動かない事が多くて悩ましい
0089名前は開発中のものです。
垢版 |
2024/03/04(月) 14:47:11.25ID:MRQbhd4x
>>87
フローティングボタンが付いてないのだから出来ないのだろう
現在開いているタブクリックで最小化するので十分ではないのか?
0090名前は開発中のものです。
垢版 |
2024/03/04(月) 15:15:45.96ID:Y8uyU2JR
ありがとう
諦める

実行すると勝手に開いたりするのが煩わしいなと感じて
0091名前は開発中のものです。
垢版 |
2024/03/04(月) 15:49:14.81ID:MRQbhd4x
[エディタ設定][実行][出力][Always Open Output on Play]をfalseにする
変更反映はエディタ再起動後
0092名前は開発中のものです。
垢版 |
2024/03/04(月) 16:51:04.53ID:Y8uyU2JR
ありがとう
0093名前は開発中のものです。
垢版 |
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内でやってもすぐ消えてしまいます(ラインが描画されない)。
0094名前は開発中のものです。
垢版 |
2024/03/04(月) 18:58:36.71ID:maXrH/rV
点追加→描画→クリアじゃなくて最初にクリアしてから点を追加する様にすればいいんじゃない?
それかLine2dは使わずdraw_line()で描くとか
0095名前は開発中のものです。
垢版 |
2024/03/04(月) 21:05:07.83ID:MRQbhd4x
ほぼ正解なのに後一考が足りないのが惜しい
clear_points()が何をする命令かを理解し
処理の最後にclear_points()するとどうなるのか考えれば自明だと思うのだがな
0096名前は開発中のものです。
垢版 |
2024/03/05(火) 05:33:04.51ID:NetOoeu2
リファレンス見直してみます ありがとう
消し方の部分ですね
0097名前は開発中のものです。
垢版 |
2024/03/05(火) 06:35:57.44ID:NetOoeu2
godotってaiインテリセンスとかないのですかね?
visual studioのあれは楽すぎてビビった記憶があります
先の先まで先読みしてくれるので
0098名前は開発中のものです。
垢版 |
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("描画")
0099名前は開発中のものです。
垢版 |
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においては実行順が異なる可能性がある
0100名前は開発中のものです。
垢版 |
2024/03/05(火) 14:58:24.96ID:2jT49Fhn
そもそもdraw_to_cursor内に描画処理は入ってない
add_pointは後から_draw()で描画される事になる線を構成する点を追加するというだけ
0102名前は開発中のものです。
垢版 |
2024/03/06(水) 06:26:28.33ID:0YKHfOtY
>>99
返信遅れてごめんなさい
寝不足でずっと寝てました

>>100
あっそうか、マウスクリック時にしか描画されないという点が問題だったんですね

>>101
unity c#より記述量少ないからなくてもいいかもですね
0103名前は開発中のものです。
垢版 |
2024/03/06(水) 06:39:24.06ID:xC/Ga180
自分は同じような内容列記するときだけ使ってるかな
APIの使い方が間違ってたり、文法がおかしかったりと普段使いはむしろ邪魔
0104名前は開発中のものです。
垢版 |
2024/03/06(水) 06:45:51.37ID:0YKHfOtY
放物線あと2日くらいで完成させる(*´ω`*)
0105名前は開発中のものです。
垢版 |
2024/03/06(水) 06:49:31.06ID:0YKHfOtY
インテリコードっていう呼び名でしたっけね
0106名前は開発中のものです。
垢版 |
2024/03/06(水) 17:57:53.24ID:0YKHfOtY
is_mouse_button_pressedはありますけど、
マウスにjust pressed系はないんですかな?
0107名前は開発中のものです。
垢版 |
2024/03/06(水) 18:12:02.85ID:0YKHfOtY
あっ、action pressのほうでやるんすね ごめんなさい(*´ω`*)
0109名前は開発中のものです。
垢版 |
2024/03/07(木) 14:31:20.08ID:pWb+fA4v
>>105
IntelliCodeはGDScriptに対応してないね
VSCodeでGDScriptを書いても無理だわ
0110名前は開発中のものです。
垢版 |
2024/03/07(木) 15:51:23.86ID:qvtd0tl6
今日仕入れた豆知識
ランダムでtrueかfalseの2択を使いたい時
 var random : bool = randf() > 0.5
この1行でOK
0111名前は開発中のものです。
垢版 |
2024/03/08(金) 10:20:06.16ID:G13/EPQ6
randiの方が早いよ
0113軌道予測
垢版 |
2024/03/08(金) 19:43:07.94ID:vGL0nvHr
軌道予測の者です
考え方として、予測軌道を描きたい場合、軌道予測用のオブジェクトを一度投げないと、ポイントを取得出来ないのではないでしょうか?
物理を使わない場合、方角と力の値があれば、そこから事前に予測出来るのでしょうか?
方法を思いつかなかったので質問させてください

>>109
ですよね(*´ω`*)
0114名前は開発中のものです。
垢版 |
2024/03/08(金) 23:32:43.87ID:Eb0+PHr0
>>69
>>88の解決法が判った
予想通り初期設定が足りていなかった
RigidBody2Dのcustom_integratorを有効にする事できっちり同じ挙動になった
衝突まで出来たが反射が出来てないので課題は残る
0115名前は開発中のものです。
垢版 |
2024/03/08(金) 23:52:05.37ID:Eb0+PHr0
>>112に補足
速さを求めるなら==は要らない
bool型に代入すると型変換で遅くなるので代入するならint型
var random:int = randi() & 1
しないなら
if randi() & 1:
pass
だけどゲームで使う分には誤差だから判りやすい記述が良いと思う
0116名前は開発中のものです。
垢版 |
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 #座標に経過時間分の運動量を加算

リアルタイム制のゲームは座標計算→描画を繰り返し行うのが基本
前回の座標計算からの経過時間を元に計算を行う
概ね運動量に経過時間を掛ける事で求められる
0118軌道予測
垢版 |
2024/03/09(土) 06:47:06.36ID:HzeElu7U
初速、方向ベクトル、力、時間の4要素がおそらく必要なんですね


運動方程式物理の本買ったんですけど、数学への抵抗感なくなればいいなぁ(*´ω`*)
0119軌道予測
垢版 |
2024/03/09(土) 11:31:15.25ID:HzeElu7U
Programmingの理解が遅い人って何が問題なんでしょうか
自分のことですけども

抽象化、というかイメージ化が出来てないのかも
0120名前は開発中のものです。
垢版 |
2024/03/09(土) 12:48:53.19ID:TY4JoG/O
理解できないのは理解できるサイズまで対象を分解できていないから
思い描いているイメージを具体化できてない
抽象的かつ大雑把過ぎるので細かい要素に分割する
分割した要素毎に必要な知識を理解する

Peglinを作りたい→軌道予測線を描きたい
線を描くとは→線分を画面に表示する
軌道予測とは→放物運動の開始から終了までの線分を描くための座標を取得する
放物運動とは→等速運動と自由落下する運動

座標の取得とは→放物運動の計算式から得られる
放物運動の計算式とは→(a)物理エンジンから取得するか(b)自前で自前で計算するかの二択
(a)物理エンジンで取得する→RigidBodyを実際に投げた結果から座標を取得する
実際に投げるには→他に影響を与えずに投げた結果を得るには特殊な手法が必要
特殊な手法とは→>>69が提示
(b)自前で計算する→放物運動の計算式を作る
計算式を作る→線分を描くために時間経過毎の座標を取得する→>>116で提示

要素を分解するとこんなもんか?
放物運動の計算は複雑な計算式は不要で時間経過毎に等加速と自由落下を加算するだけ
判らないなら判る所まで分解して考える
0121軌道予測
垢版 |
2024/03/09(土) 18:53:53.21ID:HzeElu7U
>>120
1つずつ単体テストみたいなことをやるといいんですかね?
0122名前は開発中のものです。
垢版 |
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)

手法それぞれメリットデメリットが存在するので目的に合わせて選択する
知識が多い方が問題解決方法を多く選択できるので何かと有利に働く
慣れない間は混乱の元にもなるので一つ一つ知識固めをする事を勧める
0123軌道予測
垢版 |
2024/03/10(日) 09:50:48.90ID:uoG0dKmX
どうも
必要な要素が把握出来てないのかもですね

線はline2dでやってみます
0124軌道予測
垢版 |
2024/03/11(月) 14:26:20.28ID:CzcLH5L4
gdscriptでは関数入れ子はサポートされてないんですかね?
0125名前は開発中のものです。
垢版 |
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"))
0126軌道予測
垢版 |
2024/03/12(火) 10:22:31.68ID:6dOLlAtw
myfnctionのプロパティー化しないと駄目ということですかね
0128名前は開発中のものです。
垢版 |
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"))
0129軌道予測
垢版 |
2024/03/12(火) 15:08:54.31ID:6dOLlAtw
ありがとう
今すぐ使うわけじゃないんだけど知識として知りたかったんだ
会話に飢えてるのかも
0130軌道予測
垢版 |
2024/03/15(金) 14:19:26.75ID:z+ILEsEI
ペイントソフトの筆のように線を描くのは可能でしょうか?
ペイントソフトってよく見ると点を打ってるんですよね

line2dとそれにコリジョンつけるためのsegment shapeあたりで調べてます
0131軌道予測
垢版 |
2024/03/15(金) 14:44:55.65ID:z+ILEsEI
あ、描くのはすんなり行けたナリ(*´ω`*)
0134軌道予測
垢版 |
2024/03/16(土) 03:54:55.34ID:ECp53ZYt
ライン描いてそれをコリジョン化する感じ
unityならアセットでサクッとできるんだけろうけど、godotだとサンプルが少ないナリ
0135軌道予測
垢版 |
2024/03/16(土) 09:40:56.08ID:ECp53ZYt
>>133
Q REMASTEREDとか、あれを単純図形でいけるかな?
まあペイントソフトも玉のテクスチャを連続させてるだけだよね
0136軌道予測
垢版 |
2024/03/16(土) 12:06:33.95ID:ECp53ZYt
https://imgur.com/a/KTYggOG
単純図形をフレームごとにadd_childしてるのじゃが、一定間隔でadd_childしたとしてもつながるほど短い間隔になる保証はないのだけど、何か方法はありますかね?
0137軌道予測
垢版 |
2024/03/16(土) 12:16:39.25ID:ECp53ZYt
elapseTime+=delta
if elapseTime >= 0.001:
print("hoge")
たとえばelapseTimeでこんなふうにして実行しても、フレーム以上の描画スピードにはならんわけよね(*´ω`*)
0139軌道予測
垢版 |
2024/03/16(土) 13:13:32.53ID:ECp53ZYt
多分、描いた線をコリジョン化したい場合は、ジオメトリー系を使うみたいです
今から調べます
0140名前は開発中のものです。
垢版 |
2024/03/16(土) 13:42:11.02ID:33L2QT9a
Qは一定間隔で円なの普通に見てわかるな
>>133でカプセルっつってんだからカプセルか間に長方形挟むでもいいと思うけど直線がダメか
0141軌道予測
垢版 |
2024/03/16(土) 14:03:51.94ID:ECp53ZYt
1フレームあたり座標をずらしたものを複数個追加する方法でいけるかもね
0142軌道予測
垢版 |
2024/03/16(土) 17:55:12.95ID:ECp53ZYt
↑駄目だった
やっぱりカーソル早く動かすと1フレームあたりの描画量が足りなくて、点々になっちまう(*´ω`*)、、、、
ジオメトリあたり試してみるナリが、godotの場合、線を引いてそれにコリジョンをつけるには何の機能がいいの?
0143軌道予測
垢版 |
2024/03/18(月) 06:18:37.02ID:sBH5kPda
line2dにコリジョンつけたいんだけど、方法ある?
segmentshapeで太さ出せるだろうか?
0144名前は開発中のものです。
垢版 |
2024/03/18(月) 12:34:34.92ID:/glnBgCG
SegmentShape2Dで太さは指定できない
厚みを持たせるなら元ネタ同様に球を並べるか二点を通るポリゴンを自分で作る
二点の中点にRectangleShape2Dを置いて傾けるという方法でも可能
0146軌道予測
垢版 |
2024/03/18(月) 13:26:05.86ID:sBH5kPda
rectangleshape2dだと曲線とか難しそうですね
玉連続の場合、1フレームあたりに複数個追加しないと玉が飛ぶんですが、どういうやり方があるんでしょうか。
0148軌道予測
垢版 |
2024/03/18(月) 13:40:45.88ID:sBH5kPda
どうも
玉手法はgptに聞いてみます

線形補間もやってみます
0149軌道予測
垢版 |
2024/03/18(月) 19:15:29.31ID:sBH5kPda
こういうときはunityでのやり方を調べると参考になるかもですね
godotだとやはり情報が少ないっす
0150軌道予測
垢版 |
2024/03/19(火) 14:44:11.82ID:D3Qdtv84
https://www.youtube.com/watch?v=L3Lls9fY6s4
このゲームのラインって玉の連続と上で教えてもらったんですが、どこを見ると玉ということが分かりますか?
玉であってもコリジョンを曖昧にすればいけそうですね
0151名前は開発中のものです。
垢版 |
2024/03/19(火) 15:20:17.53ID:n2087dMP
引ける線が無制限のつもりならgd_paintみたいなお絵描き機能実装してopaque_to_polygonsの方がいいかも
0152軌道予測
垢版 |
2024/03/19(火) 17:15:47.28ID:D3Qdtv84
無制限とはどういうことですか?
色をポリゴン化する機能は知りませんでした
0153名前は開発中のものです。
垢版 |
2024/03/19(火) 17:55:59.32ID:n2087dMP
ドラッグで線を描くとして、線を引いてる間に毎フレーム線や円を追加してるとそのうちオブジェクト数がえらい事になる
0154名前は開発中のものです。
垢版 |
2024/03/19(火) 18:44:46.90ID:hE1w1zmY
えらい数になる前に点を間引いたり直線近似するんよね
0155軌道予測
垢版 |
2024/03/20(水) 09:55:11.93ID:o2i+3Cka
球が増えすぎると重くなるとしたら、ラインのながさを制限するなりしないとだめってことですよね
それもゲーム性にすりゃいいかもです
0156軌道予測
垢版 |
2024/03/20(水) 09:55:52.73ID:o2i+3Cka
点の連続で線を描くというのは一般的な方法なんでしょうか。
点が飛ぶのは、lerpでどうにか補完できないか考えてます
0157軌道予測
垢版 |
2024/03/21(木) 11:09:56.75ID:IgSPnTWH
godotで3dゲーム作るのはあり?
お遊びだけどさ
0158軌道予測
垢版 |
2024/03/21(木) 13:13:49.23ID:IgSPnTWH
やっぱホワイトボックスレベルでも3d作るのは大変だと感じるナリ
0159名前は開発中のものです。
垢版 |
2024/03/21(木) 16:40:50.08ID:XmwxGLbE
Godotで3Dゲームを作るのが無しだったら>>1の作例は無いだろう
3Dの方が要求知識が増えるので簡単とは言わないが苦手意識が強すぎる様に思う

3Dでもカメラを固定して一軸を全く使わなければ2Dとほぼ同じ扱いになる
3Dを使ったエフェクトが使いやすくなるのでメリットもある
0160軌道予測
垢版 |
2024/03/21(木) 18:06:43.28ID:IgSPnTWH
まあね
完成させられないで失敗しかしてないから
0161名前は開発中のものです。
垢版 |
2024/03/21(木) 23:24:33.92ID:XmwxGLbE
少なくとも自分で調べたり聞いた結果
線の引き方は覚えたし内容は理解しきれなくとも線形補完という手法も知った
以前と比べれば何かした分は成長している
how-toを聞いただけで理解して使いこなせたら秀才
使いこなせないのは知識も経験も足りないからで功を焦りすぎ
0162名前は開発中のものです。
垢版 |
2024/03/21(木) 23:30:23.01ID:XmwxGLbE
点と点の間の線を引く際に不足する点を補完する方法が線形補完
線を引く上では一般的と言えるがゲームでの利用においては制限があるのは指摘されている通り
制限が問題になるなら対策を打つなり別方法を使用する事になる
0163軌道予測
垢版 |
2024/03/22(金) 14:16:19.70ID:jsxrvFIK
コツコツやってきます
興味が長続きしないので解決しなくても課題は定期的に変えますが、、、それが問題
0164軌道予測
垢版 |
2024/03/22(金) 20:17:17.38ID:jsxrvFIK
godotのコードサンプルってどこで手に入りますか?
kids can codeはたまに見ますが
0165名前は開発中のものです。
垢版 |
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/
0166軌道予測
垢版 |
2024/03/23(土) 10:59:33.56ID:apw+jUEF
geometry2dってポリゴン2dみたいにポリゴンを描くクラスと考えていいんでしょうか
まだ使い方が分かってない
ただ、シングルトンではあるみたいです


>>165
ありがとう
0167軌道予測
垢版 |
2024/03/23(土) 11:40:20.63ID:apw+jUEF
geometry2d自体は頂点を生成するだけで、ポリゴンはcollisionpolygon使うみたいですね
0170軌道予測
垢版 |
2024/03/23(土) 18:16:55.69ID:apw+jUEF
最新のgptは有料じゃないと使えないのかな
godot4についてはデータベースがないみたい

copilot使ってみるけど、他におすすめある?
0173名前は開発中のものです。
垢版 |
2024/03/23(土) 23:57:14.52ID:J5ee5UXV
>>171
そこの説明に書いてある通りで結果が複数になる場合があるから
>because inflating/deflating may result in multiple discrete polygons.
安易な対応方法としては厳密に扱う必要がなければ最初の要素だけ使えば良い
ollisionPolygon2d.polygon = array[0]

>>166
自分の認識ではこんな感じ
PackedVector2Array:点の集合体=ポリゴン
Array[PackedVector2Array]:複数ポリゴン
Polygon2D:ポリゴンを表示に使う
ColiisionPolygon2D:ポリゴンを接触判定に使う
Geometry2D:ポリゴンの加工、評価の為の便利関数群
0174名前は開発中のものです。
垢版 |
2024/03/24(日) 06:18:11.73ID:NBGeRgaU
>>172
前に色々調べたときgodotでC#つかうとC#部分は速いけど本体APIとのやりとり部分でオーバーヘッドが生じやすく
トータルでみると結局全部GDスクリプトで書くほうが速いみたいな話を読んだ記憶
0175軌道予測
垢版 |
2024/03/24(日) 06:25:14.14ID:o0STPUVA
>>172
厳密すぎて疲れるっていうかね、、、

>>173
geometry2dは位置を作るだけですね、理解
ありがとう
0176軌道予測
垢版 |
2024/03/24(日) 10:42:59.23ID:o0STPUVA
なんやcopilot普通に使えるやん
マイクロソフトだからなんか微妙なイメージ持ってたわ
0177名前は開発中のものです。
垢版 |
2024/03/24(日) 16:34:42.38ID:30RJWthY
使えるは使えるけど、全体の設計とか関数の仕様理解してないと出鱈目なもの作っちゃうな
何でもよしなに作ってもらえるものじゃない
0178軌道予測
垢版 |
2024/03/24(日) 17:12:56.64ID:o0STPUVA
まあ質問の仕方っすね
0179軌道予測
垢版 |
2024/03/24(日) 19:25:47.06ID:o0STPUVA
line2dで描いた線をリジッドボディ化する方法ってありますか?
コリジョンをつける件は解決したのですが、ノードの構成をどうすればいいかなと

↓ライン2dをリジッドボディにするには以下のノード構成にする必要があります
ノード1
■rigidbody2d
├line2d
└collisionPolygon2

描く用のline2dノードは別にあって、そこにスクリプトをつけます。
描き終わった時点で物理をつけて、落下させるという処理をしたいです。
ノード2
■line2d_drawing(描画処理を行うノード)

ノード2で描画を行ってから、別シーンにしたノード1に描かれたラインとコリジョンの情報を渡すような流れでしょうか

簡単なプログラムをかけても、こういう、流れ?フローの設計がかなり苦手(*´ω`*)
0180軌道予測
垢版 |
2024/03/24(日) 19:26:54.19ID:o0STPUVA
訂正:ノード2で描画を行ってから、別シーンにしたノード1をadd_childし、描かれたラインとコリジョンの情報を渡すような流れでしょうか
0181名前は開発中のものです。
垢版 |
2024/03/24(日) 23:02:04.63ID:zekcFUEh
ノード1にLine2Dがあるのに描く用のLine2Dが別にあると言う点が理解できない
Line2Dは線を描く為の物なので同じ内容なら2回も描く必要がない
Line2Dが保持している点データを使いまわしたいのならば
点データ管理用の変数を作ってそれをLine2Dやコリジョン作成に利用すると良い

ノードの構成自体は自分だとこうなる
違うのは描画にLine2DではなくPolygon2Dを使う点
CollisionPolygon2Dに接触判定用のポリゴンデータが渡せるなら
Polygon2Dに全く同じデータを渡して表示する事ができる

シーン1:ゲームを管理する本体
■Node2D※Node2Dである必要は特にないゲームを管理する為のスクリプトをアタッチする

シーン2:インスタンス化して使用する
■RigidBody2D:プレイヤーが描き込んだ物体
├Polygon2D:物体の描画に使う
└CollisionPolygon2D:物体の接触判定に使う
0182軌道予測
垢版 |
2024/03/25(月) 07:32:49.38ID:SFtNN9tG
>>181
別にしなくていいんですね
line2dで描いたものの頂点をgeometry2dのoffset_polylineで取得して、その頂点をpolygon2dで再描画すりゃいいんですね
ありがとう
0183軌道予測
垢版 |
2024/03/25(月) 08:27:58.80ID:SFtNN9tG
polygon2dってコリジョンつけるクラスだと思ってたナリ(*´ω`*)
0184軌道予測
垢版 |
2024/03/25(月) 14:16:15.68ID:SFtNN9tG
1つのファイルに何行くらいコード書きます?
文字数増えると訳わからんくなるけど、対策とかないのかな
自分で1日前書いたコードが若わかめになる
0185軌道予測
垢版 |
2024/03/25(月) 14:38:30.56ID:SFtNN9tG
godotって変数のアウトライナーってないのかな?
0186軌道予測
垢版 |
2024/03/25(月) 18:03:15.07ID:SFtNN9tG
ど忘れしたんだけども、インスタンス化したシーンから、そのシーンの変数にアクセスできないのって普通なんだっけ?
オートロードかグローバル変数にでもしない限りは。
0187名前は開発中のものです。
垢版 |
2024/03/25(月) 22:34:21.53ID:qPdwNxZG
「インスタンス化したシーンから、そのシーンの変数にアクセスできない」のは普通ではない
指示代名詞は誤解の元だからできるだけ使用は避けるべきだと思う
「その」が親のシーンを指しているのならば子インスタンスからはownerプロパティで参照できる
0188軌道予測
垢版 |
2024/03/26(火) 06:21:35.33ID:UiMW4uHO
>>187
通常はインスタンス化するだけでグローバル化もなしに、アクセス出来るものですか?
試したらできましたが、できないパターンもあり、違いがよくわからないところです
0190軌道予測
垢版 |
2024/03/26(火) 11:36:39.08ID:UiMW4uHO
どうも
以下のコードなのですが、polygonプロパティにアクセスするとinvalied get indexエラーになるのです
しかし、このシーンをオートロードに指定していることが原因だったようです
それを今から調べます
https://i.imgur.com/F37AACg.jpg

extends RigidBody2D
var polygon2d_node
var collisionPolygon_node
var polygonArray:PackedVector2Array = [
Vector2(0,0),
Vector2(200,0),
Vector2(200,100)
]

func _ready() -> void:
polygon2d_node = $"Polygon2D"
collisionPolygon_node = $"CollisionPolygon2D"
polygon2d_node.polygon
0191軌道予測
垢版 |
2024/03/26(火) 12:42:11.47ID:UiMW4uHO
あーそうか シングルトン的な観点で駄目なのかこれは
0192名前は開発中のものです。
垢版 |
2024/03/26(火) 16:26:55.68ID:KPzoI6q7
描画するノードをオートロードに配置する設計に問題はあると思うが
そのコードはエラー無く動いたのでオートロードだからエラーになる訳ではないな

それはそれとして子ノードを参照する変数は宣言と初期化を纏めると
総行数が減って、_ready()以外でも自動補完も効くようになってお得

@onready var polygon2d_node := $Polygon2D
@onready var collisionPolygon_node := $CollisionPolygon2D
0193軌道予測
垢版 |
2024/03/26(火) 16:34:45.75ID:UiMW4uHO
ありがとう
原因は良くわからないけど、オートロードはなるべく使わずに作っていきます
0194軌道予測
垢版 |
2024/03/27(水) 06:23:02.67ID:E2lXw+Px
別シーンのready内で下位ノードを取得している場合、
呼び出す側のシーンにアタッチされた時点で、別シーンのreadyが実行されるから、アタッチされる前に下位ノードを取得しようとするとnullになるんすね(*´ω`*)
0195軌道予測
垢版 |
2024/03/27(水) 06:41:08.05ID:E2lXw+Px
このスクリプトで別シーンのpolygon2d_nodeを取りたいのですが、add_childするとnullになりますね
対策としてpolygon2d_nodeをonreadyにしてみたのですが、それでもnullですね
この辺理解してませんが、onreadyを使うと同期出来るわけじゃないんですかね
var ins = rididDrawLine_scene.instantiate()
#root_node.add_child(ins)
print(ins.polygon2d_node)

@onready var polygon2d_node = get_node("Polygon2D")
0196名前は開発中のものです。
垢版 |
2024/03/27(水) 07:46:56.03ID:asE13Xlz
@onreadyはシーンにぶら下がっているノードの参照を安全に得るために使う
@onready指定された変数に格納されるノードの初期化が完了するまで_readyの実行が待機される

>>195のコードはイメージしてる事は判らなくもないが
print(ins.polygon2d_node)ではinsノードの配下にあるpolygon2d_nodeへのアクセスを試みる事になる
子シーンのインスタンス側で設定されていなければエラーとなる
なので書き直すとこうなる

# シーンをインスタンス化する
var ins = rididDrawLine_scene.instantiate()
# インスタンス化したシーンのノードにアクセスする
var polygon2d_node = ins.get_node("Polygon2D")
print(polygon2d_node)

# インスタンス化したシーンを子ノードとして"root_node"に追加する
#root_node.add_child(ins)

add_childでも悶着ありそうだが眠いので説明は割愛する
root_nodeとはどこを指すのか
rootならばcall_defferdを使うと良いがrootである必要はあるのか
0198名前は開発中のものです。
垢版 |
2024/03/27(水) 07:56:43.05ID:asE13Xlz
GodotEngineにラッパーライブラリ被せて簡単に扱えるようにしましたって感じかね?
何かあったら一大事になるから覚える価値あるかは疑問
GodotEngineで十分足りてると思う
0200名前は開発中のものです。
垢版 |
2024/03/27(水) 09:17:27.54ID:s0lKVFz1
最近こういう感じの詐欺まがいのプロジェクト多いな
話題さえかっさらえばあとどうでもなるSNSファースト社会の弊害だな
0201名前は開発中のものです。
垢版 |
2024/03/27(水) 09:34:32.48ID:njswSuTs
ノードの自動読み込みとノードのシングルトンって使い分けたほうがいい?
郷に入ってはの精神でなんとなく自動読み込みの方使ってるけど
0202名前は開発中のものです。
垢版 |
2024/03/27(水) 10:09:54.95ID:gGONJtOf
>>199
色々追加はされているがまだ始まったばかりやな
最初のコミットは3/15だしそんなもんやろ
0203軌道予測
垢版 |
2024/03/27(水) 10:16:36.57ID:E2lXw+Px
>>196
呼び出す側でget_nodeするんですね
シーンに追加されないと子のreadyも実行されないのかなと
0204軌道予測
垢版 |
2024/03/27(水) 11:36:51.00ID:E2lXw+Px
godotエディター上で手書きでステージを描いて行く手法とありますかね?
カーソルでポリゴン編集でもいいんですが
0206軌道予測
垢版 |
2024/03/27(水) 13:43:40.07ID:E2lXw+Px
普通にポリゴン2dでコチコチ打てるやん
ありがとう!!
0207軌道予測
垢版 |
2024/03/27(水) 15:26:01.61ID:E2lXw+Px
あっ、でも打てないことがある 仕組みが良く分からん
0208軌道予測
垢版 |
2024/03/27(水) 17:03:39.52ID:E2lXw+Px
上のバーに編集モードあったナリありがとう
0209軌道予測
垢版 |
2024/03/29(金) 08:00:09.73ID:YYuuvBhg
2dステージ作るのも大変ナリね
0211軌道予測
垢版 |
2024/03/29(金) 12:44:49.14ID:YYuuvBhg
いいんじゃない 書き込まないと落ちるしもともと人が少ないスレ
0212名前は開発中のものです。
垢版 |
2024/03/29(金) 13:04:54.90ID:twd2rh/A
なにひとつよくないが、そんなんだから雑談スレ追い出されんだよ
質問ですらない独り言とかTwitterで鍵かけてつぶやいてろ
0213名前は開発中のものです。
垢版 |
2024/03/29(金) 13:12:07.70ID:sRPqCb6v
>>211
いくら過疎スレでも占有はよくないよ
自分で専スレ立てれない?
そっちを日記として使って、どうしても解決できない問題があるときだけここで聞けばいいよ
0214名前は開発中のものです。
垢版 |
2024/03/29(金) 13:19:13.92ID:YYuuvBhg
じゃあ君等が落ちないようにしてね
0215名前は開発中のものです。
垢版 |
2024/03/29(金) 13:21:25.50ID:18de9J88
dat落ちの条件理解してなさそうだし、適当な事言うのは辞めた方がいい
何か勘違いしてないか?
0217名前は開発中のものです。
垢版 |
2024/03/29(金) 14:40:51.42ID:YYuuvBhg
荒れるから素直に謝っておくか
不快にさせてすみません
0218名前は開発中のものです。
垢版 |
2024/03/29(金) 15:42:09.03ID:s+Iwx5M0
>>210-218
個人粘着でスレの進行妨害するのやめてくれないか?
無駄レスも多いが制作に絡んだ話はしている
自治厨始める奴の方が邪魔
無駄レスが気に入らないなら会話になるGodotの話題を出してくれ
0219名前は開発中のものです。
垢版 |
2024/03/29(金) 15:46:26.16ID:2tYAETUL
godot4.0になった辺りで触らなくなったんだがもう4.3まで伸びてんのな
4.1~4.3でなんか目玉機能追加された?
0220名前は開発中のものです。
垢版 |
2024/03/29(金) 16:43:00.72ID:18de9J88
そもそも過疎板にはDat落ち判定はないんだが(nKB未満が即死する即死判定はある)
頓珍漢な言い訳はやめなさいと言っただけだぞ
0221名前は開発中のものです。
垢版 |
2024/03/29(金) 17:26:29.20ID:nuxfBRdB
圧縮で落ちるのが最終更新なら2018年とかのが残ってるから確かに当分は大丈夫そうだな
0223名前は開発中のものです。
垢版 |
2024/03/29(金) 17:56:09.05ID:YYuuvBhg
>>222
fbxはライセンスの関係で使えないんじゃなかった?
今どうなってるか分からん 3dやってないし
0224名前は開発中のものです。
垢版 |
2024/03/29(金) 18:36:00.41ID:eapD4MOf
数日放置してたら案の定もめてて草
正直異様でスレ見る気も失せる状態だったし
>>218もいちいち絡んでちゃ自治厨と大差ない
しょーもな
0227名前は開発中のものです。
垢版 |
2024/03/30(土) 15:36:35.50ID:8Or9Js4W
>>224
これ
変な拘りで自治が自治が言ってる時点で自治してるようなもんだし
5chなんだから気に入らなきゃ別スレでも立てて好きにやりゃ良いのに
0229名前は開発中のものです。
垢版 |
2024/04/01(月) 06:44:36.40ID:bnl1SBKq
マリオみたいな2dアクションってタイルマップ使わずに作るのはあり?
タイルマップないと調整が難しいんじゃないかな

ジャンプ力3とした場合、谷をタイル3つぶんにすればギリギリ届く、といった調整が簡単
0230名前は開発中のものです。
垢版 |
2024/04/01(月) 08:02:59.00ID:PL23FYq5
>>229
最近のゲームではNoitaが地形全部ピクセルかなと思います
今はCPUやRAMが潤沢なので十分ありなのでは
0231名前は開発中のものです。
垢版 |
2024/04/01(月) 12:52:37.52ID:bnl1SBKq
jumpkingみたいな感じのを作りたい

あれはタイルマップ感はないけど、タイルマップではないにしてもグリッドをベースにしたほうが楽そう
0232名前は開発中のものです。
垢版 |
2024/04/01(月) 13:15:59.82ID:vOJskMGJ
godotはグリッドにスナップできるし
jumpking程度ならコリジョン付けて配置してくだけで行けると思うよ
0233名前は開発中のものです。
垢版 |
2024/04/01(月) 17:11:07.39ID:bnl1SBKq
サイトでもグリッドデザインとかあるしね
0235名前は開発中のものです。
垢版 |
2024/04/01(月) 19:35:50.50ID:Qv7VTYs7
JKは地形の最小単位自体は見える気がするし単に細かめのタイルマップで再現できるのはできるんじゃね
modの作り方見た感じ判定はRGB画像をタイルマップみたく扱ってて見た目は一枚絵被せてるらしい
0236名前は開発中のものです。
垢版 |
2024/04/01(月) 20:13:46.87ID:bnl1SBKq
タイルマップ研究してみる
機能じゃなくてデザインから作る試みをしてるから

被せるというのは、つまりタイルマップでマスキング(くり抜き)してる感じかな?
0237名前は開発中のものです。
垢版 |
2024/04/01(月) 21:28:39.74ID:Qv7VTYs7
RGB画像は1画面辺り60×45とかの荒いやつだから違う
ゲームデザイン(判定、地形)だけタイルマップ式でそれに合わせた画像を別で用意してるってこと

これ貼るのが早いか
ttps://jumpkingplus.github.io/workshop/docs/modding/hitboxes/
ttps://jumpkingplus.github.io/workshop/docs/modding/screens/
0238名前は開発中のものです。
垢版 |
2024/04/02(火) 06:38:50.57ID:gq8N0/8x
>>237
ん?一枚絵を重ねる感じ?
0239名前は開発中のものです。
垢版 |
2024/04/03(水) 19:26:17.38ID:BKl8fFHu
慣れてないとタイルマップでステージ作るの難しいね
0240名前は開発中のものです。
垢版 |
2024/04/04(木) 18:23:04.76ID:Yk95TemJ
タイルマップエディタの位置って変更出来る?
下のスペースだと作業しづらくてしゃあない
0241名前は開発中のものです。
垢版 |
2024/04/05(金) 02:45:26.77ID:Pqxpfu1i
CollisionLayerやVisibilityLayerのレイヤー名適当に付けてきたから並び替えしたいけど面倒だなー
かといってスクリプトで管理するのも面倒
0242名前は開発中のものです。
垢版 |
2024/04/05(金) 06:47:12.42ID:VPXaZ05P
タイルマップのアルファ部分を境界線として自動的にコリジョンつける機能あったっけ?
0243名前は開発中のものです。
垢版 |
2024/04/07(日) 10:10:16.82ID:XQBKHWlL
1つのゲーム何ヶ月くらいかける?
そんな大作は作れないから数週間程度にしとくといいのかなと思うが
0244名前は開発中のものです。
垢版 |
2024/04/07(日) 12:40:54.04ID:B7MxZFEN
初めて作るなら二週間くらいで作れそうなのにした方が早めに世に出せていいと思う
製作期間なんてどうせ伸びるし
0245名前は開発中のものです。
垢版 |
2024/04/07(日) 14:24:50.23ID:XQBKHWlL
ありがとう
想定の2倍以上はかかる 確かに
0246名前は開発中のものです。
垢版 |
2024/04/07(日) 20:10:06.18ID:XQBKHWlL
2dアクションのステージ作るときにタイルセットじゃなくて、ポリゴンノードを1枚のタイルとして大量に並べていったらパフォーマンスにかなり影響出るのかな?
数千とかそういうレベルになったら
0247名前は開発中のものです。
垢版 |
2024/04/08(月) 00:34:30.27ID:BT1LWWM9
余裕で出るだろうねぇ
Godotがすごすぎエンジンで問題なかったら逆にビックリするけど
0248名前は開発中のものです。
垢版 |
2024/04/08(月) 05:26:25.44ID:EcmamLs3
どうも
出るか、、、

ポリゴンノードの羅列のほうが柔軟に形状変えられていいかなと思ったけど、タイルマップでやる
タイルマップは形状にどうしても制限が出るから
0249名前は開発中のものです。
垢版 |
2024/04/08(月) 13:22:19.11ID:BT1LWWM9
性能テストだと思って実際に作って負荷検証した方がプロっぽいけどな
Zennとかで投稿して知見共有してくれてもいいのよ? 宣伝にもなるし
あ、契約書からむような案件だったらダメだけど
0250名前は開発中のものです。
垢版 |
2024/04/08(月) 14:15:01.29ID:EcmamLs3
ありがとう
zennってたまに見るけどブログとしていいね

fc2から乗り換えよう
0252名前は開発中のものです。
垢版 |
2024/04/09(火) 14:36:54.29ID:oLx3m2KZ
https://imgur.com/B6lPvsv
オートタイルを作りたいけど、仕組みがよく理解できない
terrainをペイントすることでそれっぽくなるけど、どこをどうペイントするといいのかガ分からない
0253名前は開発中のものです。
垢版 |
2024/04/13(土) 06:35:26.13ID:DtpmdlV4
https://www.youtube.com/watch?v=TCEEKKeoT-0
オートタイルの動画あったけど仕組みが分からん
塗った場所によって、どのようにつながるか決まるらしいけど、どなたか教えて
0255名前は開発中のものです。
垢版 |
2024/04/13(土) 14:29:45.52ID:2dO4J81U
俺の立てたスレに来たら懇切丁寧に教えてもよかったけど
この顔文字くん来ないんだよな
人が多いとこに居たいんだろうけど
0256名前は開発中のものです。
垢版 |
2024/04/13(土) 15:12:12.60ID:DtpmdlV4
立てたっけ?
0258名前は開発中のものです。
垢版 |
2024/04/13(土) 15:27:51.76ID:DtpmdlV4
人のこと池沼とか書いてるやついるからええわ
0260名前は開発中のものです。
垢版 |
2024/04/14(日) 04:27:19.96ID:xkIt8wPU
そういうのいらないから
0262名前は開発中のものです。
垢版 |
2024/04/17(水) 11:03:55.56ID:c7cp2PUr
godot4で方向取る関数ってなんですか?
input.get_axisだと引数が2つ必要になっていましたね
以前はinput.get_axis("horizontal")←これで横方向がトレていたのですが、
0263名前は開発中のものです。
垢版 |
2024/04/17(水) 11:23:02.69ID:S9SgvMuX
以前とはいつの事か?またはどのバージョンの事か?
質問する前に自分の記憶が正しいかの確認をする
https://docs.godotengine.org/en/3.4/classes/class_input.html
初登場時からget_axisの引数は2つ
get_axisの機能を方向取る関数と認識しているのならば
引数の形式が変わっていても新しい引数の形式での使い方を理解するしかない
0264名前は開発中のものです。
垢版 |
2024/04/17(水) 11:59:17.28ID:c7cp2PUr
>>263
そうでしたか
なにかの記憶違いだったかもしれないです

var direction
if Input.is_action_just_pressed("ui_right"):
direction = "right"
if Input.is_action_just_pressed("ui_left"):
direction = "left"
if Input.is_action_just_pressed("ui_up"):
direction = "up"
if Input.is_action_just_pressed("ui_down"):
direction = "down"
_move(direction)

文字列での分岐にすることにしました
0265名前は開発中のものです。
垢版 |
2024/04/17(水) 12:28:13.73ID:S9SgvMuX
なんとなくの予想だがUnityのInputSystem辺りと記憶が混ざってるのかもね
理解できず動かない簡潔なコードよりも理解できて正しく動く冗長なコードが勝るが
get_axisとget_vectorは有用なので使い方は理解できた方が良い
余裕があれば挑戦してみて欲しい
公式のサンプルでは大体こんな感じで使われている
# 左右をfloatで取得
var movement = get_axis("ui_left", "ui_right")
# 上下左右をVector2で取得
var direction = get_vector("ui_left", "ui_right", "ui_up", "ui_down")
0266名前は開発中のものです。
垢版 |
2024/04/17(水) 14:58:45.87ID:S9SgvMuX
Inputクラスの記述が抜けてた
var movement = Input.get_axis("ui_left", "ui_right")
# 上下左右をVector2で取得
var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")

書き足しついでで補足すると意味的にはこんなん
1軸の向き = get_axis(-方向、+方向)
Vector2(x軸の向き, y軸の向き) = get_vector(x軸負方向、x軸正方向、y軸負方向、y軸正方向)

移動処理が簡潔に書ける
extends Node2D
const SPEED = 300.0
func _process(delta):
var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
position += direction * SPEED * delta
0267名前は開発中のものです。
垢版 |
2024/04/17(水) 17:28:28.38ID:c7cp2PUr
どうも
get_vectorで方角を返すってやつですね
0268名前は開発中のものです。
垢版 |
2024/04/18(木) 11:29:20.11ID:o06ulE3s
godotは割とredditが賑わってるのがありがたいは
むしろunityより賑わってるのが謎
0269名前は開発中のものです。
垢版 |
2024/04/19(金) 18:17:49.55ID:611er4q0
配列特定の値を探したい場合、forで回して比較演算子かfindか使い分けはどうすればいいの?
0270名前は開発中のものです。
垢版 |
2024/04/19(金) 19:27:59.70ID:6eKwksTY
関数の方が安全で手っ取り早い代わりに若干低速な可能性がある どれくらい差があるかは知らない
配列の中身が順番に並んでるならbsearch使うか二分探索自分で書けば速い
0271名前は開発中のものです。
垢版 |
2024/04/19(金) 19:31:58.50ID:611er4q0
どうも
どのみち二次元だとfind使えないみたいですね
0272名前は開発中のものです。
垢版 |
2024/04/20(土) 11:57:25.68ID:gSjSgOMM
一時的にスクリプトを停止出来ますか?
processをdisableしてもprintはされるみたいです
0273名前は開発中のものです。
垢版 |
2024/04/21(日) 10:08:48.46ID:YXvcVHHE
定型文登録って合ったっけ?
以下の4方向バージョンを登録しておきたい
if Input.is_action_just_pressed("ui_up"):
move()
0274名前は開発中のものです。
垢版 |
2024/04/23(火) 12:13:26.37ID:/jRBBB4p
特定の関数の中でしか使わない関数ってのはどう定義すればいいの?
入れ子に出来れば関係ない場所から参照されないからいいと思うんだけど

func outer():
func inner():
こんな感じの入れ子は無理っぽいからラムダってやつ使うのかな

しかし、以下だとprint結果が帰ってこない
extends Node2D
func _ready() -> void:
print(lam)
var lam = func outer(num):
var value = "hogehoge"
return value
0275名前は開発中のものです。
垢版 |
2024/04/23(火) 12:26:20.71ID:/jRBBB4p
あっ、callしないと駄目なんですね
0276名前は開発中のものです。
垢版 |
2024/04/23(火) 13:00:39.54ID:K58WhwWv
関数のままでは入れ子にできないからCallableとして宣言する
呼び出しは変数名で行うから関数名はなくて良い
func _ready():
var innner = func(x = 1):return x * 2
prints("inner() called:", innner.call())
prints("inner(2) called:", innner.call(2))
0277名前は開発中のものです。
垢版 |
2024/04/23(火) 14:27:19.77ID:/jRBBB4p
どうも
入れ子で書けないのなら、普通の関数とあまり変わらない感じですね
視覚的にこう1箇所にまとめたかったんですが
0278名前は開発中のものです。
垢版 |
2024/04/23(火) 15:16:36.49ID:K58WhwWv
変数に代入して使うのが馴染みないかもだが
関係ない場所からの参照ができなくなるから>>274で求められた機能としては十分
使用する変数は大体最初に宣言するから一箇所にまとまるのでは?
0279名前は開発中のものです。
垢版 |
2024/04/23(火) 15:27:32.29ID:K58WhwWv
>>272
完全停止は出来ないがprocess_modeにdisableを指定した上で
動かれて困るメソッドの先頭に以下の一文でも足せば良いんじゃないかな?
if process_mode == Node.PROCESS_MODE_DISABLED: return
0280名前は開発中のものです。
垢版 |
2024/04/23(火) 19:08:20.21ID:/jRBBB4p
>>278
関係ない場所から参照出来なくなるというのは、callが付与されることで、そのような効果があるということでしょうか?

>>279
どうも
disableでもおそらくreadyは動くみたいですね
0281名前は開発中のものです。
垢版 |
2024/04/23(火) 19:38:02.85ID:K58WhwWv
ローカルで宣言した変数のスコープはローカルという普通の話
別にCallableでの特別処理とかではない
グローバルで宣言すればグローバルから扱える

_readyの様な初期化処理まで動かしたくないというなら自分は設計の見直しをする
必要なときにadd_childとqueue_freeすればprocess管理する必要がないのではないか?
0283名前は開発中のものです。
垢版 |
2024/04/23(火) 20:12:37.57ID:SVQG4/08
確か達成してた気するけどああいうの上乗せ倍プッシュで支援てできるんだっけ?いいんじゃね
0284名前は開発中のものです。
垢版 |
2024/04/23(火) 20:42:58.34ID:nRUQyvbL
ぶっちゃけGodot全然わからんちんなんで
支援して、本貰って自分にシバキを入れたいって思いもある
おっちゃんが15歳に負けたくない><
0287名前は開発中のものです。
垢版 |
2024/04/24(水) 04:23:26.66ID:oxZnmf8P
>>281
なるほど 中で宣言するというだけですね
0288名前は開発中のものです。
垢版 |
2024/04/24(水) 20:15:21.72ID:oxZnmf8P
倉庫番のロジックで分からないところがあるのでこっちで質問させてもらいます
マップは二次元配列で作成します
ただ、キャラクターの移動はvector2で行います


1マスの大きさが32であった場合、vector2の座標が32,0だとしたら、配列上ではarray[y0][x1]となりますよね。
こういった変換に便利な関数とかないでしょうか?

やりたいことを箇条書きにすると以下です
1:vector2の座標から配列上の座標を割り出す
2:キャラクターが移動したとき、配列上のキャラクター座標を移動させる(配列上の要素2がキャラとしてます)
0289名前は開発中のものです。
垢版 |
2024/04/24(水) 20:27:18.43ID:PzjnMMaW
普通に割り算して切り捨てるだけでは
ものを1マス単位で動かさない前提なら1マス辺りの座標を1にして逆に見た目の方の座標を掛け算なりする方が楽
0291名前は開発中のものです。
垢版 |
2024/04/25(木) 00:19:55.34ID:5JWtrSqN
昔の2Dゲーム機は基本的に背景をマップタイル(キャラクタージェネレータなどとも呼ばれる)単位で管理してたものだから、同じように仮想的なタイルを敷き詰めた画面があるものとして構造体組んで、その上でモブがタイルに沿って動く管理を考えるのがとりあえずは昔のノウハウを適用できて簡単だと思う
倉庫番はまさにそういう動き
0293名前は開発中のものです。
垢版 |
2024/04/25(木) 00:30:55.75ID:5JWtrSqN
なのでモブが動くときはpix単位の座標移動が発生するけどそれはサブルーチンとして、ゲームアルゴリズムとしてはマップ全体の座標を整数の配列で(例えば100×100とか)表して制御し、画面に表示する座標は既に言われてるように適切に係数掛け算する関数を作るのが良いと思います
倉庫番の場合、マップが広いレベルを縮小してモニタに表示したりするので、その拡大縮小表示の変換が自由にできるほうがUXが良くなるし、なんなら回転表示もしたくなるかもしれないので。
0294名前は開発中のものです。
垢版 |
2024/04/25(木) 00:33:10.60ID:5JWtrSqN
>>292
まあ倉庫番まんまならAIに頼めばノーコードで完成するでしょうな
しかしゲームメカニクスの基礎は自分の頭で考えないと応用が効かなくなるから
0295名前は開発中のものです。
垢版 |
2024/04/25(木) 00:42:09.44ID:7TwSlN/Q
ちがうアプローチとしてはTileMapを使用するかな
使えるようになるまでのコストが大きいからお勧めとは言い難いが
高機能で複雑な分、理解できたら便利なクラス
0296名前は開発中のものです。
垢版 |
2024/04/25(木) 01:06:24.88ID:/gUanyy1
理解できないから半年以上苦しんでるんでしょう。
もっと園児でもわかるような単純なやり方を教えてあげて
0298名前は開発中のものです。
垢版 |
2024/04/25(木) 06:12:26.81ID:Esvk0j05
>>291
キャラの動きも配列の書き換えで行って、書き換えられたら再描画というふうにしてもいいんですが
これだと滑らかに動くキャラってのが作れなくなるんですよね 
だからチュートなどではvector2で移動させてるんだろうなと

マップ座標とvector2座標の変換は必要になりますね

>>289
別に特殊なクラスとか使うことないんですね
0299名前は開発中のものです。
垢版 |
2024/04/25(木) 06:27:04.46ID:Esvk0j05
>>293
ゲームロジックとしては配列の書き換えだけということですか?
配列の書き換え→その位置に基づいてキャラを描画、ということでしょうか
0300名前は開発中のものです。
垢版 |
2024/04/25(木) 12:30:15.39ID:Esvk0j05
関数から、2つの値を返すには何使うんですか?
カンマ区切りではダメだったので[1,2]こういう形にしたらいけました
0301名前は開発中のものです。
垢版 |
2024/04/25(木) 12:50:05.12ID:Esvk0j05
↑2つの値を返して、二次元配列として使いたい感じです

array[0][0]
こんな感じです
0302名前は開発中のものです。
垢版 |
2024/04/25(木) 13:25:04.08ID:7TwSlN/Q
2つの値を返す方法が[1,2]でいけたならそれで解決じゃね?
var return_value = [1, 2]
array[return_value[0]][return_value[1]]
0303名前は開発中のものです。
垢版 |
2024/04/25(木) 14:29:31.06ID:ddMre8ET
GDScriptでいいのか?

Pythonっぽい言語仕様だけど実際はC++をスクリプトにしただけっぽいので
Pythonで複数の値を返す時に使うTupleは使えないんだとよ

方法としては2つ、Arrayで返すかDictionaryで返す

以下はサンプルコードな ※RUNボタンで実行結果も確認できるぞ

https://gd.tumeo.space/?KYDwLsB2AmDOAEA5A9tYAodBidAzArpAMbwDmwYA+gIYBOt1AnpQG7UA2+wAFAJQBc6eMPi0K+WpHgBtAIwAaeAHJAVgyA-BkASDEsUBmAHSyALAF1MOAsTIVK0AJZEwt5JDrM2nHgKEixYCVIBvJQBrYEZZJX4FZVDgACZI1U1tGNtbHUj9IwBfTAsSSjFqaEY+QW9hNlp4OmqAXisqWqZWDi4+CvgAB1pbSDBYblreTp6+sCH6aQAGY154LHhZUd7+ydo5OYX4dQ0V8fXpOK3FrMNOzqr4OxIG8iobx2dXVo8OkW7Vge4bkY+xtY3aQhMIRE5LfaA+zA2IJcG7SETIEhNIZcFndBAA
0305名前は開発中のものです。
垢版 |
2024/04/25(木) 16:12:28.75ID:ddMre8ET
マルチでもなんでも問題解決できりゃなんでもいいんだぞ
あとTupleの話は出すべきじゃなかったな、忘れてくれ
0307名前は開発中のものです。
垢版 |
2024/04/25(木) 17:07:59.94ID:7TwSlN/Q
同じ質問は数日待っても解答が得られなかったらとか制限は掛けた方がいいな
redittの方の解答にあるが戻り値がx,yの座標を扱うものであるならVector2を使うと読みやすくなる
0308名前は開発中のものです。
垢版 |
2024/04/25(木) 17:42:32.62ID:ddMre8ET
>>306 一理ある。初心者は気を遣うことを覚えるより完成させることを優先しろ、オレの先輩の言葉

>>307 配列のIndexを返したいって話だから、Vec2はオーバーキルだと思うぞ。ぶっちゃけやってることは同じだしわかりやすい方でいいんだけどさ。This is KISS.
0309名前は開発中のものです。
垢版 |
2024/04/25(木) 18:26:51.75ID:Esvk0j05
すまん、どちらか一方にするよ
redditはそれにしても人多いねぇ
0310名前は開発中のものです。
垢版 |
2024/04/25(木) 18:43:10.78ID:/XEpAv2m
つーかマルチポストで聞く暇あるなら少しは勉強しろよ
初歩的な問題で詰んでるなら尚更
0311名前は開発中のものです。
垢版 |
2024/04/25(木) 20:20:30.32ID:7TwSlN/Q
>>308
質問のみならそうなのだが話題の元が倉庫番作るのにキャラ座標をマップ配列に変換するなのでそこまで含むと解答はこうなる
func cpos_to_mpos(cpos:Vector2i, size:int = 32) -> Vector2i:
return cpos / size
0313名前は開発中のものです。
垢版 |
2024/04/26(金) 06:09:14.77ID:1Ez+K35D
>>311
すみません
なんか自己流で複雑なやり方になってる気がする
普通はキャラ座標とマップ座標の変換はやらずに、座標を1つに統一したりするんでしょうか
0314名前は開発中のものです。
垢版 |
2024/04/26(金) 13:14:53.40ID:yaANzBxw
上の人も書いてるけど倉庫番と言うことはグリッドの途中で立ち止まる事はないだろうから、それであれば32で割った盤面上の座標だけ保持して画面表示の時に32倍するなりアニメ補間すればよいのでは
その方がセーブやアンドゥも楽になる
0315名前は開発中のものです。
垢版 |
2024/04/26(金) 13:46:32.39ID:1Ez+K35D
>>314
配列使わないということですか?
配列使わない場合、障害物の位置などを表現する場合、どうするでしょうか
二次元配列を使った場合、以下のようにマップを表現すると思います
1=壁,2=キャラ、3=動かせる箱、0=動ける範囲
[
[1,2,3,0,1],
[1,0,0,0,1],
[1,1,1,1,1],
]

グリッドの途中で立ち止まらないというのは、32ずつグリッド移動するという意味ですよね。
1pxずつ動かしたいわけじゃないので、それはその通りです。
0317名前は開発中のものです。
垢版 |
2024/04/26(金) 14:35:25.85ID:/ZFKx6UF
>>315
倉庫番である以上オブジェクトは必ず格子状に配置し管理される
それを2次元配列とみなす事ができる
配列を使わない場合は遠回りに配列があるのと同等の処理を行うだけ

なぜ>>314の説明で配列使わないという解釈になるのかが判らない
配列を使わない便利な魔法でもあると想像してないか?
配列を使わない方法があっても手間が増えて複雑になるだけだから配列が使われる
配列を使った方法で理解するのが定番
0318名前は開発中のものです。
垢版 |
2024/04/26(金) 14:55:56.89ID:/ZFKx6UF
>>313
昔はコンソール上で動かす前提で表示もキャラクター単位だったので
配列の要素番号と表示座標の変換は不要だった
今はウインドウアプリになって表示に座標変換は必須
ウインドウアプリの作法も覚えなきゃで同じ倉庫番の初心者講習でも
昔よりは複雑になり難易度上がってはいる
0319名前は開発中のものです。
垢版 |
2024/04/26(金) 15:42:16.89ID:86tvu5TE
絵文字使ってるので表示が上手くいかなかったらごめん

ゲームとしては全然足りないし完成させる所までが課題ではあるが
学習項目を配列のみに集約するとこの配列操作が理解できれば十分
func _ready():
var map = "🧱👷📦🚩🧱\n"
print(map)
map[3] = map[2]
map[2] = map[1]
map[1] = "◾"
print(map)
0320名前は開発中のものです。
垢版 |
2024/04/26(金) 15:45:16.29ID:86tvu5TE
二次元配列まで理解できたら上出来
func _ready():
var map = ["🧱🧱🧱", "🧱👷🧱", "🧱📦🧱", "🧱🚩🧱", "🧱🧱🧱", "\n"]
for c in map: print(c)
map[3][1] = map[2][1]
map[2][1] = map[1][1]
map[1][1] = "◾"
for c in map: print(c)
0321我のうんちは小粒(^^ ◆OyJP7qHDVvEI
垢版 |
2024/04/26(金) 17:21:02.02ID:jKYfR5nN
二次元配列って配列に配列入れるやつでふよね(^^
そこで詰まってるなら人に聞くよりブッコフに走ってプログラムの基礎が書いてある本買って読んだほうがいいのでは?(^^
煽りとかいじめでいってるんじゃなくて真剣に(^^

ボッキング!(^^
0322名前は開発中のものです。
垢版 |
2024/04/26(金) 18:10:17.22ID:1Ez+K35D
>>317
配列でやってみます
ありがとう

昔のやり方というのは、配列の座標を書き換える→画面表示を更新、といったやり方ですよね
今のように、ぬるっと動かすことが出来ないということですね
0324名前は開発中のものです。
垢版 |
2024/04/27(土) 14:28:13.76ID:RX6jyHGA
フローチャートよりシンプルな図示方法ってないかな?
やっぱりロジックを整理しておいてからコード書かないと脳みそがパンクする
可といってフローチャートは難しい
0325名前は開発中のものです。
垢版 |
2024/04/27(土) 14:39:46.99ID:RX6jyHGA
擬似コードってのやってみますゆえ
0327名前は開発中のものです。
垢版 |
2024/04/27(土) 17:08:49.43ID:RX6jyHGA
むずいというか、他人に説明するためのものではないので、自分だけ分かる方法でいいかなと
より簡易的であればいいです

フロチャは図形の使いこなしが苦手です
0328名前は開発中のものです。
垢版 |
2024/04/27(土) 22:14:59.66ID:toVZIEFB
>>324
plantumlが面白いかも
plantuml web serverでインストール不要で試せる
検索すればフローチャートの書き方もあるっぽいので
コピペして遊んでみては?
0329名前は開発中のものです。
垢版 |
2024/04/28(日) 02:33:44.79ID:XkoBpqzr
Godotの2Dのコンセプトは3Dを2Dに見せるやり方ではないってのだけはすぐ分かるのだけど、仮想ゲームマシン的な意味での最大スペックはどこ見ればいいのだ
実行マシンさえ強ければ、昔ながらのBG面もテキスト面もスプライト面もそれらの拡縮回転移動もカラーパレットも無制限で表示させて良い感じなのかな?

他にも昔の疑似3Dもやろうと思えば作れるのだろうけど、それには本物の3D使うよね普通の人は。
0330名前は開発中のものです。
垢版 |
2024/04/28(日) 06:15:05.24ID:6Dc8VXuN
1つのスクリプトに書いてるんですが、コードが増えてきた場合、領域を分ける方法は関数以外にありますか?
ただ、視覚的に分けるだけでもいいです
レギオンは使えるみたいですね

>>328
どうも
擬似コード的なものを視覚化するというイメージですかね
0331名前は開発中のものです。
垢版 |
2024/04/28(日) 06:42:32.33ID:6Dc8VXuN
コアな機能だけモジュール化なりクラス化なりしたほうがいいのかな
0332名前は開発中のものです。
垢版 |
2024/04/28(日) 09:40:08.77ID:6Dc8VXuN
インデントが深くなりすぎる場合、対策はあるでしょうか。
pythonで関数をカッコで表現出来るでしょうか。
0334名前は開発中のものです。
垢版 |
2024/04/28(日) 12:06:25.45ID:qOnW5aMf
>>330-332
コードの書き方は多種多様な流派があり自分にあった書き方を模索するしかない
チームで開発する時はチームでルールを定める
基本的には公式に従う

安易にファイル分割すると管理が大変になる
単にソースが長いだけならregionで閉じる
全体で共通して使う機能ならグローバルなクラスに纏める
特定のクラスのみの機能なら基底クラスを作って継承する

インデントが深いと思ったらそもそもの処理方式を考え直す
ループの内側を関数化する
ifをand,orで纏める
ソースを短くする為にソースが読み難くなるのは本末転倒なので下手な対策はしない
0335名前は開発中のものです。
垢版 |
2024/04/28(日) 13:46:45.79ID:GkEu3rtv
力業ねえ
そうは言っても作り方のセオリーはあるんじゃないかな
ユニティだけど物理ワールドでオブジェクト移動するときにポジションに1加算みたいなことしたらバグるし重いよね
ベロシティにアドフォースするのがセオリーじゃん?

そんな感じで、頭の悪いぐちゃぐちゃなセオリーもへったくれもないコードだと見づらいバグる重いでいいことないし
ゴドーで「こういう仕組み作るときはこうやるのがベター」みたいなノウハウを集めたサイトが欲しいわ
0336名前は開発中のものです。
垢版 |
2024/04/28(日) 14:04:21.58ID:KYDjUHts
>>335
逆引き辞典みたいなのあるといいよね(英語のはわりとある)
まあセオリーやノウハウが欲しいなら、他人のコードをたくさん読むことが近道じゃないかな
0337名前は開発中のものです。
垢版 |
2024/04/28(日) 15:15:52.67ID:6Dc8VXuN
>>334
どうも
自分なりに書いてみます
とりあえず見た目と機能は分けます
0338名前は開発中のものです。
垢版 |
2024/04/29(月) 06:16:45.87ID:W8KMTghQ
シンタックスのテーマはストアにないんですかね?
githubから持ってくる感じでしょうか
0339名前は開発中のものです。
垢版 |
2024/04/29(月) 14:25:37.21ID:W8KMTghQ
arrayをforで展開するときに、size関数は要素数ですので、例えば要素数5であった場合インデックス0から開始されますので、4までです
この差が誤解を産むことがあるのですが、なにか対策はあるんでしょうか?

>>338
解決 自作します
0340名前は開発中のものです。
垢版 |
2024/04/29(月) 14:53:30.83ID:2FsCulaT
殆どの言語で要素番号は0から始まるから数こなして慣れるのが一番
順次処理なら要素番号を使わない操作を心がける
どうしても気になるなら要素番号が1から始まる配列クラスを自前で作る
0341名前は開発中のものです。
垢版 |
2024/04/29(月) 16:52:13.85ID:W8KMTghQ
ありがとう
練習あるのみか

イメージ力みたいなのが足りないと思う
図で考えたほうがいいのかな
0343名前は開発中のものです。
垢版 |
2024/04/30(火) 05:44:38.46ID:HJbDE4xz
仕様書はフロチャですか
0344名前は開発中のものです。
垢版 |
2024/04/30(火) 13:00:30.92ID:qkeOAzaS
レスがつくのは嬉しいだろうけど、Godotから話題が離れてるので自分のゲーム開発だけ話すのなら別のスレで書いて欲しい
0345名前は開発中のものです。
垢版 |
2024/04/30(火) 13:09:32.02ID:HJbDE4xz
そうか、了解
0346名前は開発中のものです。
垢版 |
2024/04/30(火) 14:13:24.81ID:uAstRO41
一人が言ってるだけだから気にしなくていいよ
他で出せる話題でもないならここでやればいい
0349名前は開発中のものです。
垢版 |
2024/05/01(水) 10:08:19.10ID:ePZpzJCq
質問です
godotで子ノードにアタッチしたスクリプトの変数にはアクセス出来るんですが、スクリプトを直接ロードして、そこからアクセスしようとするとエラーになるのはなぜでしょうか。この2つの違いが良くわかりません。


目的は長いスクリプトを複数に分けることです。
0350名前は開発中のものです。
垢版 |
2024/05/01(水) 10:27:48.27ID:ePZpzJCq
↑ああそうか
一度シーンにぶら下げないとダメなんですよね godotの場合は
子ノードを作成するか autoloadにするか
0351名前は開発中のものです。
垢版 |
2024/05/01(水) 12:45:52.75ID:ZXYQy06U
AddChildやAutoLoadはシーンツリーに接続されていてそこ経由でのアクセスが可能
ロードしたスクリプトはシーンツリーから独立したインスタンスになるので
そこから他のノードへアクセスしたいのならば他のノードへの参照を渡せばアクセス可能にはなる

個人プロジェクトだろうから好きにすれば良いが
長くなったスクリプトを短くする為に理解出来てない機能を使うのは得策では無いと自分は思う
それでもどうしてもregionを使わずスクリプトを短くしたいのならば継承を使うと良い
そうすれば継承元のスクリプトは継承先では見た目上隠蔽される
0352名前は開発中のものです。
垢版 |
2024/05/01(水) 14:24:41.42ID:ePZpzJCq
ありがとうございます
シーンに適当なノードぶら下げてそこにスクリプトつけて分割することにします
0354名前は開発中のものです。
垢版 |
2024/05/03(金) 01:51:43.60ID:KMJa0hAC
直接loadしたスクリプトはnew()すると使えるはず
0355名前は開発中のものです。
垢版 |
2024/05/03(金) 13:51:37.10ID:C+l8v586
>>353
gooberはgodotだから貼った
0356名前は開発中のものです。
垢版 |
2024/05/03(金) 18:50:34.76ID:C+l8v586
関数内関数を書く時に以下のような形式になるじゃないですか
名前はどんなふうにつけますか?
一般的に変数名を省略系にするのかなと考えますが
var mB = func moveBlock():
print("ブロック動かす処理")
0357名前は開発中のものです。
垢版 |
2024/05/03(金) 19:12:54.15ID:C+l8v586
godotのテキストエディタって機能的に十分なのかな?
vscode使えるならもちろんそうしたいけどね
公式のエクステンションでもあれば
0358名前は開発中のものです。
垢版 |
2024/05/03(金) 20:14:54.48ID:QnOXIZPi
プログラム初心者で、Gamemakerを触っていたのですが
godotはGamemaker触ってたら理解は出来そうですか?
0359名前は開発中のものです。
垢版 |
2024/05/03(金) 21:48:22.15ID:SB6QCt+i
>>358
インストール不要で気軽に始められるから、公式チュートリアル30分位さわってみて判断したらいいよ
0360名前は開発中のものです。
垢版 |
2024/05/03(金) 23:12:06.81ID:klkiRmCj
%や/とか+=の意味が分からないくらいなら
ゲーム開発入門みたいな本を買うなり借りるなりして一度目を通すと少しは助かるかもしれない
0361名前は開発中のものです。
垢版 |
2024/05/03(金) 23:13:59.18ID:/rh2liyL
GameMaker使ったことないから比較するのにチュートリアルやってみようとしたら開けなかった
ブランクプロジェクト開いても何して良いか全然判らなかった
これ使えてたならGodotを新しく覚えるのも余裕じゃない?
0362名前は開発中のものです。
垢版 |
2024/05/04(土) 00:40:51.69ID:1eZ/ckRt
みなさんどうもです
触ってみろは仰る通り
事前に調べて日本語情報が異様に少ないとか
あったのでパイソン?
とかの言語知ってるのが前提なのかな?みたいな疑問もあって
聞いてみた次第です

GMで苦労したのにまたゼロから習得していくのはしんどいなあw
0363名前は開発中のものです。
垢版 |
2024/05/04(土) 00:49:24.03ID:sLFn1foN
基本的な情報は有志の日本語ブログと公式ドキュメントをツールで翻訳すれば足りる
Pythonに言語仕様が似ているので知っていると楽ができる
今後ビジュアルスクリプティングが流行らないとは言えないがGDScriptでなくても何かの言語は覚えるべき

GodotEngineとGDScriptはかなり使いやすいし判りやすいけど
日本語の初心者向け情報を頼りたいならUnityでC#になるんでないの?
0364名前は開発中のものです。
垢版 |
2024/05/04(土) 01:10:12.79ID:sLFn1foN
>>356
関数名は省略できるっしょ
自分が以前書いた例文もCallableクラスの例文も書いてないと思うけどどこで覚えてきたの?
var move_block = func(): print("~")
move_block.call()
0365名前は開発中のものです。
垢版 |
2024/05/04(土) 01:18:05.31ID:sLFn1foN
すまん確認してみたら自分が最初に教えた時に明示的にするために関数名書いてたわ
デバッグなんかで関数名の表示できると判りやすいとか付けるメリットもあるが
インラインで使う関数に名前は付けなくていいよ
0366名前は開発中のものです。
垢版 |
2024/05/04(土) 05:51:48.79ID:Q/GMBOls
>>364
出来るんですね どうも
たしかに出来た
レスを投稿する


ニューススポーツなんでも実況