C#脚本实践(二): Unity脚本机制分析
2010-11-28 19:31
260 查看
目前我了解到使用Mono做脚本的只有Unity和SecondLife, SpringEngine也有个扩展实现.
当然, 最成熟的还是Unity
于是下载了一个看看它的脚本是怎么应用的
它的编辑器界面很简洁, 实际操作了一下才发现所有的功能其本上都是由inspector面板完成
所有的GameObject都是由Component所组成, 如Mesh/Physics/Audio/Script等等
脚本都是从MonoBehaviour派生的一个实现, 在其中实现上层定义的各种接口, 如Start/Update等
脚本中定义的变量会直接反映到Inspector面板上, 如
这得益于.Net语言反射机制的强大, 也是我为什么使用.net开发编辑器的原因之一
之前还一直在想Unity是怎么动态载入脚本的, 因为mono里我只找到一个mono_domain_assembly_open的函数
在看了下测试工程的文件夹结构, 发一个文件: New Unity Project/Library/ScriptAssemblies/Assembly-CSharp.dll
看来这个就是脚本编译后的东西. 用Reflector查看了一下, 果然我写的两个测试脚本都在其中:
另外, UnityEngine.dll里的类全是InternalCall的声明, 这正好印证了上一篇C++导出到Mono的调用猜想
知道了这个, Unity的脚本机制也就差不多了:
1. C++实现引擎底层
2. Mono这边把需要暴露给脚本的类/方法/变量都再声明一次(自动生成应该也是可行的)
3. 定义脚本基类, 所有脚本对象都从它派生
4. 编辑器中发现有脚本更改就在后台重新编译assembly dll, 编译完了用Mono API重新载入
嗯, 中间那一层还是有不少需要实现的东西~
当然, 最成熟的还是Unity
于是下载了一个看看它的脚本是怎么应用的
它的编辑器界面很简洁, 实际操作了一下才发现所有的功能其本上都是由inspector面板完成
所有的GameObject都是由Component所组成, 如Mesh/Physics/Audio/Script等等
脚本都是从MonoBehaviour派生的一个实现, 在其中实现上层定义的各种接口, 如Start/Update等
脚本中定义的变量会直接反映到Inspector面板上, 如
using UnityEngine; using System.Collections; public class RotateBehaviourScript : MonoBehaviour { public float speed = 5.0f; // Use this for initialization void Start () { } // Update is called once per frame void Update () { transform.Rotate(0, speed * Time.deltaTime, 0); } }
这得益于.Net语言反射机制的强大, 也是我为什么使用.net开发编辑器的原因之一
之前还一直在想Unity是怎么动态载入脚本的, 因为mono里我只找到一个mono_domain_assembly_open的函数
在看了下测试工程的文件夹结构, 发一个文件: New Unity Project/Library/ScriptAssemblies/Assembly-CSharp.dll
看来这个就是脚本编译后的东西. 用Reflector查看了一下, 果然我写的两个测试脚本都在其中:
另外, UnityEngine.dll里的类全是InternalCall的声明, 这正好印证了上一篇C++导出到Mono的调用猜想
知道了这个, Unity的脚本机制也就差不多了:
1. C++实现引擎底层
2. Mono这边把需要暴露给脚本的类/方法/变量都再声明一次(自动生成应该也是可行的)
3. 定义脚本基类, 所有脚本对象都从它派生
4. 编辑器中发现有脚本更改就在后台重新编译assembly dll, 编译完了用Mono API重新载入
嗯, 中间那一层还是有不少需要实现的东西~
相关文章推荐
- C#脚本实践(二): Unity脚本机制分析
- Unity 3d C#和Javascript脚本互相调用 解决方案(非原创、整理资料,并经过实践得来)
- 【转】Unity脚本机制分析
- unity JavaScript 与 c# 脚本之间的通信
- Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本
- C#脚本实践(四): 反射与序列化
- JS or C#?不存在的脚本之争(UnityScript 不是 Javascript)
- Unity 中的C#脚本
- Unity 3d中导入c#脚本时出现 can't add script 如何解决
- C#开发Unity游戏教程之使用脚本变量
- 【Unity】6.3 通过 C# 脚本创建和访问游戏对象
- c# UnityContainer 依赖注入的分析
- 利用脚本对CSDN博客实践数据收集与分析
- Unity脚本C#参数相互传递
- Unity 用C#脚本读取JSON文件数据
- Unity 3D功能主界面C#脚本
- Unity摇杆控制物体移动c#脚本
- Unity C# 脚本教程
- Nginx源码分析与实践---进程间通信机制(套接字)
- s3c2440基于linux的按键和外部中断驱动实践及驱动机制分析含代码