c# - Unity C#为什么预制子的颜色不会改变
问题描述
在我的统一项目中,我有一个带有许多子对象的预制件。如果我点击一个按钮,我希望预制件中的一些子对象改变它们的颜色。不幸的是,我的代码没有任何反应。
这是我的代码:
public class ColorChanger : MonoBehaviour
{
public GameObject preFabParent;
public GameObject preFabChildTarget
public Material newColor;
Renderer[] prefabChildrenParent, prefabChildren;
bool changePrefabColor;
void Start()
{
prefabChildrenParent = preFabParent.GetComponentsInChildren<Renderer>();
prefabChildren = preFabChildTarget.GetComponentsInChildren<Renderer>();
}
void Update()
{
// bool is changed by a button click:
if(changePrefabColor) ChangeColor();
}
void ChangeColor()
{
// Now I want that all the child objects from the prefabChildTarget get the new color.
foreach(Renderer child in prefabChildren)
{
var mats = new Material[child.sharedMaterials.Length];
for(var j = 0; j < child.sharedMaterials.Length, j++)
{
mats[j] = newColor;
}
child.sharedMaterials = mats;
}
}
}
我必须改变什么才能使我的代码正常工作?不幸的是,我找不到适合我的解决方案。
解决方案
看看你的错误是怎样的
Not allowed to access Renderer.materials on prefab object. Use Renderer.sharedMaterials instead
我很确定您引用的是资产文件夹中的对象,而不是场景中的实例化对象。确保您引用了场景中的对象,问题应该得到解决。
推荐阅读
- node.js - How can I refer to subdocuments in my Model in mongoose?
- typescript - Error [ERR_MODULE_NOT_FOUND]: Cannot find module (TypeScript/TypeOrm)
- javascript - axios 下载每个带有 txt 扩展名的文件
- python - Pytest and concurrent.futures interacting strangely
- r - 如何删除R中数字之间的小数点
- ruby - Stripe API - 按给定顺序列出元素(asc/desc)
- r - 如何编写函数来返回绘图和对象(data.frame)?
- javascript - 二级下拉菜单在选择时显示 WP 帖子
- javascript - 需要帮助弄清楚这个 js 行是关于什么的
- java - 在 4xx 和 5xx 的情况下 Spring Cloud Gateway 回退