Lua代码中的结构和调用顺序和对资源的处理和对游戏逻辑的控制

 从GameManager开始执行,

创建面板过程

unction GameManager.OnInitOK()
    AppConst.SocketPort = 2012;
    AppConst.SocketAddress = "127.0.0.1";
    NetManager:SendConnect();
    
	--lua的一些测试方法
    this.test_class_func();
    this.test_pblua_func();
    this.test_cjson_func();
    this.test_pbc_func();
    this.test_lpeg_func();
    this.test_sproto_func();

    --createPanel("Prompt");
	--名字跟ctrl对应的表
    CtrlManager.Init();
	--根据名字获取ctrl对象
    local ctrl = CtrlManager.GetCtrl(CtrlName.Prompt);
	--案例模式
    if ctrl ~= nil and AppConst.ExampleMode then
		
        ctrl:Awake();
    end
    warn('SimpleFramework InitOK--->>>');
end

 

function CtrlManager.Init()
	warn("CtrlManager.Init----->>>");
	--CtrlName在define中定义了,panel对应的一个Ctrl文件
	--每一个panel会对应一个view的lua脚本
	ctrlList[CtrlName.Prompt] = PromptCtrl.New();
	ctrlList[CtrlName.Message] = MessageCtrl.New();
	return this;
end
function PromptCtrl.Awake()
	warn("PromptCtrl.Awake--->>");
	PanelManager:CreatePanel('Prompt', this.OnCreate);
end

Defines中定义的类相当于取到了C#中对应的类

ResManager = LuaHelper.GetResManager();
NetManager = LuaHelper.GetNetManager();
PanelManager = LuaHelper.GetPanelManager();
MusicManager = LuaHelper.GetMusicManager();

访问到C#Panel中的CreatPanel方法 

--创建面板--
function createPanel(name)
	PanelManager:CreatePanel(name);
end

C#中PanelManager中的方法

   /// 创建面板,请求资源管理器
        /// </summary>
        /// <param name="type"></param>
        public void CreatePanel(string name, LuaFunction func = null) {
            StartCoroutine(OnCreatePanel(name, func));
        }
IEnumerator OnCreatePanel(string name, LuaFunction func = null) {
            yield return StartCoroutine(Initialize());
            //prompt+Panel相当于预设的名字
            string assetName = name + "Panel";
            // Load asset from assetBundle.
            string abName = name.ToLower() + AppConst.ExtName;
            //加载assetbundle资源
            AssetBundleAssetOperation request = ResourceManager.LoadAssetAsync(abName, assetName, typeof(GameObject));
            if (request == null) yield break;
            yield return StartCoroutine(request);

            // Get the asset.
            GameObject prefab = request.GetAsset<GameObject>();

            if (Parent.FindChild(name) != null || prefab == null) {
                yield break;
            }
            GameObject go = Instantiate(prefab) as GameObject;
            go.name = assetName;
            go.layer = LayerMask.NameToLayer("Default");
            //父类为GuiCamera
            go.transform.SetParent(Parent);
            go.transform.localScale = Vector3.one;
            go.transform.localPosition = Vector3.zero;
            go.AddComponent<LuaBehaviour>();

            //panel创建完之后会调用lua中的OnCreat方法
            if (func != null) func.Call(go);
            Debug.LogWarning("CreatePanel::>> " + name + " " + prefab);
        }

 得到父物体 

 Transform Parent {
            get {
                if (parent == null) {
                    GameObject go = GameObject.FindWithTag("GuiCamera");
                    if (go != null) parent = go.transform;
                }
                return parent;
            }
        }

回调到lua中的方法

--启动事件--
function PromptCtrl.OnCreate(obj)
	gameObject = obj;
	transform = obj.transform;

	panel = transform:GetComponent('UIPanel');
	prompt = transform:GetComponent('LuaBehaviour');
	warn("Start lua--->>"..gameObject.name);

	prompt:AddClick(PromptPanel.btnOpen, this.OnClick);
	ResManager:LoadAsset('prompt', 'PromptItem', this.InitPanel);
end

Panel实例化出来之后会添加一个LuaBehaviour脚本

LuaBehaviour类,CallMethod()方法

  protected void Awake() {
            CallMethod("Awake", gameObject);
        }

        protected void Start() {
            if (LuaManager != null && initialize) {
                LuaState l = LuaManager.lua;
                l[name + ".transform"] = transform;
                l[name + ".gameObject"] = gameObject;
            }
            CallMethod("Start");
        }
function PromptPanel.Awake(obj)
	gameObject = obj;
	transform = obj.transform;

	this.InitPanel();
	warn("Awake lua--->>"..gameObject.name);
end

--初始化面板--
function PromptPanel.InitPanel()
	this.btnOpen = transform:FindChild("Open").gameObject;
	this.gridParent = transform:FindChild('ScrollView/Grid');
end

Lua中的PromptCtrl.OnCreate方法

--启动事件--
function PromptCtrl.OnCreate(obj)
	gameObject = obj;
	transform = obj.transform;

	panel = transform:GetComponent('UIPanel');
	prompt = transform:GetComponent('LuaBehaviour');
	warn("Start lua--->>"..gameObject.name);

	prompt:AddClick(PromptPanel.btnOpen, this.OnClick);
	ResManager:LoadAsset('prompt', 'PromptItem', this.InitPanel);
end

点击按钮事件

--单击按钮事件--
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
	warn("OnClick---->>>"..go.name);
end

MessagePanel是通过   Lua   MessageCrtrl初始化的,

function MessageCtrl.Awake()
	warn("MessageCtrl.Awake--->>");
	PanelManager:CreatePanel('Message', this.OnCreate);
end
--启动事件--
function MessageCtrl.OnCreate(obj)
	gameObject = obj;

	message = gameObject:GetComponent('LuaBehaviour');
	message:AddClick(MessagePanel.btnClose, this.OnClick);

	warn("Start lua--->>"..gameObject.name);
end

每一个UiPanel对应View下UiPanel的一个脚本,UIPanel获取一些需要操作的属性,UIPanel的实例化是通过UICtrl去控制的,还有控制组件的一些行为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值