コード例 #1
0
ファイル: Move.cs プロジェクト: wrongobject/3DMaze
    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);
    }
コード例 #2
0
ファイル: Maze.cs プロジェクト: wrongobject/3DMaze
    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;
        }
    }
コード例 #3
0
    /// <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);
        }
    }