![835db1775e200298a16833f8c093c396.png](https://i-blog.csdnimg.cn/blog_migrate/a25e9047ad1f8d706eb46c3b4b3469aa.png)
大家好,笔者不才,又来划水了。
UE的材质系统对美术来说非常友好,但是不免会好奇其中的一些机制,好奇能不能自己用cpp实现一个Material。
正巧看了国外大佬的一篇文章,决定按其思路进行实现https://isaratech.com/ue4-programmatically-create-a-new-material-and-inner-nodes/
废话不多说 let‘s do it
首先我创建一个自己的插件,添加生成资源的按钮
![12ab1f91cc2e2444badeb2205c9cdcb7.png](https://i-blog.csdnimg.cn/blog_migrate/c23f4d5b2085856e778d129d87e7884b.png)
![1361fb8db8ba7615d794ee926f8849d0.png](https://i-blog.csdnimg.cn/blog_migrate/95f12fd029c3dc54c6a3d5654b1815e2.png)
然后再添加一个继承自Factory的MyMaterialFactory进行材质的创建以及一系列操作
![36f38b29d1b0ecdf425943dd668bc93d.png](https://i-blog.csdnimg.cn/blog_migrate/e3ca157d9a16967ad9668c62dafe403a.png)
覆写GetMenuCategories 将其添加在我们自定义的标签下
![d9f1f6c9e41a2dac60bc9683d3529558.png](https://i-blog.csdnimg.cn/blog_migrate/58e4bb8051b93585fec6f798c29d7619.png)
然后覆写 FactoryCreateNew 创建并编写我们的材质球
UE的材质系统对美术来说非常友好,但是不免会好奇其中的一些机制,好奇能不能自己用cpp实现一个Material。
![38e064c8d4c1d5e43a482dc556722383.png](https://i-blog.csdnimg.cn/blog_migrate/6830800bd2f8a24dd972d33e2c86c94b.png)
接着便是所见即所得生成diffuse表达式 并将其“Coordinates” 与“Multiply” 相连
![95b27b5965c9414dcdc70c042d323e80.png](https://i-blog.csdnimg.cn/blog_migrate/3f6f4de713bde7100c6a9b6b9d80ebc6.jpeg)
![4105a6c4960e1977971564cf3a99c215.png](https://i-blog.csdnimg.cn/blog_migrate/de6f523976b1f36452341c34473a3bd7.png)
这边也是同理,生成表达式,连接节点
![6c8d790112d38d13882f379020ae432c.png](https://i-blog.csdnimg.cn/blog_migrate/c00d4e6a6bee8c2ec31cf0e475980d02.jpeg)
![56f7983d4c2ef90896fe30e500ff8dbd.png](https://i-blog.csdnimg.cn/blog_migrate/f48a3333ec44d5869c2c26eb19c90963.jpeg)
![e7a0f3889736aebce893073ede1263c5.png](https://i-blog.csdnimg.cn/blog_migrate/85941242ad0e528936cd93a7f7cd534e.png)
最后收尾完成 我们就能看到编辑器中用cpp生成的材质了
![d551bed060b8a193d64325bda4bacae1.png](https://i-blog.csdnimg.cn/blog_migrate/b4dd59e6e309a8c9a51a34fdc6439f1b.jpeg)