Ejemplo n.º 1
0
    IEnumerator CheckOcclus()
    {
        while (true)
        {
            yield return(checkOccInterval);

            Vector3 pos = Vector3.zero;
            if (null != Initialize.mainCam)
            {
                pos = Initialize.mainCam.transform.position;
            }
            occlusCamera = false;
            if (SkinControl && SkinConfig && EntityFactory.MainHeroView != null && EntityFactory.MainHero)
            {
                CheckRay.origin = pos;
                Vector3 mainPlayPos = EntityFactory.MainHero.transform.position;
                mainPlayPos.y += EntityFactory.MainHeroView.Property.CreatureHeightInMeters;
                Vector3 dir = mainPlayPos - pos;
                PlayerCameraDistance = Vector3.Distance(mainPlayPos, pos);

                CheckRay.direction = dir.normalized;
                RaycastHit hitInfo;
                if (SkinConfig.OcclusCollider.Raycast(CheckRay, out hitInfo, PlayerCameraDistance))
                {
                    occlusCamera = true;
                    if (lastocclusCamera != occlusCamera)
                    {
                        lastocclusCamera = occlusCamera;
                        SkinControl.setAlpha(occlusCameraAlpha);
                    }
                }
                else
                {
                    if (lastocclusCamera != occlusCamera)
                    {
                        lastocclusCamera = occlusCamera;
                        SkinControl.setAlpha(1.0f);
                    }
                }
            }
        }
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 实体优化
    /// </summary>
    private void EntityOptimize()
    {
        if (!SkinConfig || SoldierCamera.MainInstance() == null || Initialize.mainCam == null || Initialize.Instance.SoliderTargetGO == null)
        {
            return;
        }

        float dragonOptimitzedDistance = 7.0f;  //策划控制

        U3D_Render.EntityView mainEv = EntityFactory.getMainPlayer();
        if (null == mainEv)
        {
            return;
        }
        //大小龙体积过大,透明度优化
        int vocationID = creaturePropety.GetNumProp(ENTITY_PROPERTY.PROPERTY_VOCATION);

        if (vocationID > 11 && vocationID < 15)
        {
            //检测距离,如果距离太近,不降低透明度
            float dis = CaclDistance(mainEv.gameObject.transform.position, creature.position);
            if (dragonOptimitzedDistance > dis)
            {
                SkinControl.setAlpha(0.5f);
            }
            else
            {
                SkinControl.setAlpha(1.0f);
            }
        }

        if (SkinConfig.OptimitzedDistance > 0)
        {
            //检测距离,如果距离太远,不渲染了
            //参考点分两种情况:上帝模式、非上帝模式


            Vector3 calcPos = new Vector3();
            if (SoldierCamera.MainInstance().cameraMode == CameraMode.MapGodControl || SoldierCamera.MainInstance().cameraMode == CameraMode.OBMoveFree)
            {
                calcPos = Initialize.mainCam.transform.position;
            }
            else
            {
                calcPos = Initialize.Instance.SoliderTargetGO.transform.position;
            }

#if ENABLE_YUNYING_MODE
            if (SoldierCamera.MainInstance().cameraMode == CameraMode.YUNYING_OBMoveFree)
            {
                calcPos = Initialize.mainCam.transform.position;
            }
            return;
#endif
            calcPos.y = creature.position.y;

            float dis = CaclDistance(calcPos, creature.position);
            if (dis < SkinConfig.OptimitzedDistance)
            {
                if (!m_DistanceVisible)
                {
                    m_DistanceVisible = true;
                    //淡入的时候是不可见的,所以要立马更新可见性
                    UpdateVisible();

                    //淡入皮肤
                    FadeInSkin();
                }
                //位置往前移2m,再判断
                Vector3 p = creature.position + Initialize.mainCam.transform.forward * 2.0f;
                bool    isOnFrustmView = CameraUtil.isOnCameraView(p);
                if (isOnFrustmView)
                {
                    GameUtil.EnabledAnimator(animator);
                }
                else
                {
                    GameUtil.DisabledAnimator(animator);
                }
            }
            else
            {
                if (m_DistanceVisible)
                {
                    m_DistanceVisible = false;
                    //淡出皮肤
                    FadeOutSkin();
                }
                GameUtil.DisabledAnimator(animator);
            }
            UpdateFadeSkin();
        }
        //如果没有开启优化,走老套路
        else
        {
            if (!m_DistanceVisible)
            {
                m_DistanceVisible = true;
                UpdateVisible();
                SkinControl.setAlpha(1.0f);
                GameUtil.EnabledAnimator(animator);
            }
        }
    }