From 2fc3753ac9c591a01f0d966984abe659113fe57f Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Sat, 24 Oct 2020 15:57:04 +0800
Subject: [PATCH] 无尽模式加了法阵和掉落的特效,改了场景canvas渲染模式

---
 Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs |   94 +++++++++++++++++++++--------------------------
 1 files changed, 42 insertions(+), 52 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs
index 7711724..cff5332 100644
--- a/Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs
+++ b/Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs
@@ -16,11 +16,6 @@
     public class EndlessDropManager : Singleton<EndlessDropManager>
     {
         /// <summary>
-        /// 掉落道具预制体列表
-        /// </summary>
-        public List<GameObject> PropList;
-
-        /// <summary>
         /// 获得掉落事件
         /// </summary>
         public event Action<EndlessDrop> ObtainDropEvent;
@@ -40,10 +35,19 @@
         /// </summary>
         private Dictionary<int, GameObject> DropObjDic;
 
+        private string dropPath = "UI/Props/EndlessDropEffect";
+
+        /// <summary>
+        /// 自动拾取时间,先统一处理
+        /// </summary>
+        public float AutoPickupTime = 5f;
+
         /// <summary>
         /// 掉落半径
         /// </summary>
         public float DropRadius { get; set; } = 50f;
+
+        public Canvas canvas;
 
         // Start is called before the first frame update
         private void Start()
@@ -90,25 +94,6 @@
         }
 
         /// <summary>
-        /// 根据reward获得预制体对象
-        /// </summary>
-        /// <param name="data"></param>
-        private GameObject GetPrefabByReward(reward data)
-        {
-            switch (data.type)
-            {
-                case CURRENCY.Money:
-                    return PropList[0];
-                case CURRENCY.Gold:
-                    return PropList[1];
-                case CURRENCY.Box:
-                    return PropList[1 + data.id];
-            }
-
-            return null;
-        }
-
-        /// <summary>
         /// 获得一些掉落
         /// </summary>
         /// <param name="list"></param>
@@ -120,17 +105,7 @@
                 EndlessDrop drop = new EndlessDrop();
                 drop.Reward = list[i];
                 drop.Id = GetDropId();
-
-                GameObject prefabObj = GetPrefabByReward(list[i]);
-
-                if (prefabObj == null)
-                {
-                    Debug.LogError($"--------------------- type: {list[i].type} id:{list[i].id} 没有对应的预制体 ---------------------");
-                    continue;
-                }
-
-                EndlessDropReward dropReward = prefabObj.GetComponent<EndlessDropReward>();
-                drop.AutoPickupTime = dropReward.AutoPickupTime;
+                drop.AutoPickupTime = AutoPickupTime;
                 CreateDrop(drop, pos, list.Count > 0);
                 AllDropList.Add(drop);
             }
@@ -153,32 +128,47 @@
         /// 在场景中创建掉落的icon
         /// </summary>
         /// <param name="drop"></param>
-        /// <param name="pos"></param>
+        /// <param name="worldPos">世界坐标</param>
         /// <param name="isRandom">是否需要随机位置</param>
-        private void CreateDrop(EndlessDrop drop, Vector3 pos, bool isRandom = false)
+        private void CreateDrop(EndlessDrop drop, Vector3 worldPos, bool isRandom = false)
         {
-            GameObject dropLayer = GameObject.Find("DropLayer");
-            GameObject prefabObj = GetPrefabByReward(drop.Reward);
+            GameObject prefabObj = Resources.Load<GameObject>(dropPath);
             GameObject obj = Instantiate(prefabObj);
+            EndlessDropReward dropReward = obj.GetComponent<EndlessDropReward>();
+
+            dropReward.DropData = drop;
+            dropReward.SetIcon();
+
             GameObject mainUI = GameObject.Find("MainUI");
 
             Transform mainUITransform = mainUI.GetComponent<Transform>();
             obj.GetComponent<Transform>().SetParent(mainUITransform, true);
-            Vector3 screenPos = Camera.main.WorldToScreenPoint(pos);
-            screenPos.z = 0;
-            obj.transform.position = screenPos;
 
-            if (isRandom)
-            {
-                Vector2 p = UnityEngine.Random.insideUnitCircle * DropRadius;
-                Vector3 pos1 = p.normalized * p.magnitude;
-                Vector3 objPos = obj.transform.position;
-                objPos.x += pos1.x;
-                objPos.y += pos1.y;
-                obj.transform.position = objPos;
-            }
+            // Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);
+            // Vector2 targetPos;
+            // RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, screenPos, canvas.worldCamera, out targetPos);
+            // RectTransform rectTransform =  obj.GetComponent<RectTransform>();
+            // rectTransform.anchoredPosition = pos;
+            // obj.transform.localRotation = Quaternion.identity;
 
-            obj.GetComponent<EndlessDropReward>().DropData = drop;
+            // Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);
+            // screenPos.z = 0;
+            
+            obj.transform.position = worldPos;
+            obj.transform.localRotation = Quaternion.identity;
+            obj.transform.localScale = Vector3.one;
+
+            // if (isRandom)
+            // {
+            //     Vector2 p = UnityEngine.Random.insideUnitCircle * DropRadius;
+            //     Vector3 pos1 = p.normalized * p.magnitude;
+            //     Vector3 objPos = obj.transform.position;
+            //     objPos.x += pos1.x;
+            //     objPos.y += pos1.y;
+            //     obj.transform.position = objPos;
+            // }
+
+            dropReward.PlayParticle();
             DropObjDic.Add(drop.Id, obj);
         }
 

--
Gitblit v1.9.1