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 之前
最新文章
- Linux系统中如何挂载第二块硬盘
- HDU 1175 连连看
- VPN各种常见状态码及修复方法
- Android 学习笔记之AndBase框架学习(三) 使用封装好的函数完成Http请求..
- ";ORA-12154: TNS:could not resolve the connect identifier specified";的解决办法
- 解析 iOS 动画原理与实现
- JNI 学习笔记
- hdu 4674 Trip Advisor(缩点+倍增lca)
- PHP 源码加密扩展(php-beast)PHP7 版本发布
- strlen源码剖析
- IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例
- angularjs1.6.4中使用ng-table出现data.slice is not a function的问题
- matplotlib种类
- .NET Core 3.0-preview3 发布
- 让UITableView的section header view不悬停的方法
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stu' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is
- EasyUi通过OCUpload上传及POI上传 实现导入xls表格功能
- oracle 11g SKIP_UNUSABLE_INDEXES参数
- linux 查看系统编码和修改系统 编码方法
- Centos7下安装运行keepalived
热门文章
- iOS-启动项目(二)引入第三方库
- 象群游牧算法-Matlab
- HGAME2021 week3 pwn writeup
- windows下python3.7安装gmpy2、Crypto 库及rsa
- C51单片机中断实验
- CF1265B Beautiful Numbers 题解
- Centos(Linux)安装openoffice教程
- 百度地图AK密钥申请
- 痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(1) - 开发环境搭建与点灯
- 【LeetCode】363. Max Sum of Rectangle No Larger Than K 解题报告(Python)