【軽量】godot engine - part2at GAMEDEV
【軽量】godot engine - part2 - 暇つぶし2ch403:名前は開発中のものです。
23/07/30 20:13:45.34 anBTKIS2.net
>>401
モチーフを少し改造する方式にするわ(*´ω`*)

404:名前は開発中のものです。
23/07/30 20:28:54.78 iZ/qN6Rm.net
>>402
Vector2.UPはVector2(0,-1)と同じ、要は画面の↑方向を差すベクトル
他にもVector2.ZERO、Vector2.ONE、Vector2.LEFT、Vector2.RIGHT、Vector2.DOWNがある
rotated()は回転させたVector2を返すメソッド
Vector2.UP.rotated(3.14)は↑方向のベクトルを180度回転させたベクトルになるので、Vector2(0,1)が返ってくる
var velocity = Vector2.UP.rotated(rotation) * speed
の行は、Vector2.UPを基準に、rotation分回転させてspeed分移動するためのベクトルをvelocityに計算してる
Node2Dクラスが持ってるpositionプロパティにVector2を渡せばその座標に移動出来るので、
今の座標にvelocityを足す事で円を描くように移動させられる
deltaは_process()が呼ばれる時に内部で渡されるフレーム間合計時間
_process()は1秒のうちに何回も呼ばれるメソッドなのでdeltaを掛けることで1秒間の移動量を調整してる
こんな感じ?
日本語ドキュメントは3.xですら中途半端だしdeeplでも使って根気よく翻訳するしかないな

405:名前は開発中のものです。
23/07/31 06:42:37.36 PqMd5Ecf.net
完成させるための期限はどのくらいにしてますか?
game aweekだと1週間ですが、自分のスキルにもよるでしょうけども。

406:名前は開発中のものです。
23/07/31 09:18:39.65 PdSwL1C1.net
>>402
サンプルの "rotation += angular_speed * delta" のコードが
rotationプロパティを通して角速度angular_speedでキャラを回転させ続けて、
変数velocityは上向きベクトルをrotationの向きに回転させ、速度speed分進む方向ベクトルなので
組み合わさるとキャラが角速度angular_speedで向きを回転しながら速度speedで前に進むことになり
その姿を想像してみるとたぶん円軌道になるのかなあと
スイカ割りで目隠ししてぐるぐる回されたあとに進むと真っ直ぐ進んでるように思ってもくるくる回るみたいな…

407:名前は開発中のものです。
23/07/31 18:30:17.45 PqMd5Ecf.net
ゲームの仕様書は変えないことが大事でしょうか
あれもこれもと追加すると延々と終わらないと言いますね、、、
この辺が完成捺せられない理由かも自分

408:名前は開発中のものです。
23/08/01 08:33:05.82 AM5QZiOn.net
最近ワナビースレみないと思ったらGodotスレにいるのか。がんばれ

409:名前は開発中のものです。
23/08/01 11:13:26.95 0v6pG1BI.net
うん ゲーム性が思いつかない

410:名前は開発中のものです。
23/08/01 14:43:23.28 0v6pG1BI.net
どんな題材であっても面白くこねくり回す能力ってなんていうんだろう
その能力が大事なんだろうな
インスピレーション?

411:名前は開発中のものです。
23/08/01 17:24:38.24 EiDnBy7X.net
いつまでウジウジ言ってるんだ
最近やったゲームで面白いと思った物は何だよ
それをパクれ

412:名前は開発中のものです。
23/08/01 17:37:35.95 s9Z/hLC5.net
>>404
>>406
丁寧な解説ありがとうございます。
解説と照らし合わせながら週末唸りながら朧気ながらに理解していったのが
下記の通りで、間違っているかもしれません。
ソースの全体を貼って無かったので
URLリンク(docs.godotengine.org)
先ず謎なのが、
delta の機能で、ヘルプには「最後のフレームからの経過時間」とあるけれどどゆこと?
類推するに、60fpsで動いてる場合0.0166666を返すって事でいいんかな?
func _process(delta):
は毎フレーム実行される処理「常に実行」という関数って事でいい?
こういう所ヘルプが足りてない気がする。
それともプログラミングする上での常識?だとしたらごめんなさい。
最低限プログラミングの素養が無いとgodot触れないなら諦めます。
次に、
var angular_speed = PI
何でこの変数がPI(3.14)必要なのか?
rotation に入れる値って角度じゃないっぽい・・・と、調べてみると
コードから指定する rotation はラジアン値なんやね。
存在は知っていたけど調べてみたら何とも扱いが面倒な単位・・・
なんでや・・・プロパティでは角度で入れるのにコードから入れる時は
ラジアン値とか混乱するやろっ!
という事でラジアン値とPIを色々調べて相互変換式を見比べて何故PIを
変数に入れたのか、何で
rotation += angular_speed * delta
の式で2フレームで画像が360度(2PI)回るのかが理解できました。
うん中学の頃の授業でやったやった・・・。

413:名前は開発中のものです。
23/08/01 17:37:52.12 s9Z/hLC5.net
次が大問題の
var velocity = Vector2.UP.rotated(rotation) * speed
Vector2.UP がレスで教えてもらったので.UPの定数が理解できましたここで基準方向を指定
その方向から続けて記述される.rotated(rotation)角度へ向けて
* speed 分移動させた位置(これが円周運動の半径になる)を velocity に格納
って事でいいんかな?
何で * speed したら「その方向にspeed分移動」になるのか理解できない。
式として理解できないけどそういう命令として受け入れるしかないのか・・
続けての
position += velocity * delta
で現在の位置に velocity に * delta する事で1フレーム分の移動値を position に
加算するという処理にたどり着くのに三日掛かりました。
頭フット―しそうです。
ただ、疑問なのが rotation 値がPI(3.14)の時はノードは180度回転して
下を向いている筈で、その時 velocity は時計で言う6時の位置という事になる筈だけど
円周運動の場合その時のノードの向きは進行方向である左を向いてないといけないと
思うんだけどもこの考え方だと180度(下向き)になるのでは?
感想としては命令文を理解しようと検索してもオンラインヘルプの記述が
異常に難解で苦労しました。
GameMakerのオンラインヘルプは使用例や解説とリンクがとても分かりやすかったので
ヘルプ周りを参考にしてほしいところです。
この先もこの調子だと手に負えないかな・・・

414:名前は開発中のものです。
23/08/01 19:27:00.91 DGAEntxi.net
ラジアンは高校で習うんだよ
三角関数と一緒に使うからね
わからない関数が出たらマニュアルの検索ボックスに突っ込むのが基本

415:名前は開発中のものです。
23/08/02 02:24:09.38 mr3zSq9+.net
>>412
>60fpsで動いてる場合0.0166666を返すって事でいいんかな?
これは大体あってる。処理が重けりゃfps不安定になるからdeltaも乱高下する
>毎フレーム実行される処理「常に実行」という関数って事でいい?
合ってる。詳しい事はgodot processとかでググればドキュメント出てくるはず
chromeなら右クリ、スマホなら︙から翻訳出来るから英語ページも漁ってみ
因みにupdate関数の概念はUnityとかにも通ずるから基本と言えば基本
πの概念もゲームだとよく出る
座標系、ベクトル、三角関数は避けられない
因みにgodotだとdeg2rad(角度)で弧度に変換出来てrad2deg(弧度)で度数に変換できるよ
>何で * speed したら「その方向にspeed分移動」になるのか理解できない。
要はposition += Vector2.UPとした所でpositionの位置から(0,1)ずつジワジワ動くだけなので、position += Vector2.UP*speedにして沢山動かそうってだけ
矢印で考えたら、掛けた分矢印の長さが倍になるイメージ
(0, 1)*100 = (0*100, 1*100) = (0, 100)ってだけなんだけど、まぁ色々試すなり一旦チュートリアル進るなり場数踏めば意味も理解出来るんじゃね
>この考え方だと180度(下向き)になるのでは?
意味を掬い取れてるか分からんが…考え方は合ってる
もし12時の位置から同じ方法で円を描けば、180°の頃には6時の位置で左向きになる
サンプルでは0°が上向きで9時の位置だから180°の時には下向きで3時の位置になってるけど
ドキュメント周りはまだ発展途上なツールだし多めに見よう

416:名前は開発中のものです。
23/08/02 07:52:15.08 rnOElBcM.net
>>411
やってない
頑張る

417:名前は開発中のものです。
23/08/02 10:12:13.98 eAvhDWSg.net
>>415
大体理解があってたみたいで良かった。
サインコサインタンジェントもやたら使うのでちゃんと勉強しておけば良かったと思う
今日この頃。変換関数あるのは楽でいいね。
* speed の意味もその解説で理解できました
Vector2.UP自体がベクトルに1進めるという移動量を持っていたのが理解出来てなかった。
* speed で400倍してるけれど、次の position で位置指定するには大きすぎるので
* delta で0.0166666倍してると・・・ってそれ二度手間やないかい
と思って speed を4にして * delta を消すと二度手間を簡略化出来た!
何でこの二度手間させてるんだろう?
向きの辻褄が合わないのは解説のお陰で理解できました
開始位置が9時方向だったのか(なぜか0時開始で思い込んでた)
そうよね、最初Vector2.UPで上向かせて rotation が3.14*0.0166666だから
ほんの僅か右に傾いた上方向に向かって移動開始だから9時方向からか・・・
理解した瞬間声が出たw
丁寧な解説ありがとうございます。
この調子で少しづつ理解していければ、いいなあ

418:名前は開発中のものです。
23/08/02 10:16:34.71 eAvhDWSg.net
>>414
そのマニュアルが・・・もっと判りやすく記述してくれっっ
4.1の日本語リファレンス本出てくれないかなあ

419:名前は開発中のものです。
23/08/06 22:33:04.38 LKqx5Dzu.net
>>417
あれから他のチュートリアル見てて気が付いた
var velocity = Vector2.UP.rotated(rotation) * speed
この式は方向にスピードを掛けて「速さ」を出してるって意味だったんやね
で、deltaが時間/1fps で
position += velocity * delta
速さ*時間=距離の公式で移動距離をpositionに足し続けて移動を表現してたのか。
なるほど。
ベクトルも内包してるのが公式とは違う所だけど、何でこの掛け算してるのかが理解できた。

420:名前は開発中のものです。
23/08/07 07:10:12.84 CYdOl9Io.net
モーション系は_process(delta)よりは本来_physics_processの方が適してる
というか_processを_physics_processの仕様で置換え統合してもよさそうな気もするのだけれども…
定速と可変のギアは使い分けた方がいいってことなのかなこの辺どんな議論になってるのか分からない

421:名前は開発中のものです。
23/08/13 17:11:06.69 7ORbb6tN.net
いまだにゴドットと読む人いるなぁ
スレタイに読み仮名つけたほうがいいかもなぁ

422:名前は開発中のものです。
23/08/13 17:15:33.95 M2cWVVka.net
後藤

423:名前は開発中のものです。
23/08/13 17:58:08.60 PXDE7mSp.net
Tilemapのterrain設定がよく分からん…
ぴぽやのマップチップにパターン設定したいんだが似たような事してるサイト無いかな


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch