示例#1
0
    void InitData(Camera camera)
    {
        Transform effectHolder    = camera.gameObject.transform.Find("effect");
        Vector3   position_effect = effectHolder.position;

        // 搜索路径下所有的特效
        string[] paths = this.pathsSelect;
        if (paths == null)
        {
            var fabs = AssetDatabase.FindAssets("t:prefab", effectSearchPath);
            paths = new string[fabs.Length];
            for (int i = 0; i < fabs.Length; i++)
            {
                string path = AssetDatabase.GUIDToAssetPath(fabs[i]);
                paths[i] = path;
            }
        }

        singleEffectEvlas = new SingleEffectEvla[paths.Length];

        for (int i = 0; i < paths.Length; i++)
        {
            string path     = paths[i];
            float  progress = (i + 1.0f) / paths.Length;
            EditorUtility.DisplayProgressBar("加载特效中,请耐心等待", "加载特效:" + path, progress);

            SingleEffectEvla singleEffectEvla = new SingleEffectEvla(_qualityIndex);
            singleEffectEvla.LoadEffect(path, position_effect);

            singleEffectEvlas[i] = singleEffectEvla;
        }
        EditorUtility.ClearProgressBar();
    }
示例#2
0
    public int Compare(object e1, object e2)
    {
        SingleEffectEvla singleEffectEvla1 = e1 as SingleEffectEvla;
        SingleEffectEvla singleEffectEvla2 = e2 as SingleEffectEvla;

        if (singleEffectEvla1 == null || singleEffectEvla2 == null)
        {
            throw new ArgumentException("null argument");
        }

        EffectEvlaData2 effectEvlaData1 = singleEffectEvla1.GetEffectEvlaData();
        EffectEvlaData2 effectEvlaData2 = singleEffectEvla2.GetEffectEvlaData();

        double pixRate1 = effectEvlaData1.GetPixRate();
        double pixRate2 = effectEvlaData2.GetPixRate();

        if (pixRate1 < pixRate2)
        {
            return(1);
        }
        if (pixRate1 > pixRate2)
        {
            return(-1);
        }
        return(0);
    }
示例#3
0
 public void PrintAll()
 {
     for (int i = 0; i < singleEffectEvlas.Length; i++)
     {
         SingleEffectEvla singleEffectEvla = singleEffectEvlas[i];
         singleEffectEvla.Print();
     }
 }
示例#4
0
    public void RecordOverDrawData(SingleEffectEvla singleEffectEvla)
    {
        long pixTotal      = 0;
        long pixActualDraw = 0;

        GetCameraOverDrawData(out pixTotal, out pixActualDraw);

        // 往数据+1
        singleEffectEvla.UpdateOneData(pixTotal, pixActualDraw);
    }
示例#5
0
    public string GetEffectPathShowNow()
    {
        SingleEffectEvla singleEffectEvla = GetSingleEffectEvlaNow();

        if (singleEffectEvla != null)
        {
            return(singleEffectEvla.GetEffectEvlaData().effectPath);
        }

        return("没有显示的特效");
    }
示例#6
0
    void CheckAndSaveTexture(SingleEffectEvla singleEffectEvla, bool isAutoSavePic, int maxOverdrawSaveNumber)
    {
        if (!isAutoSavePic)
        {
            return;
        }
        // 获取data
        EffectEvlaData2 effectEvlaData2 = singleEffectEvla.GetEffectEvlaData();
        double          overdrawRate    = effectEvlaData2.GetPixRate();

        if (overdrawRate < maxOverdrawSaveNumber)
        {
            return;
        }

        CSVEffectEvlaHelper cSVEffectEvlaHelper = CSVEffectEvlaHelper.GetInstance();
        string   directoryPath = cSVEffectEvlaHelper.GetDirectoryPath();
        FileInfo fi            = new FileInfo(directoryPath);

        if (!fi.Directory.Exists)
        {
            fi.Directory.Create();
        }
        string fileName = string.Format("{0}/{1}{2}.png", directoryPath, effectEvlaData2.GetEffectName(), effectEvlaData2.quality);

        RenderTexture activeTextrue = RenderTexture.active;
        RenderTexture rt            = new RenderTexture(256, 256, 0, RenderTextureFormat.ARGB32);

        _camera.targetTexture = rt;
        _camera.Render();
        RenderTexture.active = rt;
        Texture2D png = new Texture2D(rt.width, rt.height, TextureFormat.ARGB32, false);

        png.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
        byte[] bytes = png.EncodeToPNG();

        FileStream   file   = File.Open(fileName, FileMode.Create);
        BinaryWriter writer = new BinaryWriter(file);

        writer.Write(bytes);
        file.Close();

        RenderTexture.active = activeTextrue;
        Texture2D.DestroyImmediate(png);
        rt.Release();

        _camera.targetTexture = null;
    }
示例#7
0
    public void Release()
    {
        if (isRealese)
        {
            return;
        }
        isRealese = true;
        for (int i = 0; i < singleEffectEvlas.Length; i++)
        {
            SingleEffectEvla singleEffectEvla = singleEffectEvlas[i];
            singleEffectEvla.UnLoadEffect();
        }
        singleEffectEvlas = null;

        CSVEffectEvlaHelper.GetInstance();
        CSVEffectEvlaHelper.DestroyInstance();
    }
示例#8
0
    public void SaveData()
    {
        // 排序
        Array.Sort(singleEffectEvlas, new SingleEffectEvlaComparer2());

        for (int i = 0; i < singleEffectEvlas.Length; i++)
        {
            SingleEffectEvla singleEffectEvla = singleEffectEvlas[i];
            EffectEvlaData2  effectEvlaData2  = singleEffectEvla.GetEffectEvlaData();
            // pixrate大于1.5的才记录
            if (effectEvlaData2.GetPixRate() >= 1.5f)
            {
                CSVEffectEvlaHelper cSVEffectEvlaHelper = CSVEffectEvlaHelper.GetInstance();
                cSVEffectEvlaHelper.WriteData(singleEffectEvla.GetEffectEvlaDatas());
                cSVEffectEvlaHelper.Flush();
            }
        }
    }
示例#9
0
    public bool Update(bool isAutoSavePic, int maxOverdrawSaveNumber)
    {
        // 当前effect
        SingleEffectEvla singleEffectEvla = GetSingleEffectEvlaNow();

        if (singleEffectEvla == null)
        {
            time          = 0;
            _arrayIndex   = 0;
            _qualityIndex = _qualityIndex - 1;

            if (_qualityIndex >= 1)
            {
                Debug.Log("品质改变" + GetQualityChecking());
                ChangeQuality(Qualitys[_qualityIndex - 1]);

                foreach (SingleEffectEvla sEffectEvla in singleEffectEvlas)
                {
                    sEffectEvla.ChangeQuality(_qualityIndex);
                }
                return(true);
            }

            // 保存csv
            try
            {
                SaveData();
            }
            catch (Exception e)
            {
                Debug.LogError(e.ToString());
            }
            Debug.Log("运行所有特效完毕,已保存数据");
            return(false);
        }

        time     += Time.deltaTime;
        saveTime += Time.deltaTime;

        //
        singleEffectEvla.Simsimulate(time);

        // 记录本次数据
        if (saveTime >= saveTimeMax)
        {
            RecordOverDrawData(singleEffectEvla);
            saveTime = 0;
        }

        // 超过总时间,自动跳到下一个effect
        if (time > stopTime)
        {
            time = 0;
            _arrayIndex++;
            // 因为取的是平均值,所以可以最后一帧才判断截图
            CheckAndSaveTexture(singleEffectEvla, isAutoSavePic, maxOverdrawSaveNumber);
            singleEffectEvla.Stop();
        }

        return(true);
    }
示例#10
0
 public void InitData()
 {
     singleEffectEvla = new SingleEffectEvla(1);
 }
 public EffectEvla(Camera camera)
 {
     SetCamera(camera);
     rt = new RenderTexture(rtSizeWidth, rtSizeHeight, 0, RenderTextureFormat.ARGB32);
     singleEffectEvla = new SingleEffectEvla(1);
 }