您的位置:首页 > 移动开发 > Unity3D

Unity调用原生(iOS, Android)方法

2015-09-09 22:11 615 查看
Unity调用原生程序方法,定义接口(doTestSelector),写在Unity的C#代码中,在需要调用iOS或Android中的doTestSelector方法时,触发doTest() :

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public class TestScript : MonoBehaviour {
// This tells unity to look up the function FooPluginFunction
// inside the static binary
[DllImport ("__Internal")]
private static extern float doTestSelector (string info);

void doTest () {
#if UNITY_ANDROID
using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using( AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
{
jo.Call("doTestSelector", "my info");
}
}
#endif

#if UNITY_IPHONE
doTestSelector("my info");
#endif
}


  public void backToUnity () {
    // Do somthing...
  }

}

原生程序对doTestSelector接口的实现,例如iOS,实现写在Unity导出的Xcode项目UnityAppController.mm中:

因为需求限制,所以仍然以Objective-C开发,打开原生ViewController

extern "C" float doTestSelector(const char* info) {
YourViewController *vc = [[YourViewController alloc] initWithNibName:@"yourViewControllerName" bundle:nil];
[[UnityGetMainWindow() rootViewController] presentViewController:vc animated:YES completion:nil];

return 0.0f;
}


关闭原生程序,回到Unity,同样以iOS为例:

- (IBAction)OnClickBack:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
UnitySendMessage("TestScriptGameObject", [@"backToUnity" UTF8String], [@"" UTF8String]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: