wangguan
2020-11-14 7f71e2c1cfb5a5bd329c87249c4da4f7f8cde330
Assets/Scripts/UI/ClickEffect.cs
@@ -22,10 +22,9 @@
    /// <summary>
    /// 屏幕特效渲染使用的相机
    /// </summary>
    public Camera fxRenderCamera;
    private Camera fxRenderCamera;
    private Queue<GameObject> pool = new Queue<GameObject>(20);
    private List<GameObject> activatedFXList = new List<GameObject>();
    private Queue<RecycleEffectc> pool = new Queue<RecycleEffectc>(20);
    private void Awake()
    {
@@ -38,21 +37,12 @@
        {
            fxSample.SetActive(false);
        }
        fxRenderCamera = GameObject.Find("UICamera").GetComponent<Camera>();
    }
    private void Update()
    {
        for (int i = activatedFXList.Count - 1; i >= 0; --i)
        {
            GameObject fx = activatedFXList[i];
            float fxTime = float.Parse(fx.name);
            if (Time.time - fxTime > fxLifeTime)
            {
                RecycleFX(fx);
                activatedFXList.RemoveAt(i);
            }
        }
        if (Application.isMobilePlatform)
        {
            for (int i = 0; i < Input.touchCount; ++i)
@@ -76,57 +66,38 @@
    private void PlayFX(Vector2 tapPos)
    {
        GameObject fx = CreateFX();
        fx.name = Time.time.ToString();
        activatedFXList.Add(fx);
        RecycleEffectc fx = CreateFX();
        RectTransform fxRectTrans = fx.GetComponent<RectTransform>();
        RectTransform fxRectTrans = fx.gameObject.GetComponent<RectTransform>();
        Vector2 fxLocalPos;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(fxContainer, tapPos, fxRenderCamera, out fxLocalPos);
        fxRectTrans.SetParent(fxContainer);
        fxRectTrans.anchoredPosition3D = fxLocalPos;
        fx.SetActive(true);
        //fxRectTrans.localScale = Vector3.one;
        fx.gameObject.SetActive(true);
        fx.StartPlay(fxLifeTime,RecycleFX);
    }
    private GameObject CreateFX()
    private RecycleEffectc CreateFX()
    {
        GameObject newFX = null;
        RecycleEffectc newFX = null;
        if (pool.Count > 0)
        {
            newFX = pool.Dequeue();
        }
        else
        {
            newFX = Instantiate(fxSample);
            GameObject go = Instantiate(fxSample);
            newFX = go.AddComponent<RecycleEffectc>();
        }
        return newFX;
    }
    private void RecycleFX(GameObject fx)
    private void RecycleFX(RecycleEffectc fx)
    {
        fx.SetActive(false);
        fx.gameObject.SetActive(false);
        pool.Enqueue(fx);
    }
    //简单,无法显示在最上层
    // Vector3 point;
    // GameObject effectGo;
    // void Start()
    // {
    //     effectGo = Resources.Load<GameObject>("Prefabs/EffectClick");
    // }
    // void Update()
    // {
    //     if (Input.GetMouseButtonDown(0))
    //     {
    //         point = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 4f);//获得鼠标点击点
    //         point = Camera.main.ScreenToWorldPoint(point);//从屏幕空间转换到世界空间
    //         GameObject go = Instantiate(effectGo);//生成特效
    //         go.transform.position = point;
    //         Destroy(go, 0.5f);
    //     }
    // }
}