• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

Uniyt热更新—LuaFrameWork(二)按钮事件

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/0217/394.html

Uniyt热更新—LuaFrameWork(二)按钮事件

 

上一篇文章我们常州微信公众平台主要是梳理了一下框架例子的流程,知道了uluaC#之间的调用,这篇我们接着来学习下框架对UI按钮事件的处理。思路就是点击按钮时调用lua的代码来处理相关的逻辑,那他是怎么实现的呢,不多说直接看源码。

 

首先我们来看下LuaBehaviour.cs的代码里面有我们想要的东西:

 

using UnityEngine;

using LuaInterface;

using System.Collections;

using System.Collections.Generic;

using System;

using UnityEngine.UI;

namespace LuaFramework

    public class LuaBehaviour : View

        private string data = null;

        private Dictionary<string, LuaFunction> buttons = new Dictionary<string, LuaFunction>();

        protected void Awake()

            Util.CallMethod(name, "Awake", gameObject);

       

        protected void Start()

            Util.CallMethod(name, "Start");

       

        protected void OnClick()

            Util.CallMethod(name, "OnClick");

       

        protected void OnClickEvent(GameObject go)

            Util.CallMethod(name, "OnClick", go);

       

        /// <summary>

        /// 添加常州微信小程序开发单击事件

        /// </summary>

        public void AddClick(GameObject go, LuaFunction luafunc)

            if (go == null || luafunc == null) return;

            buttons.Add(go.name, luafunc);

            go.GetComponent<Button>().onClick.AddListener(

                delegate()

                    luafunc.Call(go);

               

            );

       

        /// <summary>

        /// 删除单击事件

        /// </summary>

        /// <param name="go"></param>

        public void RemoveClick(GameObject go)

            if (go == null) return;

            LuaFunction luafunc = null;

            if (buttons.TryGetValue(go.name, out luafunc))

                luafunc.Dispose();

                luafunc = null;

                buttons.Remove(go.name);

           

       

        /// <summary>

        /// 清除常州网站开发建设单击事件

        /// </summary>

        public void ClearClick()

            foreach (var de in buttons)

                if (de.Value != null)

                    de.Value.Dispose();

               

           

            buttons.Clear();

       

        //-----------------------------------------------------------------

        protected void OnDestroy()

            ClearClick();

#if ASYNC_MODE

            string abName = name.ToLower().Replace("panel", "");

            ResManager.UnloadAssetBundle(abName + AppConst.ExtName);

#endif

            Util.ClearMemory();

            Debug.Log("~" + name + " was destroy!");

       

   

 

 

里面的AddClick函数就是我们要看的,通过这个函数我们可以给指定的Button添加OnClick事件,这个事件主要实现了调用Lua函数。Ok,再配合常州微信小程序开发Lua代码我们给对应的Button添加事件,看Lua代码:

prompt = transform:GetComponent('LuaBehaviour');

logWarn("Start lua--->>"..gameObject.name);

prompt:AddClick(PromptPanel.btnOpen, this.OnClick);

function PromptCtrl.OnClick(go)

if TestProtoType == ProtocalType.BINARY then

this.TestSendBinary();

end

if TestProtoType == ProtocalType.PB_LUA then

this.TestSendPblua();

end

if TestProtoType == ProtocalType.PBC then

this.TestSendPbc();

end

if TestProtoType == ProtocalType.SPROTO then

this.TestSendSproto();

end

logWarn("OnClick---->>>"..go.name);

end<span style="white-space: normal;"> </span>

这里通过调用LuaBehaviour.cs里的AddClick函数给btnOpen按钮添加了OnClick事件,这样当我们游戏开发运营点击btnOpen按钮是就会调用Lua里的PromptCtrl.OnClick函数,是不是很简单也很实用。


上篇:上一篇:常州手游开发-Unity 5 中的全局光照技术详解
下篇:下一篇:常州手游开发-U3D碰撞体测试