首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从代码创建材质并将其指定给对象

从代码创建材质并将其指定给对象
EN

Stack Overflow用户
提问于 2016-10-08 16:09:50
回答 1查看 10.8K关注 0票数 1

我是一个非常新的Unity3d,我有一个预制件,其中包含6个四边形,使它成为一个立方体.I想要添加图像纹理的不同面的立方体。我正在从网络服务获得图像,所以,我必须添加或更改脚本中的材料。我面临的问题是,我无法在gameObject中找到材料属性。

我试过下面的代码:

代码语言:javascript
复制
using UnityEngine;
using System.Collections;

public class shelfRuntime : MonoBehaviour {
    public GameObject bottle;
    public GameObject newBottle;
    // Use this for initialization
    void Start () {

            iterateChildren(newBottle.transform.root);

        GameObject rocketClone = (GameObject)Instantiate(bottle, bottle.transform.position, bottle.transform.rotation);
        rocketClone.transform.localScale += new Vector3(1, 1, 1);
        GameObject newBottleInMaking = (GameObject)Instantiate(newBottle, newBottle.transform.position, newBottle.transform.rotation);

        Transform[] allChildren = newBottleInMaking.GetComponentsInChildren<Transform>();
        foreach (Transform child in allChildren)
        {

            // do whatever with child transform here
        }


    }
    void iterateChildren(Transform trans)
    {
        Debug.Log(trans.name);
        if (trans.name == "Back") {
            var ting = trans.gameObject.GetComponent<Renderer>();
        //   trans.renderer.material  // there is no material property here 

        }

        // Do whatever logic you want on child objects here
        if (trans.childCount == 0) return;

        foreach (Transform tran in trans)
        {
            iterateChildren(tran);
        }
    }

    // Update is called once per frame
    void Update () {

    }
}

如何将材质设置为四边形?在我的预制板里有6个四边形。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-08 16:25:21

您不能再在Unity中直接访问某些组件。必须使用GetComponent获取零部件(Renderer),然后从其中访问材质。

代码语言:javascript
复制
trans.renderer.material = ....

应更改为

代码语言:javascript
复制
trans.GetComponent<Renderer>().material = yourNewMaterial;

最后,当在Unity中创建立方体或四边形时,MeshRenderer会自动附加到它们上,而不是Renderer。因此,使用GetComponent<Renderer>()可能会出现运行时错误。请改用MeshRenderer

代码语言:javascript
复制
trans.GetComponent<MeshRenderer>().material = yourNewMaterial;

在运行时创建材料的

代码语言:javascript
复制
Material myNewMaterial = new Material(Shader.Find("Standard"));

下面的示例将创建一个材质,将标准着色器指定给它,然后在将其应用于GameObject之前将纹理更改为myTexture变量中的纹理。

代码语言:javascript
复制
public Texture myTexture;
void Start()
{
    //Find the Standard Shader
    Material myNewMaterial = new Material(Shader.Find("Standard"));
    //Set Texture on the material
    myNewMaterial.SetTexture("_MainTex", myTexture);
    //Apply to GameObject
    trans.GetComponent<MeshRenderer>().material = myNewMaterial;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39930186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档