unity3d - 在 MeshRenderer.materials 中更改一种材质并且不实例化所有材质
问题描述
我需要更改,因此只在材料数组中实例化一种材料。目前,如果我访问MeshRenderer.materials
,unity 会返回一组实例化材料。
此函数自动实例化材质并使它们对于此渲染器是唯一的。(文档)
关于如何实现这一目标的任何想法?
有关我正在尝试做的事情的更多信息:
我有一个在场景中经常使用的带有 10 个材质槽的对象。
前 5 个插槽使用 Material-A,它使用 GPU 实例化,颜色作为实例化属性,后 5 个插槽使用 Material-B,它不使用 GPU 实例化,并且在运行时分配其纹理。
因此,当在运行时将纹理分配给后 5 个插槽时,它会破坏 GPU 实例化前 5 个插槽的目的。
除了使用 Texture2DArray 的 GPU Instance Material-B 之外,还有其他方法吗?
解决方案
"Material-A"
每当我更改 Material-B 的纹理时,通过将其名称中包含的材质替换Resources.Load("Material-A") as Material
为引用原始 Material-A 来解决此问题。
var mats = meshRenderer.materials;
mats[materialIndex].mainTexture = texture;
for (var i = 0; i < mats.Length; i++)
if (mats[i].name == "Material-A (Instance)")
mats[i] = Resources.Load("Material-A") as Material;
meshRenderer.materials = mats;
如果您有更好的方法,我将不胜感激...
推荐阅读
- sql - 如何限制在我的 SQL Server 函数中返回的 ROWS 数量?
- css - 修复使用 iframe css 响应技巧时的填充问题
- drupal - GraphQl 查询与 gatsby-source-drupal 没有关系的节点图像 url
- twincat - 如何确定在给定持续时间内事件的最大第 n 次发生?
- python - 在 pandas 数据框中组合具有相似值范围的行
- javascript - 使用 NodeJS API 调用上传 MP4 时 Azure 视频索引器停止
- html - 为什么超链接在 asp.net gridview 的前几行中不起作用
- linux - Docker(撰写):没有 sudo 的连接被拒绝
- excel - 通过在excel中自动为单元格着色来创建一个矩形
- r - 我如何使用 R 中的给定格式从 chr 转到 dttm