Geri qayıt
Hər hansı C++ kitabxanası Godot layihəsinə necə daxil olur
SiTech AI Team2 წთ. საკითხავი

Hər hansı C++ kitabxanası Godot layihəsinə necə daxil olur

Conan bloqunda dərc olunan təlimat hər hansı C/C++ kitabxanasının GDExtension və godot-cpp 10 vasitəsilə Godot layihəsinə necə daxil olduğunu izah edir. Nümunədə flecs ECS kitabxanası bir səhnədə 100 000 hissəciyi idarə edir.

Godot MIT lisenziyalı pulsuz, açıq mənbəli oyun mühərrikidir, layihələrin çoxu isə GDScript ilə yazılır. Gec-tez artıq C və ya C++ kitabxanası kimi mövcud olan funksionallığa ehtiyac yaranır. GDScript native kodu çağıra bilmir, Godot onu GDExtension vasitəsilə daxil edir, rəsmi C++ bindings olan godot-cpp isə bu kodu adi mühərrik sinifləri kimi təqdim edir.

Conan bloqundakı təlimat bu yolu izah edir: godot-cpp 10 artıq ConanCenter-dədir, nümunədə isə flecs ECS kitabxanası səhnədə 100 000 hissəciyi idarə edir.

Godot C++ kodu ilə necə genişlənir

Godot layihəsi scene-lərdən, node ağaclarından ibarətdir, davranış isə node-a bərkidilmiş script ilə əlavə olunur. C++ kodu iki yolla əlavə edilir: engine module mühərrikin içində kompilyasiya olunur, lakin bütün platformalar üçün öz Godot yığımınızı tələb edir, GDExtension isə shared kitabxananı rəsmi Godot-a runtime zamanı yükləyir və sabit C interfeysi ilə əlaqə saxlayır.

Godot-ის Create New Node დიალოგი, სადაც Swarm კლასი Node2D-ის ქვეშ ჩანს

Yığım, çətin hissə

godot-cpp verbose C interfeysini C++ API ilə əhatə edir. 10-cu versiyadan bir release Godot-un 4.3-dən bütün versiyaları ilə işləyir, versiya api_version option-u ilə seçilir, genişlənmə isə üç target-dan birinə kompilyasiya olunur. Sənədlər godot-cpp-nin git submodule kimi əlavə olunmasını təklif edir, amma o zaman hər layihə hər platforma üçün kitabxanaları özü yığır.

Conan asılılıqları götürür

ConanCenter-də godot-cpp recipe-si bu bindings-i adi paketə çevirir: api_version (4.3-dən 4.7-yə qədər, default 4.7) və target Conan option-larıdır. Hər kombinasiya bir dəfə yığılır və sonra bütün layihələrə xidmət edir. ConanCenter-də 1 900-dən çox kitabxana var və Conan hamısını eyni cür yığır.

flecs ilə 100 000 hissəcik

Nümunədə GDExtension flecs üzərində 100 000 hissəciyi idarə edən yeni Swarm node-u qeydiyyatdan keçirir: onlar siçandan qaçır və kənarlara dəyirlər. ECS-də entity sadə id-dir, component ona bərkidilmiş verilənlərdir, system isə bütün uyğun entity-lər üzərindən keçən funksiyadır. Eyni tipli component-lər yaddaşda birlikdə saxlanılır, buna görə çoxlu entity üzərində keçid sürətlidir.

Godot-ის editor-ი Swarm node-ისა და Count, Flee Radius თვისებებით

Hər frame-də _process() flecs-ə siçanın mövqeyini ötürür, world.progress() ilə system-ləri işə salır və mövqeləri MultiMesh buffer-inə kopyalayır: MultiMesh bir draw call-da bir mesh-in çoxlu instance-ını çəkir, çünki 100 000 hissəcik üçün ayrı node həddindən artıq ağırdır. Sinif GDREGISTER_RUNTIME_CLASS ilə qeydiyyatdan keçir, yəni editor-da yalnız placeholder-dir.

Yığım bir əmrlə həyata keçirilir: conan build . --build=missing. Conan godot-cpp və flecs-i tapır, hazır binary-ləri ConanCenter-dən endirir və genişlənməni yığır. godot-cpp C++17 tələb edir, buna görə köhnə profile -s compiler.cppstd=17 əlavə olunur.

SSiTech

SiTech — AI ilə gücləndirilmiş veb hazırlanması

Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.