public void Init() { current = back = front = 0; int x, y, z; _maze.TransIndex(0, out x, out y, out z); transform.position = new Vector3(x, y, z); }
private void OnDrawGizmos() { Vector3 lastPoint = Vector3.zero; Color defaultColor = Gizmos.color; for (int j = 0; j < maze.Used.Count; j++) { int index = maze.Used[j]; if (index < 0) { lastPoint = -Vector3.one; continue; } int _x, _y, _z; maze.TransIndex(index, out _x, out _y, out _z); Vector3 center = new Vector3(_x, _y, _z) * scale; if (index == 0) { Gizmos.color = Color.red; } else if (index == maze.Size - 1) { Gizmos.color = Color.green; } else { Gizmos.color = defaultColor; } Gizmos.DrawSphere(center, 0.1f); if (lastPoint == -Vector3.one) { lastPoint = center; continue; } Vector3 half = (lastPoint + center) * 0.5f; Gizmos.color = Color.yellow; Gizmos.DrawLine(lastPoint, half); Gizmos.color = Color.blue; Gizmos.DrawLine(half, center); Gizmos.color = defaultColor; lastPoint = center; } }
/// <summary> /// 建立立方体mesh /// </summary> void BuildFullMesh() { int x, y, z; Vector3 offset = -Vector3.one * 0.5f * _scale; int _x = _maze.MaxX + 1; int _y = _maze.MaxY + 1; int _z = _maze.MaxZ + 1; int _yz = _y * _z; int size = _x * _y * _z; for (int i = 0; i < size; i++) { x = i / _yz; y = i % _yz / _z; z = i % _z; Vector3 center = new Vector3(x, y, z) * _scale; _vertex.Add(center + offset); _uv.Add(new Vector2((float)x / (_x - 1), (float)z / (_z - 1))); } for (int i = 0; i < _maze.Size; i++) { _maze.TransIndex(i, out x, out y, out z); //l:left, r:right, //d:down, u:up //b:back, f:front int lbd = x * _y * _z + y * _z + z; int rbd = lbd + 1 * _y * _z; int lbu = lbd + 1 * _z; int rbu = lbd + 1 * _y * _z + 1 * _z; //back face if (i != 0) {//entry _triangle.Add(lbd); _triangle.Add(lbu); _triangle.Add(rbd); _triangle.Add(rbd); _triangle.Add(lbu); _triangle.Add(rbu); } int lfd = lbd + 1; int lfu = lbd + 1 + _z; //left face _triangle.Add(lbd); _triangle.Add(lfd); _triangle.Add(lfu); _triangle.Add(lbd); _triangle.Add(lfu); _triangle.Add(lbu); int rfd = rbd + 1; //down face _triangle.Add(lbd); _triangle.Add(rbd); _triangle.Add(lfd); _triangle.Add(rbd); _triangle.Add(rfd); _triangle.Add(lfd); int rfu = rfd + _z; //right face _triangle.Add(rbd); _triangle.Add(rbu); _triangle.Add(rfu); _triangle.Add(rfu); _triangle.Add(rfd); _triangle.Add(rbd); //front face if (i != _maze.Size - 1) {//safe out _triangle.Add(lfu); _triangle.Add(lfd); _triangle.Add(rfd); _triangle.Add(rfd); _triangle.Add(rfu); _triangle.Add(lfu); } //up face _triangle.Add(lbu); _triangle.Add(lfu); _triangle.Add(rfu); _triangle.Add(rfu); _triangle.Add(rbu); _triangle.Add(lbu); } }