I’ve written a small iOS plugin, and am trying to make an OS X port. In particular, the plugin is for an augmented reality application, so it uses the webcam. Having to build to a device every time I want to test something is slow, so I want to make a version that works in the editor as well (similar to Vuforia).
Since OS X/Desktop doesn’t support UnitySendMessage I’ve been trying to write a simple callback function to replace it.
My native code:
// .h
extern "C" {
typedef void (*callbackFunc)(const char *);
}
static callbackFunc cameraFrameCallback;
// .mm
extern "C" {
void _initWithCamera(const char * camera, GLuint texID, GLfloat width, GLfloat height, callbackFunc callback) {
// some other init here
cameraFrameCallback = callback;
if (cameraFrameCallback != NULL) {
cameraFrameCallback([@"IS THIS PRINTING?" UTF8String]);
}
}
}
C# code:
public delegate void cameraFrameCallback(string message);
[MonoPInvokeCallback(typeof(cameraFrameCallback))]
public static void PrintLog(string message) {
Debug.Log(message);
}
[DllImport("DesktopWrapper")]
private static extern void _initWithCamera(string camera, int texID, float width, float height, cameraFrameCallback callback);
public static void InitWithCamera(string camera, int texID, float width, float height) {
if (Application.platform == RuntimePlatform.OSXEditor) {
_initWithCamera(camera, texID, width, height, PrintLog);
}
}
When I call the init method, I would expect the callback to get registered then send back the call to PrintLog, which would print my message in the Unity console. However, when I run this, I get nothing back. My plugin is actually running though, because I’m getting camera frames back as I would expect, just the callback function isn’t firing.
Am I missing something obvious, or does this just not work in the Editor?