Lately I am working on one Unity3d Game and for using some platform specific feature I required to create a native plugin in C.
I am not done with creating complete plug-in yet and will post more about creating plug-in in separate post. But while I am working on plug-in creation for Unity3D, I required to use callback or notification from C code to Unity c# script.
Following is How we can use callback between C based plugin and C# unity script.
Following is definition of callback function/function pointer which will call C# function.
Now we have required C code for sending notification or providing the callback. But we need to create C# script, which define function which will be called on notification from plug-in.
Following is C# script.
This should be enough to get notification from C code to C# script.
I am not done with creating complete plug-in yet and will post more about creating plug-in in separate post. But while I am working on plug-in creation for Unity3D, I required to use callback or notification from C code to Unity c# script.
Following is How we can use callback between C based plugin and C# unity script.
Following is definition of callback function/function pointer which will call C# function.
typedef void ( *CALLBACK )( const char* ); static CALLBACK cb;This is how we are going to set and use defined callback function.
void runEventLoop(CALLBACK test) { cb = test; cb("hello plugin..."); }Following is complete C code.
extern "C" { typedef void ( *CALLBACK )( const char* ); static CALLBACK cb; void runEventLoop(CALLBACK test) { cb = test; cb("hello plugin..."); } }
Now we have required C code for sending notification or providing the callback. But we need to create C# script, which define function which will be called on notification from plug-in.
Following is C# script.
using UnityEngine; using System.Collections; using System; using System.Runtime.InteropServices; public class PluginImport : MonoBehaviour { public delegate void callbackDelegate( string str ); [DllImport ("Plugin")] private static extern void runEventLoop(callbackDelegate test); void callback(string str) { Debug.Log(str); } void Start () { runEventLoop(new callbackDelegate( this.callback )); } }
This should be enough to get notification from C code to C# script.
That appears to be excellent however i am still not too sure that I like it. At any rate will look far more into it and decide personally!
ReplyDeletecplugin