| | |
| | | /// <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() |
| | | { |
| | |
| | | { |
| | | 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) |
| | |
| | | |
| | | 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); |
| | | // } |
| | | // } |
| | | } |