经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
Unity3D开发入门教程(三)——添加启动脚本
来源:cnblogs  作者:五邑隐侠  时间:2022/1/17 10:46:32  对本文有异议

五邑隐侠,本名关健昌,12年游戏生涯。 本教程以 Unity 3D + VS Code + C# + tolua 为例。

 

一、启动脚本

第一篇 “搭建开发环境”,在 “配置 Lua 开发环境” 一节提到,把 tolua 下的 Assets、Luajit、Luajit64、Unity5.x拷贝到工程根目录,简化 C#、Lua 互调。

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

  1. 1 --主入口函数。从这里开始lua逻辑
  2. 2 function Main()
  3. 3 print("logic start")
  4. 4 end
  5. 5
  6. 6 function OnUpdate()
  7. 7 print("Lua OnUpdate")
  8. 8 end
  9. 9
  10. 10 --场景切换通知
  11. 11 function OnLevelWasLoaded(level)
  12. 12 collectgarbage("collect")
  13. 13 Time.timeSinceLevelLoad = 0
  14. 14 end
  15. 15
  16. 16 function OnApplicationQuit()
  17. 17 end

 

新建目录CSharp用于存放C#脚本,新建一个C#脚本 Main.cs 作为启动脚本

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

 

原文链接:http://www.cnblogs.com/niudanshui/p/15797069.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号