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;
}
}
【未完待續】