Unity 有关属性的反射获取及赋值问题

数据类:

public class TestVaule
{

    /// <summary>
    /// 不可赋值
    /// </summary>
    public string m_Value1 { get { return "111"; } }

    /// <summary>
    /// 可赋值
    /// </summary>
    public string m_Value2 { get; private set; }

    /// <summary>
    /// 可赋值
    /// </summary>
    public string m_Value3
    {
        get { return m_Value3; }
        set { m_Value3 = value; }
    }
}

 

测试类:

    void Start()
    {
        TestVaule mm = new TestVaule();

        Type T = mm.GetType();

        var FileSingleInfo = T.GetProperty("m_Value1", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

        string Temp = "ppp";

        //这里是无法赋值的,但是可以获取,m_Value2 m_Value3 均可以通过GetValue,及SetValue 赋值
        FileSingleInfo.SetValue(mm, Temp);

    }

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中实现逼真地面反射效果需要使用反射贴图和反射相关的Shader。以下是一些示例代码和步骤: 1. 创建反射贴图并将其应用到反射面 - 创建一个Render Texture作为反射贴图。 - 在场景中创建一个平面或墙面,作为反射面。 - 将反射贴图应用到反射面的Material中。 2. 编写反射Shader - 创建一个新的Shader,例如Reflective.shader。 - 在Shader中添加一个反射贴图的变量: ``` Properties { _ReflectiveTex ("Reflective Texture", 2D) = "white" {} } ``` - 在Shader中添加反射贴图的采样: ``` sampler2D _ReflectiveTex; ``` - 在Shader中添加反射计算的代码: ``` half4 refl = tex2Dproj(_ReflectiveTex, UNITY_PROJ_COORD(IN.screenPos)); o.Albedo = refl.rgb; o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv)); o.Alpha = refl.a; ``` 3. 在反射面上应用反射Shader - 将反射面的Material切换为新创建的Reflective.shader。 - 将反射贴图赋值给Reflective.shader中的_ReflectiveTex属性。 4. 编写脚本代码启用反射 - 在脚本中获取反射面的材质对象。 - 设置材质对象的渲染质量为高质量。 - 启用反射贴图。 ``` public class ReflectiveSurface : MonoBehaviour { public Material reflectiveMaterial; void Start () { reflectiveMaterial.SetFloat("_Mode", 3); // 设置渲染质量为高质量 reflectiveMaterial.SetTexture("_ReflectiveTex", Camera.main.targetTexture); // 启用反射贴图 } } ``` 以上是一个基本的反射实现过程,需要根据具体场景和需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值