- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
底层本地插件接口
除基本的脚本接口以外,Unity 的本地代码插件可以在某些事件发生时接受回调。这项功能通常用来在插件中实现底层渲染并使其能够使用 Unity 的多线程渲染。
请注意:目前移动平台不支持插件的渲染回调。
访问图形设备
插件可以通过输出 UnitySetGraphicsDevice
函数,接受图形设备的事件通知。这种方法将在图形设备创建、设备摧毁之前以及在“重置”设备前后调用(仅出现在 Direct3D 9 中)。此函数拥有可以接受设备指针、设备类型和正在发生的事件的参数。
// 如果通过插件输出,此函数将在图形设备创建、摧毁之时 // 以及在重置设备前后(例如,分辨率更改)调用。 extern "C" void EXPORT_API UnitySetGraphicsDevice (void* device, int deviceType, int eventType);
deviceType 可能的值:
enum GfxDeviceRenderer { kGfxRendererOpenGL = 0, // OpenGL kGfxRendererD3D9 = 1, // Direct3D 9 kGfxRendererD3D11 = 2, // Direct3D 11 kGfxRendererGCM = 3, // Sony PlayStation 3 GCM kGfxRendererNull = 4, // "null" device (used in batch mode) kGfxRendererHollywood = 5, // Nintendo Wii kGfxRendererXenon = 6, // Xbox 360 kGfxRendererOpenGLES = 7, // OpenGL ES 1.1 kGfxRendererOpenGLES20Mobile = 8, // OpenGL ES 2.0 mobile variant kGfxRendererMolehill = 9, // Flash 11 Stage3D kGfxRendererOpenGLES20Desktop = 10, // OpenGL ES 2.0 desktop variant (i.e. NaCl) };
eventType 可能的值:
enum GfxDeviceEventType { kGfxDeviceEventInitialize = 0, kGfxDeviceEventShutdown = 1, kGfxDeviceEventBeforeReset = 2, kGfxDeviceEventAfterReset = 3, };
渲染线程插件回调
如果平台及可用 CPU 数量允许,Unity 可以进行多线程渲染。若使用多线程渲染,渲染 API 命令将在与运行 MonoBehaviour 脚本完全分离的线程中执行。因此,插件不一定能立刻开始执行渲染工作,因为它可能与正在执行的渲染线程产生冲突。
为了在插件中执行所有渲染,应从脚本中调用 GL.IssuePluginEvent,它将导致从渲染线程中调用插件。例如,如果从相机的 OnPostRender 函数调用 IssuePluginEvent,就可以在相机完成渲染之后立即进行插件回调。
// 如果有插件输出,此函数将被调用 IssuePluginEvent 的脚本调用。 // 此函数将在渲染线程中被调用;注意在使用线程渲染时, // 渲染线程与执行所有脚本和其他游戏逻辑的主线程有所不同! // 在发生其他插件脚本调用时,应该确保任何必要的同步。 extern "C" void EXPORT_API UnityRenderEvent (int eventID);
示例
可以点击此处下载底层渲染插件的示例。它演示了两项操作:
- 完成所有规则渲染之后,从 C++ 代码渲染旋转的三角形。
- 从 C++ 代码填充程序纹理,并使用 Texture.GetNativeTexturePtr 访问。
此工程适用于 Windows (Visual Studio 2008) 和 Mac OS X (Xcode 3.2),并根据平台使用 Direct3D 9、Direct3D 11 或 OpenGL。Direct3D 9 代码部分还演示了如何处理“丢失”的设备。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论