• Grid下面的 子对象按钮如何回调


    我们游戏里们经常会遇到装备,或者其他的东西需要用一个链表装起来。那个这时Unity3D就要用到Grid,成为它的子物体的对象有些需求不至于成为一张图片静静的呆在那儿,老总还需要有点击的功能那么下面我就一步步介绍是如何让它们做的的;

    1:对话框的基类

      1 using System.Collections;
      2 using System.Collections.Generic;
      3 using UnityEngine;
      4 
      5 public class BWDialog : BWWnd {
      6     private bool m_bInitOK = false;
      7     //private BWBlur m_mask = null;
      8     //private BWBlur m_oldMask = null;
      9     // Use this for initialization
     10     //private BWDarkMask m_mask = null;
     11     private int m_setDepth =  0;
     12     private int m_nTimes = 0;
     13     private TweenScale m_scale;
     14     public bool m_bAni = false;
     15     public bool m_bDark = true;
     16     public UICall OnTweenOK = null;
     17     //private TweenScale m_scale2;
     18     protected override void Start()
     19     {
     20         base.Start ();
     21         Init ();
     22         //20170824 版号申请,先不用新手引导 
     23         if (MainUI.COPYRIGHT_VERSION == false) 
     24             AutoHelp.GetInst().DoHelp(this);
     25     }
     26 
     27     public int setDepth
     28     {
     29         get{
     30             return m_setDepth;
     31         }
     32     }
     33 
     34     void Update()
     35     {
     36         if (!m_bInitOK) {
     37             if (transform.parent != null)
     38                 Init ();
     39         }
     40 
     41         //
     42     }
     43 
     44     void ReShow()
     45     {
     46         //m_tween.RemoveOnFinished (base.DoRemove);
     47         gameObject.SetActive(true);
     48         m_nTimes = 0;
     49         GameObject parent = transform.parent.gameObject;
     50         FadeIn();
     51         int nDepth = GetMaxDepth(parent, true, gameObject);
     52         m_setDepth = nDepth + 5;
     53         if (m_bDark)
     54             BWDarkMask.Show(this, m_setDepth);
     55 
     56         DisableDown();
     57 
     58         if (m_bAni)
     59         {
     60             TweenScale s = gameObject.GetComponent<TweenScale>();
     61             if (s != null)
     62                 GameObject.DestroyImmediate(s);
     63             TweenScale scale1 = gameObject.AddComponent<TweenScale>();
     64             scale1.from = Vector3.zero;
     65             scale1.to = new Vector3(0.2f, 1.1f, 1f);
     66             scale1.duration = 0.12f;
     67             scale1.PlayForward();
     68             scale1.AddOnFinished(OnAniOver);
     69             m_scale = scale1;
     70             /*TweenScale scale2 = gameObject.AddComponent<TweenScale> ();
     71             scale2.from = Vector3.zero;
     72             scale2.to = Vector3.one;
     73             scale2.duration = 0.2f;
     74             scale2.PlayForward ();
     75             scale2.AddOnFinished (OnAniOver);
     76             m_scale1 = scale1;
     77             m_scale2 = scale2;*/
     78         } //else if (OnAniOver != null)
     79         else if (OnTweenOK != null)
     80             OnTweenOK();
     81     }
     82 
     83     void Init()
     84     {
     85         if (m_bInitOK)
     86             return;
     87         if (transform.parent == null)
     88             return;
     89         
     90         BWDialogSet set = AddComponent<BWDialogSet> (gameObject);
     91         set.m_dialog = this;
     92         ReShow ();
     93         m_bInitOK = true;
     94     }
     95 
     96     void OnAniOver()
     97     {
     98         m_nTimes++;
     99         if (m_nTimes == 1) {
    100             m_scale.from = m_scale.to;
    101             m_scale.to =Vector3.one;
    102             m_scale.duration = 0.12f;
    103             m_scale.ResetToBeginning ();
    104             m_scale.PlayForward ();
    105             //m_nTimes++;
    106             return;
    107         }/* else if (m_nTimes == 2) {
    108             m_scale.from = m_scale.to;
    109             m_scale.to = Vector3.one;
    110             m_scale.duration = 0.1f;
    111             m_scale.ResetToBeginning ();
    112             m_scale.PlayForward ();
    113             return;
    114         }*/
    115 
    116         GameObject.DestroyImmediate (m_scale);
    117         if (OnTweenOK != null)
    118             OnTweenOK ();
    119     //    GameObject.DestroyImmediate (m_scale2);
    120         //TweenAlpha alpha = gameObject.GetComponent<TweenAlpha> ();
    121         //if (alpha != null)
    122         //    GameObject.DestroyImmediate (alpha);
    123     }
    124 
    125     public int GetDepth ()
    126     {
    127         UIPanel pan = gameObject.GetComponent<UIPanel> ();
    128         if (pan != null)
    129             return pan.depth;
    130         UIWidget wid = gameObject.GetComponent<UIWidget> ();
    131         if (wid != null)
    132             return wid.depth;
    133         return 0;
    134     }
    135 
    136     public override bool Remove()
    137     {
    138         gameObject.GetComponent<BWDialogSet>().m_bRemoving = true;
    139         GameObject parent = transform.parent.gameObject;
    140         base.Remove();
    141 
    142         //        Debug.LogError ("Error");
    143         //int depth = m_mask.depth;
    144         //m_mask.Remove ();
    145         //m_mask = null;
    146         //if (m_oldMask)
    147         //    m_oldMask.Show ();
    148 
    149 
    150         if (m_bDark)
    151         {
    152             if (BWDarkMask.Hide(m_setDepth))
    153                 EnableDown();
    154         }
    155         else
    156         {
    157             EnableDown();
    158         }
    159 
    160 
    161         //BWBlur blur = FindBlurMask (parent,m_mask.depth);
    162         //BWDarkMask blur = FindDarkMask(parent,depth);
    163         //if (blur != null)
    164         //    blur.gameObject.SetActive (true);
    165         //Debug.LogError (blur.depth);
    166         /*if (blur != null && blur.IsHided ()) {
    167             blur.gameObject.SetActive (true);
    168             GameObject.DestroyImmediate (m_mask.gameObject);
    169             //blur.Show ();
    170         }*/
    171         return true;
    172     }
    173 
    174 
    175     /*bool DestroyNoneTop()
    176     {
    177         bool bOK = false;
    178         Transform trans = gameObject.transform.parent;
    179         int i, iCount = trans.childCount;
    180         for (i = 0; i < iCount; i++) {
    181             
    182         }
    183         return bOK;
    184     }*/
    185 
    186 }

    上面只是做的一个准备工作,下面就要开始了,在相应按钮下面添加这个脚本,相应的就会添加预制体,但是功能都已经实现好了。我们还得继续往里面追,是如何实现这个功能;

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using BwSocket;
    public class PetDlg : BWDialog {
        public const string _strRes = "Final/UI/Pet/PetDlg";
        // Use this for initialization
        private PetInfo m_pet;
        private ArrayPage m_array;
        private CollecterPage m_colleter;
        private TechPage m_tech;
        protected override void Start () {
            OnTweenOK += DoInit;
    
            name = "Genius";
            m_pet = AddChildComponent<PetInfo> (gameObject, "Pet/Page");
            m_pet.Init();
            m_array = AddChildComponent<ArrayPage> (gameObject, "Formation/Page");
            //m_array.Init ();
            m_colleter = AddChildComponent<CollecterPage>(gameObject,"Collect/Page");
            //m_colleter.Init ();
            m_tech = AddChildComponent<TechPage> (gameObject, "Science/Page");
            //m_tech.Init ();
            AddComponent<MProtoGameToyFreeRep> (gameObject).Register (OnFreeOK);
            base.Start ();
            //XChyzClient.Ins.DoToysGet (0);
        }
    
        bool DoInit()
        {
            m_pet.Init ();
            m_array.Init ();
            m_colleter.Init ();
            m_tech.Init ();
            ActiveChildren (gameObject);
            XChyzClient.Ins.DoToysGet (0);
            return true;
        }
    
        void OnFreeOK(XProtoGameToyFreeRep rep)
        {
            DropOnly drop = ShowLazy<DropOnly> (DropOnly._strRes);
    
            GameObject src = Resources.Load ("Final/UI/Pet/PetRefine") as GameObject;
    
            drop.SetDrops (rep.dropItems,"提炼吃货",false,src);
        }
            
    }

    现在我们继续往里面追

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using BwSocket;
    
    public class FightPetView : PetView {
    
        // Use this for initialization
        protected override void Start () {
            
            base.Start ();
        }
    
        public override bool Init ()
        {
            m_petType = PetType.Fight;
            if(!base.Init()) return false;
            OnItem += OnPetDetail;//这里
    
            return true;
        }
    
    
        bool OnPetDetail(PetItem item)
        {
            PetDetail dlg = AddChild<PetDetail> (PetDetail._strRes);
            dlg.m_nPetID = item.GetID();
            dlg.Init ();
            return true;
        }
    
        protected override void OnFreeOK(XProtoGameToyFreeRep rep)
        {
            base.OnFreeOK (rep);
            SetLabelString ("Count/number", "战斗吃货:" + m_toys.Count);
        }
    
        public override void UpdateToys (List<TOYINFO> toys)
        {
            List<TOYINFO> newToys = new List<TOYINFO> ();
            int i, iCount = toys.Count;
            for (i = 0; i < iCount; i++) {
                TOYINFO info = toys [i];
                if (info.nType == PetView.GENIUSTYPE_BATTLE)
                    newToys.Add (info);
            }
            SetLabelString ("Count/number", "战斗吃货:" + newToys.Count);
            base.UpdateToys (newToys);
        }
    
    }

    明天继续....

  • 相关阅读:
    软件测试分类与分级
    项目风险管理(Project Risk Management)
    软件测试基础
    【1】开关电源纹波的抑制
    EMC小知识
    【02】STM32:跑马灯配置
    【01】STM32:GPIO管脚模式设置
    【07】Java入门07:继承与抽象类
    【06】Java入门06:IO流-基础
    【05】Java入门05:Java集合
  • 原文地址:https://www.cnblogs.com/WindMan/p/7516356.html
Copyright © 2020-2023  润新知