Godot4.0 GDExtension 配置VisualStudio方法

文章详细介绍了Godot4.1版本中GDExtension与VisualStudio配置的更新,包括scons命令的参数变化,库目标的更新,包含目录的调整,运行库的选择以及源文件头文件的命名更改。同时强调了类注册方式和gdextension文件的创建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:

这篇文章是基于我之前一篇文章所写,两者方式差不多但有细微差别,请先阅读:Godot引擎Gdnative配置VisualStudio的方法 (c++)_SCLchuck的博客-优快云博客

更新:

4.1版本配置梳理以及配置工具:

Godot4.1 GDExtension 配置VisualStudio方法梳理-优快云博客

差别:

项目配置:

1:

        在使用scons命令生成godot-cpp的lib库时,需要注意

    scons platform=<platform> generate_bindings=yes -j<x> bits=<nn> target=<mm>

        注意target中的mm,从原先的debug与release已经变成了editor,template_debug,template_release,可以自己吧项目的debug配置等名字改为对应的。

2:

        现在的包含目录发生了改变:

        

3:

        不管你用的什么配置,请选择运行库为/MD,否则会出现:

        检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2””。

 使用:

1:

        源文件头文件名字统一改为  register_type

        用于注册的CPP代码已经改为:

#include "register_types.h"

#include <gdextension_interface.h>
#include <godot_cpp/core/defs.hpp>
#include <godot_cpp/core/class_db.hpp>
#include <godot_cpp/godot.hpp>

#include "gdexample.h"

using namespace godot;

void initialize_example_module(ModuleInitializationLevel p_level) {
	if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
		return;
	}
    
    //你要注册的类
	ClassDB::register_class<GDExample/*类名*/>();
}

void uninitialize_example_module(ModuleInitializationLevel p_level) {
	if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
		return;
	}
}

extern "C" {
	// Initialization.
	GDExtensionBool GDE_EXPORT example_library_init(const GDExtensionInterface *p_interface, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) {
		godot::GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization);

		init_obj.register_initializer(initialize_example_module);
		init_obj.register_terminator(uninitialize_example_module);
		init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);

		return init_obj.init();
	}
}

        并且需要加入头文件:

#ifndef GDEXAMPLE_REGISTER_TYPES_H
#define GDEXAMPLE_REGISTER_TYPES_H

void initialize_example_module();
void uninitialize_example_module();

#endif // GDEXAMPLE_REGISTER_TYPES_H

 2:

        使用时需要手动创建后缀名为gdextension的文件,内容为:

        最终可以在节点目录找到:

 其他:

上图中GDExample类的代码:

cpp:

#include "gdexample.h"
#include <godot_cpp/core/class_db.hpp>

using namespace godot;

void GDExample::_bind_methods() {
}

GDExample::GDExample() {
	// initialize any variables here
	time_passed = 0.0;
}

GDExample::~GDExample() {
	// add your cleanup here
}

void GDExample::_process(float delta) {
	time_passed += delta;

	Vector2 new_position = Vector2(10.0 + (10.0 * sin(time_passed * 2.0)), 10.0 + (10.0 * cos(time_passed * 1.5)));

	set_position(new_position);
}

 .h:

#ifndef GDEXAMPLE_H
#define GDEXAMPLE_H

#include <godot_cpp/classes/sprite2d.hpp>

namespace godot {

	class GDExample : public Sprite2D {
		GDCLASS(GDExample, Sprite2D)

	private:
		float time_passed;

	protected:
		static void _bind_methods();

	public:
		GDExample();
		~GDExample();

		void _process(float delta);
	};

}

#endif

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值