![fb0b6793355b89c145cc29b4b6ddb1e9.png](https://img-blog.csdnimg.cn/img_convert/fb0b6793355b89c145cc29b4b6ddb1e9.png)
在解决这个问题之前,首先我们应该知道。
怎么用一个bool值让其他属性不可编辑~~
![09cd19b99b7a514871f83043c92b02f3.png](https://img-blog.csdnimg.cn/img_convert/09cd19b99b7a514871f83043c92b02f3.png)
其中BlueprintReadWrite可以让蓝图生成set方法和get方法
EditAnywhere可以让蓝图可编辑
Category可以让这个变量放在BUFF目录下面,方便搜索。
meta也就是元数据啦
里面的EditCondition可以传进去一个布尔值,让蓝图变量变得灰色不可编辑。
![33b7ffd2eca9da3aaf5cb85dc0bcc3b2.png](https://img-blog.csdnimg.cn/img_convert/33b7ffd2eca9da3aaf5cb85dc0bcc3b2.png)
就像最下面的那个一样。
注意:
引号要加上,里面就是bool值变量的变量名了
做完了上面那一步已经就可以了,但是要追求完美的话可以用枚举来控制它。
我们首先把之前的删掉。变成
![b8251e1add0a9c053142dd8370981b3c.png](https://img-blog.csdnimg.cn/img_convert/b8251e1add0a9c053142dd8370981b3c.png)
然后在我们的类的public:下面输入
![ad16da3151473d7a0868295303c25ae2.png](https://img-blog.csdnimg.cn/img_convert/ad16da3151473d7a0868295303c25ae2.png)
这个CanEditChange函数就专门用来搞编辑器的。
问,
为什么要加#if WITH_EDITOR和#endif呢?
我们的这些代码不需要打包以后存在,所以这样写就是代表仅编辑器模式下的代码。
CanEditChange函数从一个父类里面重载。UDataObject这个类。
不过咱们通常不需要继承它也行。
override意思是重载的意思。说明这是一个父类拥有的函数。
写完之后,我们找到cpp文件,里面加上:
![46ab3d4508c192c8f2cb8ae3cc6a49a9.png](https://img-blog.csdnimg.cn/img_convert/46ab3d4508c192c8f2cb8ae3cc6a49a9.png)
UBUFF_Damage是我的类型
Damage是我的枚举类型
E_CustomDamage是枚举里面的一个成员
ImpactBUFF_Name是我需要禁止编辑的类的属性。
其他的不需要动,给你们看看我的枚举:
![0c8595725e9e37f420f9681e43d64601.png](https://img-blog.csdnimg.cn/img_convert/0c8595725e9e37f420f9681e43d64601.png)
只要加上上面那两个特殊的步骤就可以通过枚举来控制变量的可编辑啦!
参考:
1:http://benhumphreys.ca/unreal/uproperty-edit-condition-can-edit-change/
2:https://note.youdao.com/ynoteshare1/index.html?id=ece6e1e0e63f670f4cd882aeeef16fb5&type=note