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.