我试图连续生成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,并应用我的材料,然后它使用我的另一种材料填充不在这些位置的四边形。
答案 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 () {
}
}
输出结果检查器