首页 > 解决方案 > 如何通过 Unity 中的脚本访问我的 Bird 的 Base Map 组件?

问题描述

我在搅拌机中为我的鸟设置了动画,并将其导入到 Unity。我想通过脚本更改鸟的颜色,以便可以从设置面板更改它。

我注意到有一个 .png 文件附加到鸟网格的材质组件下的表面输入组件的 Base Map。(附上下面的屏幕截图)。如果我手动更改 .png pic 鸟的颜色随着我想要的颜色变化而变化。我想通过脚本来改变它,所以我写了一个小脚本如下:

public class BirdMeshColor : MonoBehaviour
{
    // Start is called before the first frame update
    
    void Start()
    {    
        MeshRenderer meshRenderer = GetComponent<MeshRenderer>();    
        meshRenderer.material.SetTexture("_BaseMap", Resources.Load<Texture2D>("BirdColorsPics/greenBird.png"));

    }
}

但我得到一个错误说

“没有'MeshRenderer'附加到“BirdMesh”游戏对象,但脚本正在尝试访问它。您可能需要将MeshRenderer添加到游戏对象“BirdMesh”

我也尝试在附加到主鸟的脚本中运行它,但仍然得到相同的输出在 Unity 编辑器中看到的鸟的属性 1 ,我不知道我在做什么错。 在 Unity 编辑器 2 中看到的鸟的属性

标签: c#unity3dmesh

解决方案


“没有'MeshRenderer'附加到“BirdMesh”游戏对象,但脚本正在尝试访问它。您可能需要将MeshRenderer添加到游戏对象“BirdMesh”

正如错误消息所解释的,您尝试获取MeshRenderer组件,但您的对象没有MeshRenderer,因此您收到错误消息。

要解决这个问题,您可以简单地获取实际附加到您的鸟的组件,在您的情况下将是SkinnedMeshRenderer.

例子:

void Start() {    
    SkinnedMeshRenderer skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer>();    
    skinnedMeshRenderer.material
    .SetTexture("_BaseMap", Resources.Load<Texture2D>("BirdColorsPics/greenBird"));
}

推荐阅读