UE4之替换多维子材质

多维子材质是指一个模型的不同部分分别用了不同的材质,在UE4中打开模型编辑器界面,就能看到模型的材质组成,如下图,在LOD0的Sections栏看到该模型(StarterContent中的SM_Door)由两个材质部分组成。

MaterialSlot表示该部分使用的某个材质槽的材质,材质槽可以由我们自己编辑,如下图,在默认材质槽后面又新建了一个材质槽,并命名为MySlot,只要将上面的MaterialSlot替换为MySlot就可以使用MySlot材质槽中的材质。获取和设置模型的材质就是通过修改材质槽的材质实现的。

像这种含多维子材质的模型,在编辑器中只要将材质拖到模型相应的部分就可以准确替换该部分的材质,但是在运行时无法检测到鼠标下对应的是哪部分的材质,因为在编辑器中有保存额外的数据用于检测,而运行时没有。

物体检测的数据都保存在FHitResult结构中,该结构中有个变量PhysMaterial,用于保存材质对应的物理材质,在物理仿真时会用到,测试后发现如果模型的不同部分包含不同的物理材质,返回的PhysMaterial相应变化 ,因此可以利用物理材质来实现多维子材质的替换。实现一个函数ReplaceMaterialUnderCursor(UMaterialInterface* InMaterial)用于替换材质,基本的思路是:

1、替换材质事件触发时通过GetHitResultUnderCursor检测鼠标下的组件,如果是UStaticMeshComponent就继续。

2、遍历该组件(模型)含有的材质个数,如果是1则使用SetMaterial(0, InMaterial),到此结束;如果超过1个继续。

3、保存组件的材质到数组中,用于完成后恢复材质;然后创建动态材质实例,并设置不同的物理材质,物理材质可以使用序号作为名称来区分,最后将材质实例赋予模型不同部分。

4、再次使用LineTraceSingle检

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值