如何在 Unity 中通过脚本访问我的 Bird 的底图组件?

How to access the Base Map Component of my Bird via script in Unity?

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

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

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”

我也尝试 运行 在附加到主鸟的脚本中使用它,但仍然得到相同的输出 我不知道我做错了什么。

"There is no 'MeshRenderer' attached to the "BirdMesh" game object, but a script is trying to access it. You probably need to add a MeshRenderer to the game object "BirdMesh"

正如错误消息所解释的那样,您尝试获取 MeshRenderer component, but your object doesn't have a MeshRenderer,因此您遇到了错误。

要解决这个问题,您只需获取实际附加到您的鸟身上的组件,在您的情况下就是 SkinnedMeshRenderer.

示例:

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