我正在学习C#的统一性,可以使用一些指针。
我正在关注catlikecoding hex map教程,但我已经按照自己的方式修改了网格。
http://catlikecoding.com/unity/tutorials/hex-map-1/
我的目标是从7 * 7网格开始创建一个正方形金字塔。我正在使用预制飞机
如何对CreateCell
循环函数设置限制,以便在满足以下表达式时不会创建具有(x,y)坐标的单元格
x + y > n - 1 where n = grid size (for example (6,1) or (5,6)
我已经到了创造一个平面菱形,地平面下面有不受欢迎的平面。
脚本如下。
public class HexGrid:MonoBehaviour {
public int width = 7;
public int height = 7;
public int length = 1;
public SquareCell cellPrefab;
public Text cellLabelPrefab;
SquareCell[] cells;
Canvas gridCanvas;
void Awake () {
gridCanvas = GetComponentInChildren<Canvas>();
cells = new SquareCell[height * width * length];
for (int z = 0 ; z < height; z++) {
for (int x = 0; x < width; x++) {
for (int y = 0; y < length; y++)
CreateCell(x, z, y);
}
}
}
void CreateCell(int x, int z, int y) {
Vector3 position;
position.x = x * 10f ;
position.y = ((y + 1) - (x + z)) * 10f + 60f;
position.z = z * 10f ;
Cell cell = Instantiate<Cell>(cellPrefab);
cell.transform.SetParent(transform, false);
cell.transform.localPosition = position;
Text label = Instantiate<Text>(cellLabelPrefab);
label.rectTransform.SetParent(gridCanvas.transform, false);
label.rectTransform.anchoredPosition =
new Vector2(position.x, position.z);
label.text = x.ToString() + "\n" + z.ToString();
}
}
到目前为止
答案 0 :(得分:0)
快速解决方案是在创建单元格的代码部分之前添加if
语句。在这种情况下,方法CreateCell()
。 if语句应该在代码中有你的逻辑。您还必须为要检查的大小创建两个变量。例如:
public int tempX;
public int tempY;
void Awake () {
gridCanvas = GetComponentInChildren<Canvas>();
cells = new SquareCell[height * width * length];
for (int z = 0 ; z < height; z++) {
for (int x = 0; x < width; x++) {
for (int y = 0; y < length; y++)
{
if (x + y < (tempX + tempY) - 1)
{
CreateCell(x, z, y);
}
}
}
}
}