Unity3D開發入門教程(三)——添加啓動腳本

五邑隱俠,本名關健昌,12年遊戲生涯。 本教程以 Unity 3D + VS Code + C# + tolua 爲例。

 

一、啓動腳本

第一篇 “搭建開發環境”,在 “配置 Lua 開發環境” 一節提到,把 tolua 下的 Assets、Luajit、Luajit64、Unity5.x拷貝到工程根目錄,簡化 C#、Lua 互調。

先打開 Assets/Lua/Main.lua ,加上 OnUpdate() 方法(第6~8行)

 1 --主入口函數。從這裏開始lua邏輯
 2 function Main()                    
 3     print("logic start")
 4 end
 5 
 6 function OnUpdate()
 7     print("Lua OnUpdate")
 8 end
 9 
10 --場景切換通知
11 function OnLevelWasLoaded(level)
12     collectgarbage("collect")
13     Time.timeSinceLevelLoad = 0
14 end
15 
16 function OnApplicationQuit()
17 end

 

新建目錄CSharp用於存放C#腳本,新建一個C#腳本 Main.cs 作爲啓動腳本

 1 using UnityEngine;
 2 using LuaInterface;
 3 
 4 public class Main : LuaClient
 5 {
 6     private LuaFunction updateFun = null;
 7 
 8     // Start is called before the first frame update
 9     void Start()
10     {
11         // bind OnUpdate
12         this.updateFun = luaState.GetFunction("OnUpdate");
13     }
14 
15     new void OnApplicationQuit()
16     {
17         this.updateFun.Dispose();
18         this.updateFun = null;
19 
20         base.OnApplicationQuit();
21     }
22 
23     // Update is called once per frame
24     void Update()
25     {
26         this.updateFun.Call();
27     }
28 }

1、在Unity裏,場景由GameObject組成。加載場景,會創建場景中的GameObject。

2、GameObject可以添加組件,組件基類爲Component,但用戶自定義的腳本都繼承自MonoBehaviour(Component的子類)

3、Main類繼承 LuaClient,LuaClient 繼承 MonoBehaviour,所以 Main.cs 腳本可以作爲組件添加到場景的 GameObject上。

4、組件有幾個關鍵的生命週期:

    1)Awake:只調用一次,在組件整個生命週期開始時調用,組件一般不建議寫構造方法,需要提前初始的數據,可以在Awake初始化

    2)Start:第一次Enable時調用,整個生命週期只調用一次,可以在這裏初始化組件數據

    3)Update:每幀調用一次

    4)OnApplicationQuit:遊戲退出時調用

5、LuaClient 在 Awake 裏 初始化 Lua 環境,綁定C#類到Lua,然後加載 Assets/Lua/Main.lua 文件,並調用其中的 function Main() 方法,開始 Lua 邏輯。

6、luaState 是 LuaClient 的一個LuaState類型字段,保存 Lua 虛擬機對象。LuaState.GetFunction 獲取 Lua一個返回LuaFunction類型的全局方法。第12行獲取Lua 的 OnUpdate 方法,該方法在 Assets/Lua/Main.lua 裏定義

7、LuaFunction.Call() 執行該Lua方法。第26行,組件Main每次 Update 時都 調用 Assets/Lua/Main.lua 的 OnUpdate 方法,驅動 Lua 邏輯更新。

 

二、Unity3D編輯器簡介

1、層級管理面板

顯示場景中所有的 GameObject,可以快速選中場景中的 GameObject

 

2、場景編輯面板

可視化編輯場景中GameObject位置

 

3、預覽面板

預覽場景運行的效果

 

4、屬性面板

展示 GameObject 添加的組件,以及組件的屬性。如圖中選中 Main Camera 後顯示該GameObject 的組件有Transform、Camera組件

 

5、工程面板

工程的資源倉庫(腳本也是資源),用於搭建場景的零部件:腳本、聲音、圖片、預製體、場景等

 

三、添加啓動腳本到場景

1、在工程面板選擇Scenes文件夾,默認3D工程會生成一個SampleScene,如果沒有,可以手動創建一個。雙擊這個場景圖標,會打開該場景

 

2、在層級管理面板選擇 Main Camera 這個 GameObject

 

3、在屬性面板下方,點擊 Add Component 按鈕,選擇 Scripts --> Main,這樣場景運行時,Main腳本就會開始它的生命週期

 

4、作爲啓動腳本,我們希望它比其他腳本優先執行。在工程面板選擇CSharp文件夾,選中Main腳本

 

5、在屬性面板右上方,點擊 Execution Order 按鈕

 

6、添加Main腳本,並調整其順序在 Default Time 之前

 

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