예제 #1
0
    private void OnUpdate()
    {
        Thread.Sleep(1000);
        while (isthreadStart)
        {
            if (threadStatus == FogBlendingThreadStatus.Update)
            {
                //Debug.Log("正在更新战争迷雾");

                // 战争迷雾表示层
                ClearVisibledRegion();
                RevalMap();
                GeneratePassedRegion();
                //Debug.Log("更新表示层完成");

                // 战争迷雾逻辑层
                UpdateUnitVisibleStatus();
                //Debug.Log("更新逻辑层");

                // 更新人物在小地图上的点
                ClearMinMap();
                DrawMinMap();
                //Debug.Log("更新小地图");

                threadStatus = FogBlendingThreadStatus.Finished;
            }
            Thread.Sleep(100);
            //Debug.Log("战争迷雾休眠中");
        }
    }
예제 #2
0
    private void OnUpdate()
    {
        Thread.Sleep(1000);
        while (isthreadStart)
        {
            if (threadStatus == FogBlendingThreadStatus.Update)
            {
                // 战争迷雾表示层
                ClearVisibledRegion();
                RevalMap();
                GeneratePassedRegion();
                //Debug.Log("更新表示层完成");

                // 战争迷雾逻辑层
                UpdateUnitVisibleStatus();
                //Debug.Log("更新逻辑层");

                // 更新人物在小地图上的点
                ClearMinMap();
                DrawMinMap();
                //Debug.Log("更新小地图");

                // 对迷雾贴图进行高斯模糊
                GaussianBlur();

                // 将当前的迷雾状态保存到贴图的ba通道(分别对应rg通道)
                SaveCurrentFogState();

                threadStatus = FogBlendingThreadStatus.Finished;
            }
            Thread.Sleep(100);
        }
    }
예제 #3
0
    private void Update()
    {
        // 更新混合因子(blendFactor)
        blendFactor = Mathf.Clamp01(blendFactor + Time.deltaTime);
        fogMaterial.SetFloat("_BlendFactor", blendFactor);

        /*
         * 更新每个逻辑层物体的坐标
         * 同时,每个单位在更新时都可能会被Remove,
         * 所以为了保证安全性,多了一个对null的判断
         */
        for (int i = 0; i < LogicalLayerObjects.Count();)
        {
            if (LogicalLayerObjects[i] != null)
            {
                LogicalLayerObjects[i].characterModel.Position = LogicalLayerObjects[i].transform.position;
                LogicalLayerObjects[i].characterModel.Rotation = LogicalLayerObjects[i].transform.rotation;
                i++;
            }
            else
            {
                RemoveFOVUnit(i);
            }
        }

        /*
         * 如果线程已经画好了战争迷雾当前帧的贴图,
         * 那么更新贴图,并通知线程继续更新
         */
        if (threadStatus == FogBlendingThreadStatus.Finished)
        {
            texture.SetPixels32(buffer0);
            texture.Apply();
            minMapTexture.SetPixels32(minMapBuffer);
            minMapTexture.Apply();
            threadStatus = FogBlendingThreadStatus.Update;

            blendFactor = 0;
        }
    }
예제 #4
0
    private void Update()
    {
        #region 待重构~TODO~
        ///*
        // * 更新每个逻辑层物体的坐标
        // * 同时,每个单位在更新时都可能会被Remove,
        // * 所以为了保证安全性,多了一个对null的判断
        //*/
        //for (int i = 0; i < players.Count();) {
        //    if (players[i] != null) {
        //        playersPositions[i] = players[i].position;
        //        i++;
        //    } else {
        //        RemoveListData<Transform>(i, players);
        //        RemoveListData<Vector3>(i, playersPositions);
        //    }
        //}
        //for (int i = 0; i < characterMonos.Count();) {
        //    if (characterMonos[i] != null) {
        //        fOVUnits[i].Position = characterMonos[i].transform.position;
        //        i++;
        //    } else {
        //        RemoveListData<CharacterMono>(i, characterMonos);
        //        RemoveListData<IFOVUnit>(i, fOVUnits);
        //    }

        //}
        #endregion

        #region 重构完成

        /*
         * 更新每个逻辑层物体的坐标
         * 同时,每个单位在更新时都可能会被Remove,
         * 所以为了保证安全性,多了一个对null的判断
         */
        for (int i = 0; i < LogicalLayerObjects.Count();)
        {
            if (LogicalLayerObjects[i] != null)
            {
                LogicalLayerObjects[i].characterModel.Position = LogicalLayerObjects[i].transform.position;
                i++;
            }
            else
            {
                RemoveFOVUnit(i);
            }
        }
        #endregion

        /*
         * 如果线程已经画好了战争迷雾当前帧的贴图,
         * 那么更新贴图,并通知线程继续更新
         */
        if (threadStatus == FogBlendingThreadStatus.Finished)
        {
            texture.SetPixels32(buffer0);
            texture.Apply();
            minMapTexture.SetPixels32(minMapBuffer);
            minMapTexture.Apply();
            threadStatus = FogBlendingThreadStatus.Update;
        }
    }