Unity的Native plugin

调研到的结果:

Native plugin的好处:

1、资源、代码、核心算法保密(例如渲染算法、加密算法等)

2、性能提高(c++库效率比C#要高一个数量级,即便是il2cpp也有极大差异)

3、前后端都会使用的功能(例如生成的行走层,客户端和服务器都需要访问)

4、不用修改代码就能扩充接口,例如目前Unity还不支持Multi indirect draw,但是图形API和硬件很多都已经支持了,可以通过这种方式进行扩充。

坏处:

1、如果有渲染相关的功能,每种图形API都要有对应的实现。不过shader可以统一使用hlsl,使用HLSLcc编译成对应平台的shader,参考:unwind:跨平台引擎Shader编译流程分析

2、调试不方便。Windows下使用VS直接钩挂进程可以单步调试,Mac下没试过。

有价值的资料:

1、官方的开源项目对于学习Native rendering很有帮助,但是框架不好:iOS下还需要将plugin的源码拷贝到Xcode里,做不到保密,开发流程也很低效。

preview

2、框架建议使用https://github.com/kyochow/xor_unity_native统一用Cmake进行编译,并且所有平台都编译出静态或者动态库,直接拷贝到Unity工程里就能用。

3、DligentGraphics有个Unity的Native Plugin

http://diligentgraphics.com/diligent-engine/integration-with-unity/

使用Native OpenGL渲染Unity场景需要以下步骤: 1. 创建一个Native Plugin项目,并将OpenGL渲染代码添加到其中。 2. 在Unity中导入该Native Plugin,并在需要渲染的场景对象或摄像机上添加一个脚本,该脚本将调用Native Plugin中的OpenGL渲染函数。 3. 在渲染过程中,您需要将Unity场景中的模型、纹理、材质等信息转换为OpenGL可用的数据格式,并在OpenGL上下文中进行渲染。 下面是具体实现的步骤: 1. 创建一个Native Plugin项目 在Visual Studio中创建一个C++项目,选择“DLL”作为项目类型。然后将OpenGL渲染代码添加到该项目中。 2. 导入Native PluginUnityNative Plugin生成的DLL文件和相关头文件拷贝到Unity项目的Assets/Plugins目录下,然后在Unity中创建一个脚本,用于调用Native Plugin中的OpenGL渲染函数。 在脚本中使用DllImport特性引入Native Plugin中的函数,并在需要渲染的场景对象或摄像机上添加该脚本。 ``` using UnityEngine; using System.Runtime.InteropServices; public class OpenGLRenderer : MonoBehaviour { [DllImport("NativePlugin")] private static extern void RenderFrame(); void OnPostRender() { GL.PushMatrix(); GL.LoadOrtho(); RenderFrame(); GL.PopMatrix(); } } ``` 3. 渲染Unity场景 在OpenGL渲染函数中,您需要将Unity场景中的模型、纹理、材质等信息转换为OpenGL可用的数据格式,并在OpenGL上下文中进行渲染。 以下是一个简单的OpenGL渲染函数实现,用于渲染Unity场景: ``` void RenderFrame() { // 清空颜色缓冲区和深度缓冲区 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 获取摄像机矩阵 Matrix4x4 cameraMatrix = Camera.main.worldToCameraMatrix; float[] cameraMatrixArray = Matrix4x4ToArray(cameraMatrix); // 获取投影矩阵 Matrix4x4 projectionMatrix = Camera.main.projectionMatrix; float[] projectionMatrixArray = Matrix4x4ToArray(projectionMatrix); // 绑定Unity场景中的纹理 Texture2D texture = GetComponent<Renderer>().material.mainTexture; int textureID = texture.GetNativeTexturePtr().ToInt32(); glBindTexture(GL_TEXTURE_2D, textureID); // 绘制模型 glBegin(GL_TRIANGLES); // 顶点坐标 glVertex3f(0.0f, 0.5f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.0f); glVertex3f(0.5f, -0.5f, 0.0f); // 纹理坐标 glTexCoord2f(0.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glEnd(); // 刷新OpenGL缓冲区 glFlush(); } ``` 以上是使用Native OpenGL渲染Unity场景的基本步骤,您可以根据自己的需求进行相应的调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值