nfa*_*chi 6 c# plugins android unity-game-engine
我正在为Unity 3d编写一个android插件,我的问题是初始化我需要将applicationContext传递给一个方法.所以我MyPlugin.cs就像在下面
using UnityEngine;
using System.Collections;
public class MyPlugin : MonoBehaviour {
void Awake () {
Debug.Log ("awake");
Initialize ();
}
public static void Initialize()
{
AndroidJavaClass playerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = playerClass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass pluginClass = new AndroidJavaClass("com.mycompany.product.UnityPlugin");
pluginClass.CallStatic("initialize", new object[1] {activity});
}
}
Run Code Online (Sandbox Code Playgroud)
在android UnityPlugin.java类中我有
public class UnityPlugin extends Plugin {
static public void initialize (Activity unityActivity){
try {
MyApp.initialize(unityActivity.getApplicationContext());
} catch (NullPointerException e){
Log.d("unity", "null pointer exception");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我NullPointerException一直都很开心 AppilcationContext从团结活动中获得正确的方法是什么?
Raf*_*ski 10
首先,检查pluginClass是否为null
if(pluginClass == null) Debug.Log("plugin class is null");
Run Code Online (Sandbox Code Playgroud)
如果它确保您使用正确的字符串参数创建新的AndroidJavaClass.
接下来,我不知道你为什么要传递一个Activity的数组而不是传递Unity的上下文.尝试这样的事情:
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
pluginClass.CallStatic("initialize", context);
Run Code Online (Sandbox Code Playgroud)
您还需要以下列方式更改插件端:
public class UnityPlugin extends Plugin {
static public void initialize (Context unityContext){
try {
MyApp.initialize(unityContext);
} catch (NullPointerException e){
Log.d("UnityPlugin", "Null PTR Exception");
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8022 次 |
| 最近记录: |