LuaFrameWork的個人分析

Lua在C#這邊進行的基本操作

在熱更新核心腳本【LuaBehaviour】。

LuaBehaviour繼承自View 視圖層

我們只需要關注生成的【函數名】、【參數列表】、【返回值】,怎麼生成的不需要知道

我們核心目的是看框架邏輯。

LuaBehaviour這個腳本,是所有面板都會掛載的一個腳本【誤?】

一出現這個面板就會執行Awake方法

 

 

把當前對象名 , 要執行的方法名,當前這個對象傳入到CallMethod中

 

String module 是當前遊戲對象的名字,

String func 是要執行的方法,

Params object[] args 可變參數的object類型

 

 

 

這一句獲取了一個Lua管理器,我們也不關心是怎麼獲取的,反正就是獲取到了

 

 

 

CallFunction裏面的就是【當前遊戲對象名字.{點上一個}傳入的方法名】

 

 

以上就是對Lua文件,是如何在C#這邊進行一個小處理

正片

 

CtrlManager.lua

要在這裏進行寫要進行加載的面板,例如,我們要在這裏加載Main面板和Role面板

 

 

添加進去之後,它會進行判斷這個控制器爲不爲空,不爲空並且ExampleMode = 1 然後就去執行這個控制器裏面的Awake函數【執行到了控制器中的Awake的方法就可以執行一系列的方法】

 

 

 

這個Awake函數,用面板管理器【PanelManager】去創建一個面板 ( CreatePanel 是 面板管理器的一個方法,這個C#那邊註冊好的Wrap文件【包裝】 )

panelMgr:CreatePanel(‘Prompt’, this.OnCreate );

【第一個形參指的是{要創建出來的面板名 – 無需加Panel -}

,this.OnCreate是每個控制器它自己的一個方法】

 

跳轉到C#那邊的PanelManager

 

一旦這個面板加載成功,

【這一部分是加載面板】

 

 

 

 

它在後面走到下面【這行代碼】

 

 

 

Func是那邊傳過來的lua的一個方法,它會調用call方法,裏面的go是加載出來的這個GameObject

 

然後到了lua的這邊,就進行一系列的賦值和尋找組件等操作

 

 

轉到Define

 

 

 

這裏詳細寫明瞭,管理類們它們所在的類

LuaHelper,它是一個包裝類,所以我們要獲得這個LuaHelper的話,就要通過

LuaFrameWork.LuaHelper ,【LuaHelper = LuaFramework.LuaHelper】

就獲取到這個類了,然後再去用【LuaHelper.GetPanelManager();】

 

去獲取PanelManager這個類

【這部分寫的有點亂,但是就是這麼一層一層獲取的,才能使用panelMgr】

然後再這個面板就創建出來了。

界面的製作以及調用【主面板和角色面板製作】

Builds創建Main文件夾和Role文件夾,塞入那兩個對應的面板
然後

在Editor的Packager中,添加入這兩行代碼,讓打包程序知道這兩個預製體的存在

 

在【CtrlManager】的Init方法裏,添加進這兩個

 

 

 

這個操作是在【CtrlManager】中調用每個控制器的New方法,其目的是在控制器列表當中留下一個存根,用於管理

當然,申明這兩個lua文件也是十分之重要的事

緊接着就是在

 

LuaFrameWork> Lua>Controller文件夾裏,創建兩個控制器 MainCtrl.lua 和 RoleCtrl.lua

首先

 

 

複製PromptCtrl裏面的

 

一個是表的申明,還有一個是this字代替自己本身的這麼一個用法

另一個是創建出類似於它們【MainCtrl】和【RoleCtrl】的構造函數{New}

然後進行更改,表名,this,等是很重要的

其次

 

這兩個東西,我們就註冊好了,但是,

 

正常來講,我們是沒有這個CtrlNames的,因爲這兩個是我們後面加上去的

回到Define類中,將CtrlNames和PanelNames中添加上這兩個東西,

這纔算存在於這個項目中

 

 

 

發現嚴重錯誤,這裏寫成了RoleCtrl應該是RolePanel纔對

到這裏爲止,CtrlManager的Init操作就實現了,如果一切正常的話,剛剛寫入的MainCtrl和RoleCtrl的語句是可以輸出的

在Game.lua中,第51行把實參裏的東西改掉

【這樣的話,才能啓動遊戲時,才能加載我們剛寫出來的這個lua】

繼續在MainCtrl中添加一個函數Awake

 

添加Awake的原因是,之前說過它會判斷這個控制器爲不爲空,

如果不爲空,它會調用傳入控制器的Awake函數從而調用自己和初始化一些東西

然後在 LuaFrameWork>Lua>View文件夾中添加MainPanel.lua 和 RolePanel.lua

添加這兩個腳本的原因是

Game.lua當中

 

這裏在獲取View文件夾下的xxxPanel.lua的這個文件,如果獲取不到的話,那就會出錯

至此爲止

 

只要一初始化,這個控制器就幫忙創建面板,

用到的就是之前所說的C#那邊PanelManager下的CreatePanel

 

 

 

第一個參數就是加載面板的名字不帶Panel -

第二個參數就是用什麼lua方法去執行它

 

 

 

PromptCtrl中的OnCreate方法,它是一個回調函數

 

 

 

就是我這個面板創建完了之後,這個是作爲回調來存在的,把對象傳過來,我可以存起來,

然後存上他的面板,存上這個LuaBehaviour,然後去賦值點擊事件

 

不過要切記的是方法名一定要寫正確

也要把畫布上面的標籤設置成GuiCamera

 

 

 

現在開始寫點擊事件,

我一點擊按鈕,能檢測到,所以我要給這個按鈕添加點擊事件,

我們說這個Ctrl屬於控制器層,它是負責業務邏輯,那註冊事件的事是由它【控制器】來處理是沒問題的,但是,獲取這個按鈕這個邏輯應該是Panel層去處理的

就是它的gameObject ,transform,底下的控件,都是由Panel進行處理,

官方案例【PromptPanel

 

 

 

它這裏有個Awake和OnDestroy都是由LuaBehaviour來調用的,它會調用這些東西的

掉完Awake會把這些對象都拿到,到了InitPanel這個方法都是來獲取底下的控件,然後存入這個Table裏面。

回到MainCtrl

獲取自身的LuaBehaviour腳本,拿到LuaBehaviour,然後調用AddClick添加事件監聽,再拿到MainPanel裏面存在的那個btn,再調用自身的OnClick函數

 

到這裏爲止,MainCtrl大概寫成這個樣子

在OnCreate的最後一句話中,就是點擊下去打開角色信息面板。

但是,寫在這裏完全不符合,畢竟它是Role中的視圖層,但是需要被【RoleCtrl】給控制,因此需要在【RoleCtrl】中體現出來,所以我們應該將它分離出來,在【MainCtrl】OnClick方法中應該寫成

 

 

 

RoleCtrl

 

 

 

調用它【RoleCtrl】裏面的OnCreate方法就創建出來了

Panel裏面是處理組件相關的跟對象相關的那些空間的

Ctrl是處理業務邏輯的,比如說有按鈕要點擊,或者說OnCreate下面要生成什麼東西

 

 

 

 

客戶端與服務器交互!

 

 

 

 

 

 

服務器往客戶端進行發東西

 

登陸註冊完畢後,接下來就是進入遊戲場景

 

 

 

 

 

 

 

 

 

額外補充一個【Low版】背景滾動代碼

public class Repeat : MonoBehaviour {
    float i;
    Material mater;
// Use this for initialization
void Start () {
        mater = GetComponent<MeshRenderer>().material;
}
// Update is called once per frame
void Update () {
        i += Time.deltaTime;
        Vector2 v2 = new Vector2(0 , i );
        mater.mainTextureOffset = v2;
}
}

 

【未完待續】

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章