【Unity开发】在Unity中使用属性Property

文章讲述了在Unity中如何通过C#的属性Property实现值过滤并同步材质Shader参数,遇到的问题是Inspector中私有字段不可见。解决方案是引入SetProperty插件,通过SerializeField和SetProperty属性使得私有字段在Inspector中可见并执行set操作。
摘要由CSDN通过智能技术生成

在Unity中使用属性Property

C#中的属性Property

属性,即set、get访问器,一般起到过滤异常值或者在字段赋值时执行某些操作的作用。如下代码描述了一个私有字段_pointSize和其属性pointSize。

private float _pointSize = 0.05f;
public float pointSize {
    set { _pointSize = value;
        _pointSize = Mathf.Max(0, _pointSize);
        _pointSize = Mathf.Min(0.02f, _pointSize);
        material.SetFloat("_PointSize", _pointSize);
    }
    get { return _pointSize; }
}

问题的出现

想实现的功能是,在对pointSize赋值的同时对值进行过滤,并且同时修改某材质的shader参数。

目前来说,如果是在代码中修改pointSize值的话,是可以实现功能的,但是同时为了方便调试,又希望可以在Inspector中修改参数的时候生效。

但是,私有字段_pointSize在Inspector中是不显示的,为使其显示,可在上方添加:

[SerializeField]

这样虽然可以显示,但显示的只是私有字段_pointSize,在Inspector修改其值的时候并不会执行set访问器里的代码。

问题的解决

经查阅资料,可通过添加SetProperty插件解决:

插件下载

  1. 网址:https://github.com/LMNRY/SetProperty
  2. 点击Code-Download ZIP下载压缩包
    插件下载

插件使用

  1. 在unity中新建一SetProperty (任意名字皆可)文件夹
    在这里插入图片描述

  2. 将解压得到的所有文件拷贝入新建的文件夹
    在这里插入图片描述

  3. 使用SetProperty 属性说明实现功能:在代码前添加SetProperty 属性说明,即可实现在Inspector中访问属性

[SerializeField, SetProperty("pointSize")]//如果要显示私有字段或属性,需要加上这个
private float _pointSize = 0.05f;
public float pointSize {
    set { _pointSize = value;
        _pointSize = Mathf.Max(0, _pointSize);
        _pointSize = Mathf.Min(0.02f, _pointSize);
        material.SetFloat("_PointSize", _pointSize);
    }
    get { return _pointSize; }
}

原理

好像原理挺简单,但鄙人颇懒,不看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值