【杂谈教程】如何优雅的写出你的插件,编写Inspector属性

在前不久,官方上线了自定义动作与自定义插件的功能,当时我立刻上手了,开始编写一些自己项目能够用到的插件,但是很快我发现了一个问题,即我有时候在不同的情况下需要更多不同的参数,看上去非常混乱,使用@export_group()导出分组或许能解决一些问题,但是有时候编辑又会感觉频繁展开和收起选项卡十分麻烦,这个时候我注意到官方的动作很多都有选择不同选项时会出现不同参数的功能,于是开始学习如何能达到这样的效果。

现在假设我们正在编写一个对话的插件
首先你需要在代码的开头写上
@tool
当然,这是插件的基础,接下来我们需要声明一个变量,我们可以先使用布尔值

@export var is_dialogue : bool= false

OK,我们现在有了一个控制开关,现在我们需要里面的属性

@export_multiline var text : String

打开插件看看,现在是什么状态


非常好,我们的属性都显示在上面了,接下来是重点,我们先声明另外一个变量

var contorl_dialogue : bool

这个变量的类型和我们一开始的is_dialogue 一致

然后修改最开始的变量

@export var is_dialogue : bool= false:
	set(v):
		contorl_dialogue = v
		notify_property_list_changed()
	get:
		return contorl_dialogue

然后加上方法

func _validate_property(prop: Dictionary) -> void:
	match prop.name:
		"character_name":
			if is_dialogue == false:
				prop.usage &= ~PROPERTY_USAGE_EDITOR
		"text":
			if is_dialogue == false:
				prop.usage &= ~PROPERTY_USAGE_EDITOR

现在让我们看看效果



不错,这样就完成了我们的需求,只有有选项时才会显示这个代码块,当然你可以换成枚举

enum Type {
	dog,
	cat,
	cow
}

配合前文的声明和条件判断,可以做到一样的效果,使用得当可以大大提升你的插件的可读性与整洁程度

1 个赞