Geri Dön
Herhangi bir C++ kütüphanesi Godot projesine nasıl girer?
SiTech AI Team2 წთ. საკითხავი

Herhangi bir C++ kütüphanesi Godot projesine nasıl girer?

Conan blogunda yayımlanan kılavuz, herhangi bir C/C++ kütüphanesinin GDExtension ve godot-cpp 10 aracılığıyla Godot projesine nasıl girdiğini açıklıyor. Örnekte flecs ECS kütüphanesi tek sahnede 100 000 parçacığı yönetiyor.

Godot, MIT lisanslı ücretsiz ve açık kaynaklı bir oyun motorudur; projelerin çoğu GDScript ile yazılır. Er ya da geç, C veya C++ kütüphanesi olarak zaten var olan bir işlevselliğe ihtiyaç duyulur. GDScript native kodu çağıramaz; Godot bunu GDExtension ile içeri alır, resmî C++ bindings olan godot-cpp ise bu kodu normal motor sınıfları olarak sunar.

Conan blogundaki kılavuz bu yolu açıklıyor: godot-cpp 10 artık ConanCenter'da ve örnekte flecs ECS kütüphanesi sahnede 100 000 parçacığı yönetiyor.

Godot C++ koduyla nasıl genişler

Bir Godot projesi scene'lerden, node ağaçlarından oluşur; davranış ise node'a bağlanan script ile eklenir. C++ kodu iki şekilde eklenir: engine module motorun içinde derlenir, ancak tüm platformlar için kendi Godot derlemenizi gerektirir; GDExtension ise shared kütüphaneyi resmî Godot'a runtime sırasında yükler ve kararlı C arayüzüyle iletişim kurar.

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

Derleme, zor kısım

godot-cpp verbose C arayüzünü C++ API ile sarar. 10. sürümden itibaren tek bir release, Godot'un 4.3'ten itibaren tüm sürümleriyle çalışır; sürüm api_version option'ıyla seçilir ve eklenti üç target'tan birine derlenir. Dokümantasyon godot-cpp'yi git submodule olarak eklemeyi önerir, ama o zaman her proje her platform için kütüphaneleri kendi derler.

Conan bağımlılıkları üstlenir

ConanCenter'da godot-cpp recipe'si bu bindings'i sıradan bir pakete dönüştürür: api_version (4.3'ten 4.7'ye kadar, varsayılan 4.7) ve target Conan option'larıdır. Her kombinasyon bir kez derlenir ve sonra tüm projelere hizmet eder. ConanCenter'da 1 900'den fazla kütüphane vardır ve Conan hepsini aynı şekilde derler.

flecs ile 100 000 parçacık

Örnekte GDExtension, flecs üzerinde 100 000 parçacığı yöneten yeni bir Swarm node'u kaydeder: parçacıklar fareden kaçar ve kenarlara çarpar. ECS'de entity basit bir id'dir, component ona bağlı veridir, system ise tüm ilgili entity'ler üzerinden geçen bir fonksiyondur. Aynı türden component'ler bellekte birlikte saklanır, bu yüzden çok sayıda entity üzerinde gezinmek hızlıdır.

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

Her frame'de _process() flecs'e farenin konumunu aktarır, world.progress() ile system'leri çalıştırır ve konumları MultiMesh buffer'ına kopyalar: MultiMesh tek draw call'da bir mesh'in birçok instance'ını çizer, çünkü 100 000 parçacık için ayrı node fazla ağırdır. Sınıf GDREGISTER_RUNTIME_CLASS ile kaydedilir, yani editor'de yalnızca placeholder'dır.

Derleme tek komutla yapılır: conan build . --build=missing. Conan godot-cpp ve flecs'i bulur, hazır binary'leri ConanCenter'dan indirir ve eklentiyi derler. godot-cpp C++17 gerektirir, bu yüzden eski profile -s compiler.cppstd=17 eklenir.

SSiTech

SiTech — AI destekli web geliştirme

Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.