使用代码将材料应用于Unity中的每个其他对象

时间:2018-08-12 17:28:07

标签: c# if-statement unity3d

我试图连续生成8个四边形,然后将材质分配给其他每个四边形,因此它看起来像棋盘图案。我已经完成了代码,但是我想知道是否有一种方法可以简化它。因此,如果要在不同的位置创建更多的四边形(例如,我想在已经创建的四边形上方创建一行),则重复的代码就不会很长。

    for (i = 0; i < 8; i++)
    {
        GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad);
        quad.transform.position = new Vector3(i * 1, 0, 0);

        if (i == 1)
        {
            MeshRenderer mesh = quad.GetComponent<MeshRenderer>();
            mesh.material = (Material)Resources.Load("Charcoal");
        }

        if (i == 3)
        {
            MeshRenderer mesh = quad.GetComponent<MeshRenderer>();
            mesh.material = (Material)Resources.Load("Charcoal");
        }

        if (i == 5)
        {
            MeshRenderer mesh = quad.GetComponent<MeshRenderer>();
            mesh.material = (Material)Resources.Load("Charcoal");
        }

        if (i == 7)
        {
            MeshRenderer mesh = quad.GetComponent<MeshRenderer>();
            mesh.material = (Material)Resources.Load("Charcoal");
        }

        else
        {
            MeshRenderer mesh = quad.GetComponent<MeshRenderer>();
            mesh.material = (Material)Resources.Load("Bone");
        }

    }

我的代码检查四边形的位置是否等于1、3、5或7,并应用我的材料,然后它使用我的另一种材料填充不在这些位置的四边形。

2 个答案:

答案 0 :(得分:2)

只需检查i是否为奇数。如果是的话,用木炭油漆。像这样:

for (i = 0; i < 8; i++)
{
    GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad);
    quad.transform.position = new Vector3(i * 1, 0, 0);
    MeshRenderer mesh = quad.GetComponent<MeshRenderer>();        
    if (i%2 != 0) // if i is odd
    {
        mesh.material = (Material)Resources.Load("Charcoal");
    } else // if i is even
    {
        mesh.material = (Material)Resources.Load("Bone");
    }
}

答案 1 :(得分:2)

创建Gamobject预制件 Quad ,并通过添加脚本 board 在场景中添加空游戏对象。现在,将此Quad预制件分配给Board脚本公共游戏对象,然后统一运行它,它将生成检查板,还要考虑奇/偶逻辑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class board : MonoBehaviour {

// Use this for initialization
public GameObject quad;
void Start () {
    for(int j=-4;j<4;j++)
    {
        for(int i=-4;i<4;i++)
        {
            var gameObject=Instantiate(quad,new Vector3(i,j,0),Quaternion.identity);

            if (j % 2 == 0)
            {
                if (i % 2 == 0)
                    gameObject.GetComponent<MeshRenderer>().material = (Material)Resources.Load("bone");
                else
                    gameObject.GetComponent<MeshRenderer>().material = (Material)Resources.Load("Charcoal");
            }
            else
            {
                if (i % 2 != 0)
                    gameObject.GetComponent<MeshRenderer>().material = (Material)Resources.Load("bone");
                else
                    gameObject.GetComponent<MeshRenderer>().material = (Material)Resources.Load("Charcoal");
            }
        }
    }
}

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

}
}

结果场景将预制件分配为 enter image description here

输出结果检查器

enter image description here