You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unity C#脚本中为代码创建的GameObject设置材质?

解决Unity脚本动态创建物体并设置材质的问题

嘿,这事儿不难,我帮你一步步搞定!你已经成功用脚本创建了立方体,现在只需要给它的渲染组件挂上你那red材质就行,具体分两种常用方式:

方式一:通过编辑器拖拽赋值(推荐)

这种方法更直观,不需要把材质放在特定文件夹里:

  1. 在你的脚本顶部添加一个可序列化的字段,用来关联你的red材质
  2. 在Start方法里获取立方体的Renderer组件,把材质赋值给它

修改后的代码如下:

using UnityEngine;

public class CreateCubeWithMaterial : MonoBehaviour
{
    // 在Unity编辑器里把你的red材质拖到这个字段上
    [SerializeField] private Material redMaterial;

    void Start()
    {
        GameObject cube2 = GameObject.CreatePrimitive(PrimitiveType.Cube);
        cube2.transform.position = new Vector3(12f, -3f, -82.5f);
        
        // 获取立方体的Renderer组件
        Renderer cubeRenderer = cube2.GetComponent<Renderer>();
        // 给Renderer设置材质
        if (cubeRenderer != null && redMaterial != null)
        {
            cubeRenderer.material = redMaterial;
        }
    }
}

方式二:通过Resources加载材质

如果你想完全通过代码加载(比如材质放在Resources/Materials文件夹下),可以这么写:

using UnityEngine;

public class CreateCubeWithMaterial : MonoBehaviour
{
    void Start()
    {
        GameObject cube2 = GameObject.CreatePrimitive(PrimitiveType.Cube);
        cube2.transform.position = new Vector3(12f, -3f, -82.5f);
        
        Renderer cubeRenderer = cube2.GetComponent<Renderer>();
        if (cubeRenderer != null)
        {
            // 从Resources文件夹加载名为"red"的材质
            Material redMaterial = Resources.Load<Material>("Materials/red");
            if (redMaterial != null)
            {
                cubeRenderer.material = redMaterial;
            }
            else
            {
                Debug.LogError("找不到red材质,请检查路径是否正确!");
            }
        }
    }
}

小提示

  • 如果你给物体用了多个材质,可以用cubeRenderer.materials数组来设置,不过单个材质用material就够了
  • 记得加空值判断,避免因为组件或材质找不到导致报错

内容的提问来源于stack exchange,提问作者jonesmax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:58:34