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);
    }

}

明天继续....

时间: 2024-12-19 00:21:30

Grid下面的 子对象按钮如何回调的相关文章

UITableview xib里面 cell 按钮的回调

//  MoreBtnCell.m#import <UIKit/UIKit.h> @interface MoreBtnCell : UITableViewCell @property (weak, nonatomic) IBOutlet UIButton *BtnOnee; @property (weak, nonatomic) IBOutlet UIButton *BtnTwoo; @property (copy, nonatomic) void(^btnOne_block)(void);

一句话解释回调函数

很多人都听说过“回调函数”这个物件,很多人也都明白,也有一部分像我这样的人不明白.今天吃饭的时候突然明白,说白就是一句话:传一个函数指针 就是一个函数,它的一个参数是一个函数指针. 1 return_value func(func_ptr){ 2 ......... 3 } #include <iostream> using namespace std; int generateOdd(int i){ return 2*i+1; } int print(int(*p)(int i),int K

接口_ _接口回调机制

在Android中到处可见接口回调机制,尤其是UI事件处理方面,本文给大家介绍android接口回调机制,涉及到android接口回调相关知识,对本文感兴趣的朋友可以参考下本篇文章 在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致我们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话你是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误.那有什么好的方法去实现数据的线性传递呢?先

Android接口回调机制

开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A可以继续先做别的事情. 那么就只有当B解决完问题后告诉A问题解决了,A才可以能解决这个问题. 代码中比如最常用的: 一个Activity中给按钮一个接口回调方法,只有用户点击了这个按钮,告诉按钮被点击了,才会执行按钮接口回调的方法 Button btn = new Button(this); btn

模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。

需要用到的lib包 :解析json  gson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等 下载地址:点击下载 Xlistview 下拉上拉第三方框架  点击下载 侧滑菜单的lib  点击下载 1 package com.lixu.testjsonall; 2 3 import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; 4 import com.jeremyfeinstein.slid

(转)Android之接口回调机制

开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A可以继续先做别的事情. 那么就只有当B解决完问题后告诉A问题解决了,A才可以能解决这个问题. 代码中比如最常用的: 一个Activity中给按钮一个接口回调方法,只有用户点击了这个按钮,告诉按钮被点击了,才会执行按钮接口回调的方法. Button btn = new Button(this); bt

模拟实现 百度翻译 右下方的可折叠的分享按钮列表

自从开始学习前端后,平时看到浏览器上的一些出彩的控件都想自己实现一下O(∩_∩)O,不知大家有没有这个感觉.接下来就和大家分享一个,原控件来自百度翻译右下方,大家仔细找找应该能找到,如图所示: 感觉蛮有意思的,实现起来也不复杂,比较适合练手.好吧,废话不多说了,直接上代码吧. html代码: <!DOCTYPE html> <html> <head> <meta charset = 'utf-8'/> <title>zoom</title&

[01]可拖动、可调节大小、自定义按钮风格的无边框WPF程序

初学WPF,用VS2012写了一个可拖动.可调节大小.自定义按钮风格的无边框程序.效果如下: 实现过程:一.拖动.调节大小.无边框主要参考了: http://blog.csdn.net/dlangu0393/article/details/12548731 二.自己主要完成自定义按钮效果. 1.  WPF定义按钮风格方法 (1) 添加一个Resource Dictionary文件,如Style.xaml.例如: <ResourceDictionary xmlns="http://schem

Ext JS 6学习文档-第5章-表格组件(grid)

使用 Grid 本章将探索 Ext JS 的高级组件 grid .还将使用它帮助读者建立一个功能齐全的公司目录.本章介绍下列几点主题: 基本的 grid 排序 渲染器 过滤 分页 单元格编辑 行编辑 分组 分组 grid(pivot grid) 公司目录 -一个示例项目 转载请注明出处:http://www.jeeboot.com/archives/1225.html grid 组件是 Ext JS 中最强大的一个组件.它有很多的选项和配置,能以任何你希望的形式来构建 grid. Ext JS