Godot、1000の小さなこず

最近発芋されたGodot゚ンゞンは、オヌプン゜ヌスのゲヌム゚ンゞンです。䞻に3D領域、コヌド、たたは䞀般的なポむントからのいく぀かのトリックずメモを共有したす。





Godotは、䞀般に、2D゚ンゞンによく䌌おいるずいう評刀がありたすが、かなりうたくいきたしたが、3D機胜によっお3Dゲヌムを䜜成できたす。特に、自分でいく぀かを最適化できる堎合は、重くお耇雑なゲヌムを䜜らないでください。たた、珟圚のレンダリングオプションに満足しおいたす。たたは、将来の最適化ずvulkanの出珟を埅぀こずもできたす。



箱から出しお、゚ンゞンは、関節や車茪付き車䞡を含む、いく぀かの物理孊を持っおいたす。組み蟌みの地圢゚ディタはありたせんが、プラグむンを䜿甚したり、特殊なプログラムからむンポヌトしたり、3Dパッケヌゞのメッシュのように䜿甚したりできたす。埌者の堎合、パフォヌマンスのために、ランドスケヌプを個別にチャンクフラグメントにカットする必芁があり、衝突のためにそれらを別々のメッシュにする必芁がありたす。ランドスケヌプ衝突の圢のメッシュに぀いお-芖芚的な䞍䞀臎を回避するために、3Dパッケヌゞからの゚クスポヌト䞭にモデルを䞉角圢分割する必芁がありたす。たずえば、Blenderでこれを行う最も簡単な方法の1぀は、メッシュをcollada圢匏.daeで゚クスポヌトするこずです。デフォルトの䞉角チェックマヌクがありたす。

堎合によっおは、BlenderのモデルをGodot内で180床回転させる必芁がありたす。地圢が芋えなくおも驚かないでください。通垞、法線によっお間違った方向に回転したす。



Godotは「すべおがシヌンである」アプロヌチを実践しおおり、芁玠のツリヌ構造に適合しおいたす。実際には、これは、既存のノヌドぞのブランチずしお新しいオブゞェクトがレベルに远加され、プレハブに折りたたたれ、個別の小さなロヌカルワヌルドのように個別に開くこずができるこずを意味したす。したがっお、保存されたすべおの皮類の合成オブゞェクトを線集するのは非垞に䟿利です。唯䞀の瞬間は、ラむトがレベルに蚭定されおいる堎合、たずえば、キャラクタヌの内郚にロヌカルシヌンに入るず、この照明が衚瀺されず、マテリアルを蚭定しおも、オブゞェクトがどのように芋えるかを理解できたせん。光。この問題はさたざたな方法で解決できたす。たずえば、レベルりィンドりに切り替えお、シヌンをそこに保存した埌、キャラクタヌで行われた倉曎を評䟡したす。たたは、䞀時的にキャラクタヌず䞀緒にプレハブの䞭に光源を投げたす。





theEnergy, . Area, , , .



蚀語に぀いおは、䜎レベルの方法を陀いお、最も䞀般的なオプションは、スクリプト蚀語のGDScriptずC、および単玔なもののためのビゞュアルスクリプトです。 GDScriptぱンゞンに統合され、より倚くの䟋があり、倖郚環境を開始する必芁がありたせん。䞀般的な構造の点では、すべおがCバリアントず同じです-倉数の宣蚀、初期化関数の呌び出し、プロセスサむクル、物理プロセスのサむクルなど。したがっお、䞻芁な開発スクリプト蚀語ずしおGDScriptを遞択するこずには意味がありたす。ロヌカルのCに倉曎するず、録音の粟床ず詳现が向䞊し、簡朔さが倱われたすが、状況がわかりやすくなり、制埡が匷化されたす-タブ、改行、より正匏な入力の代わりに䞭括匧。





䞊蚘のオブゞェクトにアタッチされたコヌドGDScript蚀語。倉数識別子が蚭定され、その倀ぱディタヌで蚭定できたす。次に、特別なこずが起こらないそしお消去される可胜性がある1回限りの初期化関数。次に、オブゞェクトを削陀する必芁があるシグナルハンドラヌメ゜ッドに぀いお説明したす。



グロヌバル倉数に぀いおは、GDScriptずCの䞡方でそれらを䜿甚するために、プロゞェクトパラメヌタヌに自動ロヌドするグロヌバルスクリプトを远加する必芁がありたす。これらの倉数にはグロヌバルにアクセスできたす。

たた、Godotには制限がありたす-各オブゞェクトには1぀のスクリプトしか存圚できたせん。しかし、この点は、たずえば、2番目のスクリプトを子オブゞェクトにぶら䞋げるこずで回避できたす。



信号



オブゞェクトはツリヌぞの分岐のように互いに接続されおいるため、階局を䜿甚しおGodotのノヌド間でデヌタを亀換するこずもできたす。確かに、このアプロヌチには萜ずし穎がありたす。なぜなら、私たちのゲヌムでは階局は動的に倉曎可胜だからです。さらに、同じシヌン内の階局を参照するこずは1぀ですが、シヌン内のシヌン内にシヌンがある堎合、䜕が起こっおいるのかを玔粋に理解しおいるずしおも、これにはいく぀かの困難がありたす。

これらすべおを管理し、特定の珟圚の階局に過床に関連付けられないようにする1぀の方法は、シグナルを䜿甚するこずです。特定の数の䞀般的な信号がすでにプリむンストヌルされおいたす。オブゞェクトの信号パネルを調べお、同じオブゞェクトのスクリプトたたはシヌン内のスクリプトを䜿甚しお別のオブゞェクトのスクリプトにそれらの1぀を受信する凊理でラむンをアタッチできたす。独自の信号を䜜成する必芁がある堎合は、次のようにしたす。信号





を開始し



たす。ボタンが抌されたずきなどの同じスクリプトで信号を発信



したす。あるシヌンから別のシヌンに信号を転送する必芁がない限り、これで問題ありたせん。たずえば、シヌンからレベルをコヌディングしおいお、珟圚のレベルを砎棄し、たずえば次のレベルを収集する必芁があるずきを知る必芁があるためです。

この堎合、コヌドハンドラヌをオブゞェクトにアタッチしお、コヌドによっおレベルを構築する瞬間にルヌトシヌンにシグナルを送信できたす。したがっお、私たちは、いわば、この生成されたスレッドでスパむ゚ヌゞェントを取埗し、圌が私たちに蚀うこずを聞きたす。





レベルの組み立お時に、宇宙船を芋぀けお信号リスナヌを接続し、この信号のメッセヌゞを凊理する方法を瀺したす。



信号にいく぀かの倉数を付加するこずもできたす。これは非垞に䟿利です。たずえば、オブゞェクトでさたざたなシグナルを開始する代わりに、シグナルを1぀実行できたすが、さたざたなパラメヌタヌで送信し、受信時にさらに凊理したす。





そしお、これは䞊蚘で開始したメ゜ッド自䜓の説明です。シグナルを受信するず、䞀緒に送信された倉数を凊理したす。



䞍芁な信号の数を枛らすもう1぀の䟿利な点は、個人的な信号を送信する代わりに、あるオブゞェクトが別のオブゞェクトをノックしお、圌自身がすでにその䞭にある信号を送信できるこずです。たずえば、爆発はプレヌダヌに觊れたずいうシグナルを受け取り、このシグナルのハンドラヌでプレヌダヌが自己砎壊メ゜ッドを持っおいるかどうかを怜出し、怜出された堎合にそれを開始したす。プレヌダヌは、この呌び出されたメ゜ッドで、死亡したルヌトシヌンに信号を送信したす。ルヌトシヌンのスクリプトでは、プレむダヌのデスシグナルハンドラヌがワヌルドを消去し、ゲヌムメニュヌを収集したす。





むベントが発生し、ゟヌンに入ったオブゞェクトに適切なメ゜ッドがあるかどうかを確認したす。





, , . , , .



CSG-





Godotの䟿利な3Dツヌルの1぀は、建蚭的な゜リッドゞオメトリプリミティブです。簡単に蚀うず、これらはブヌル挔算亀差、陀倖、和集合をサポヌトするオブゞェクトです。プリミティブのセットに加えお、すでに任意のメッシュを蚭定できるフォヌムずしお、ナニバヌサルCSGメッシュがありたす。







耇雑な構造を組み立おるずきに必芁な堎合は、操䜜の適甚の優先順䜍を制埡するために階局でCSG Combinerダミヌを䜿甚する必芁がありたす。





嚘の球が切り取られる䞀察の球。



CSGの䞻な甚途は、静的レベルずその芁玠のいく぀かをプロトタむプ化する際の利䟿性ずシンプルさです。実際、ゲヌム゚ディタヌの倖郚でこれを行う必芁がない限り、3Dパッケヌゞでメッシュを䜜成し、その結果ずしお同じ圢状を繰り返すこずができたす。



静的CSGの次のアプリケヌションは、砎壊性ず損傷をシミュレヌトするこずです。これを行うには、穎、「スタブ」、ぞこみなどのCSGプリミティブを陀倖モヌドで配眮し、適切なタむミングでの衚瀺を含めお䞀時的に非衚瀺にする必芁がありたす。ここでの制限は、CSGオブゞェクトの衚面のみに「ダメヌゞを䞎える」こずができるこずです。さらに、「ダメヌゞ」は最初に子ずしおそれにアタッチするか、子孫ずしおコヌドを介しおアタッチする必芁がありたす。ただし、このオプションは、3Dパッケヌゞで準備された砎壊可胜なオブゞェクトず比范しお、構成の柔軟性の点ですでにかなり優れおいたす。





䟋倖モヌドでは、3぀のシリンダヌがブリッゞに組み蟌たれおいたす。それらが隠されおいる間、橋は無傷です。



有効にするず、陀倖する領域が切り取られたす。



次に、CSGを動かしたす。コヌドたたは蚘録されたアニメヌションを通じお。䞀般に、このメ゜ッドを䜿甚しおいく぀かの効果を実装できたすが、そのようなアニメヌションがルヌプのステヌゞで回転しないこずが非垞に望たしいです。いく぀かのアニメヌションCSGはパフォヌマンスに倧きな圱響を䞎える可胜性があり、Godotはすべおのものを最適化するわけではありたせん。アニメヌションCSGを自分で切り取らなければ、カメラの可芖性からパフォヌマンスを消費し続けたす。

それにもかかわらず、アニメヌション化されたCSGの効果を3Dパッケヌゞ゜リュヌションで眮き換えるこずは既に困難であるため、それらを䜿甚するこずに興味があるかもしれたせん少なくずもコヌドで高床な3Dを描画する予定がない堎合。䞻なこずは、それらの適切な䜿甚法を芋぀けるこずです。トリガヌのアニメヌションを含む特定の堎所で、それらをポむントごずに䜿甚するのが最善です。通路を開く効果やその他の䞀時的な特殊効果ずしお。圓然、CSGオブゞェクトの圢匏は単玔であるほど良いです。そしお、それらは運動䞭の接觊の過皋で正確に䞻芁な蚈算負荷を発揮し、さらに、どのオブゞェクトを他のオブゞェクトに察しお動かすかには特別な違いはありたせん。





アニメヌションのCSGカプセルが橋のモデルを備えたCSGメッシュを通過するずきに、車が橋の穎から萜ちる瞬間がビデオにありたす。



マルチメッシュ





レベルごずに石や朚を散乱させるなど、倧量のメッシュを耇補する必芁がある堎合は、MultimeshInstanceノヌドが圹立ちたす。

シヌンに远加した埌、マルチマッシュをコピヌするオブゞェクトを指定し、クロヌンのモデルずしお䜕を取埗するかを指定する必芁がありたす。途䞭で、クロヌンのサむズず数を遞択できたす。マルチミックスが「ベむク」されおいる堎合、それは倚くのクロヌンを衚しおおり、圌が圌の䞖代に䜿甚した目暙は、それらが䞍芁になった堎合は削陀するこずもできたす。





マルチメディアタヌゲットを遞択するためのボタンが遞択されるず、右䞊の゚ディタヌりィンドりに衚瀺されたす。それを抌すず、生成甚の蚭定を含むこのりィンドりがドロップアりトしたす。





ここでは、2぀のオブゞェクトがMeshInstanceノヌドずしおシヌンに远加されおいたす。次に、巊偎のオブゞェクトを右偎に残したした。





マルチメッシュを取埗したす。この堎合、蚭定では10,000個のクロヌンが蚭定されおいたした。ちなみに、3〜4千枚あれば芖芚的にはそれほど倉わらないでしょう。



「ベむク」マルチメッシュはどこにでも移動でき、さらに、生成䞭に指定されたクロヌンの数を最初に衚瀺するVisible Instanceパラメヌタヌがありたす。この倀を倉曎するこずで、珟圚衚瀺されおいるクロヌンの数を制埡できたす。デフォルトでは-1ですが、これはクロヌンの最倧数を衚瀺するための特別な倀です。 10を指定するず、10のクロヌンが䜜成されたす。100の堎合は100になりたす。最倧が50の堎合は、100、1000、-1の堎合は50のたたです。

このマルチメッシュ機胜を䜿甚しお、コヌドたたは蚘録されたアニメヌションを通じおVisible Instanceパラメヌタヌをアニメヌション化するこずにより、特殊効果を䜜成できたす。クロヌンの密床をより现かく制埡するために、3Dパッケヌゞを䜿甚しお、クロヌンの最倧密床が必芁な堎所ず、ポリゎンで芆われおはならない堎所や、隙間ができおいない堎所で、゜リッドメッシュの個別のメッシュを正確に䜜成できたす。





衚瀺むンスタンスを500に蚭定するず、塗り぀ぶし密床が急激に䜎䞋したす。



雑倚





Godotのコントロヌルは、゚ディタヌの䞊郚パネルでプロゞェクト項目を開くこずで構成できたす。次のプロゞェクト蚭定、アクションリストタブ。





コヌドを介しおアクセスされる名前によっお、デフォルトボタンの名前がわかりたす。たた、独自のものを远加したす。



たずえば、PgUPボタンのデフォルト名は「ui_page_up」であり、GDScriptで次の行を蚘述するこずにより、コヌド内でのボタンの抌䞋を凊理できたす

。抌しの終わり-抌した状態がリリヌスに倉わりたす。







マテリアルのちら぀きをアニメヌション化する必芁がある堎合は、自己䜜成のシェヌダヌを䜿甚しおこれを行うこずができたす。これを行うには、オブゞェクトマテリアルずしお[New ShaderMaterial]を遞択したす。









次に、空のフィヌルドで VisualShader を遞択したす。これを





クリックするず、゚ディタヌの䞋にビゞュアル゚ディタヌが開きたす。



最初にInput-All- Time、次にScalar-Common- ScalarFuncを远加し、ドロップダりンリストで蚭定したす。眪。原則ずしお、すでにそのような構成では、黒ず癜の間でちら぀きのようなものが埗られたすが、それを改善するには、もう1぀のノヌドScalar-Common- ScalarFuncを远加したすそこでAbsを遞択したす。ノヌドを盞互に接続し各ノヌドの閉じた目をクリックするず、ノヌドを開いお、各段階で画像がどのように倉化するかを確認できたす、アルファ、攟出、たたはアルベドチャネルに接続したす。これで、オブゞェクトがちら぀きたす。







圓然、これは唯䞀の方法からはほど遠いですが、非垞に単玔なオプションの1぀です。そしお、フリッカヌに色を付けたい堎合は、色でいく぀かのノヌドを䜜成し、それらを特別なノヌドAlbedoに面しおいるで混合し、䞊蚘で収集したノヌドのチェヌンの出力にアタッチする必芁がありたす。したがっお、このチェヌンはこれらの色の混合芁玠ずしお機胜したす。







遞択したノヌドを別のシヌンにするには、ノヌドを右クリックしお、[ブランチをシヌンずしお保存]オプションを遞択したす。次に、このシヌンの名前を蚭定したす。その埌、ノヌドの名前の暪に「゚ディタヌで開く」アむコンが衚瀺され、そこから新しいりィンドりで結果のシヌンを線集できたす。

逆の操䜜を実行するには、たずえば、保存されたブランチのオブゞェクトを珟圚のシヌンに取埗しお䜕らかの方法で再構築たたは倉曎する必芁がある堎合、シヌンを非衚瀺にしおいるノヌドをクリックし、右クリックしお[ロヌカルにする]を遞択したす。圌が衚した保存されたシヌンは砎壊されたせん。







グロヌバル倉数を䜿甚するには、スクリプトを䜜成しおオヌトロヌドに投入する必芁がありたすプロゞェクト -プロゞェクト蚭定 - スタヌトアップ。 「シングルトン」チェックボックスをチェックする必芁がありたす。





SaveTheWorldスクリプトの内容。倉数ずしおグロヌバルに䜿甚したす。珟時点では、特定のヘルスむンゞケヌタヌず䞀連の敵の状態がここで宣蚀されおおり、初期化ステップで入力されたす。



コヌドからこれらのグロヌバル倉数にアクセスするには、最初にシングルトンぞのリンクを取埗しおから、その倉数を䜿甚する必芁があり





たす。SaveTheWorldを芋぀け、この特定の敵の状態がれロかどうかを確認したす。もしそうなら、敵は陀去されたす。



UPD。シングルトンの倉数には、その名前を䜿甚しおすぐにアクセスできたす。぀たり、䞊蚘の䟋ではリンクを取る必芁はなく、main.enemy_arr [myID]の代わりに、SaveTheWorld.enemy_arr [myID]を䜿甚したす。ただし、このノヌドの起動時に「singleton」列にチェックマヌクが付いおいるこずを確認する必芁がありたす。







アンAnimationPlayerノヌドは、レコヌドやプレむ動画をシヌンに远加されたす。階局内の任意の堎所に配眮できたす。圌にアニメヌションを蚘録する機䌚を䞎えるには、開いおいるタむムラむンの䞊にある[アニメヌション]ボタンをクリックしお、新しいアニメヌションを䜜成する必芁がありたす。

その埌、珟圚のシヌンで遞択可胜な各ノヌドで、むンスペクタヌの右偎に䞻芁なアむコンが衚瀺されたす。キヌをクリックするず、アニメヌタヌは新しいアニメヌショントラックを远加するよう提案したす。







次に、タむムラむンスラむダヌを目的のポむントに移動したす。それぞれのポむントで、オブゞェクトむンスペクタヌでアニメヌション倀を倉曎し、もう䞀床キヌを抌しお、このポむントをタむムラむンに衚瀺したす。右偎の時蚈を䜿甚しお、フィヌルドで䜿甚可胜なタむムレヌンを拡匵できたす。デフォルトでは1秒です。時蚈の右偎には、アニメヌションルヌプボタンがありたす。以䞋の最初の行は、アニメヌションのぎくぎくず䞍連続たたは連続的な滑らかなキャラクタヌを蚭定する、頻繁に䜿甚されるオプションの1぀です。

䞭倮パネルの右偎にアニメヌションの名前が付いた自動実行ボタンがあり、これを抌すず、遞択したアニメヌションがアプリケヌションの起動時に再生されたす。ルヌプで垞に再生される耇数のアニメヌション化されたオブゞェクトが必芁な堎合は、それらに共通のアニメヌションを1぀䜜成するこずにより、1぀のAnimationPlayerでそれらのトラックを䜜成できたす。特定のオブゞェクトのアニメヌションを切り替える必芁がある堎合は、そのオブゞェクト甚に個別のAnimationPlayerを䜜成し、そこにさたざたな状態のアニメヌションをいく぀か䜜成できたすが、自動的に開始するようにマヌクできるのは1぀だけです。







様々なノヌドの堎合は、䟋えば、MeshInstanceたたはCollisionShapeは、メッシュシェむプ分野では、あなたはMeshInstanceの堎合は、カスタムモデルのロヌドを含むプリミティブの準備リストから遞択するこずができたす。







MeshInstanceの堎合、最も高䟡なプリミティブの1぀は球ずカプセルになりたす。これは、倚くのポリゎンが含たれおいる可胜性が高いためです。したがっお、3Dパヌティクルの堎合は、ポリゎン、立方䜓、プリズムなどを遞択するこずをお勧めしたす。反察に、衝突の堎合、パラメヌタヌの半埄が1぀しかないため、球の圢状が最も速く読み取れたす。実際、䞊蚘はGodotだけでなく、他のゲヌム゚ンゞンにも圓おはたりたす。

Godotは、MeshInstanceを遞択したずきに゚ディタヌの右䞊に衚瀺される[配列]ボタンをクリックしお、MeshInstanceの衝突圢状を自動的に䜜成するこずもできたす。次に、提案されたオプションから遞択したすが、原則ずしお、同じ地圢の堎合、これが最初の項目になりたす-「凹型静的ボディの䜜成」その埌、正確な衝突がネストされたStaticBodyノヌドがオブゞェクトにアタッチされたす。他のすべおのケヌスで、特に正確な衝突が必芁ない堎合は、独立しお公開されたCollisionShapeプリミティブを省くか、3Dパッケヌゞで衝突に最適なメッシュを収集しおから、MeshInstanceを介しお远加し、[配列]ボタンを䜿甚しおフォヌムに衝突を䜜成したす。







むンスペクタヌの数倀フィヌルドのいずれかで、たずえばパラメヌタヌに特定の数倀を远加したり、倀を乗算したりする必芁がある堎合、次のようにしおノックアりトできたす "315-180"、 "20 + 40"、 "64 * 5" ...線集者がフィヌルドでの操䜜の最終結果を蚈算しお眮き換えたす。



All Articles