Exemple #1
0
        public void Update()
        {
            // 未初始化则不创建(Engine要最先初始化)
            if (!Engine.Initialized || !ChunkManager.Initialized)
            {
                return;
            }

            //追踪player当前所处的chunk
            currentPos = Engine.PositionToChunkIndex(transform.position);

            if (currentPos.IsEqual(LastPos) == false)
            {
                ChunkManager.SpawnChunks(currentPos.x, currentPos.y, currentPos.z);
            }

            LastPos = currentPos;
        }
Exemple #2
0
        public void Update()
        {
            // 检测chunk存在
            GameObject chunkObject = Engine.PositionToChunk(transform.position);

            if (chunkObject == null)
            {
                return;
            }

            // 获取体素信息
            Chunk     chunk      = chunkObject.GetComponent <Chunk>();
            Index     voxelIndex = chunk.PositionToVoxelIndex(transform.position);
            VoxelInfo voxelInfo  = new VoxelInfo(voxelIndex, chunk);

            // 获取拷贝
            GameObject voxelObject = Instantiate(Engine.GetVoxelGameObject(voxelInfo.GetVoxel())) as GameObject;

            VoxelEvents events = voxelObject.GetComponent <VoxelEvents>();

            if (events != null)
            {
                //进入某体素
                if (chunk != LastChunk || voxelIndex.IsEqual(LastIndex) == false)
                {
                    events.OnBlockEnter(this.gameObject, voxelInfo);
                }
                //停留
                else
                {
                    events.OnBlockStay(this.gameObject, voxelInfo);
                }
            }

            LastChunk = chunk;
            LastIndex = voxelIndex;

            Destroy(voxelObject);
        }