【发布时间】:2020-12-11 18:15:04
【问题描述】:
我是一名本地开发人员,并且是 Unity 的新手。我试图通过在 Kotlin 中编码然后将我的代码用作 Unity 中的插件来发挥我的优势。我遇到的一个问题是我无法弄清楚如何引用伴随对象内部的函数。
这是我的 Kotlin 课程
class MyAnalytics internal constructor(
private val MyAnalyticsConfiguration: MyAnalyticsConfiguration
) : MyAnalyticsLogger {
.
.
.
override fun logEvent(eventRequest: Event?) {
// some code in here
}
companion object {
@JvmStatic
fun factory(
context: Context,
MyAnalyticsConfiguration: MyAnalyticsConfiguration = MyAnalyticsConfiguration()
) : MyAnalytics {
val eventExecutor = MyWorkManager(
workManager = WorkManager.getInstance(context.applicationContext),
MyAnalyticsConfiguration = MyAnalyticsConfiguration
)
return MyAnalytics(
MyAnalyticsConfiguration
)
}
}
}
我希望能够从我的 Unity 代码中访问 factory 函数。
在 Kotlin 中我可以这样做,
MyAnalytics.factory(
context = requireActivity()
)
但是我怎样才能在 Unity 中做同样的事情呢?这是我尝试过的。
AndroidJavaClass UnityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject UnityPlayerActivity = UnityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject myAnalytics = new AndroidJavaObject("com.test.analytics.MyAnalytics");
AndroidJavaObject analyticsObject = myAnalytics.Call<AndroidJavaObject>("factory", UnityPlayerActivity); //Also tried with 'CallStatic'; no result, same error
我收到的错误是,
AndroidJavaException: java.lang.NoSuchMethodError: no static method with name='factory' signature='(Landroid.app.Application;)Ljava/lang/Object;'在类 Ljava.lang.Object 中; 12-10 14:00:21.883 13537 13674 E Unity: java.lang.NoSuchMethodError: no static method with name='factory' signature='(Landroid.app.Application;)Ljava/lang/Object;'在类 Ljava.lang.Object 中; 12-10 14:00:21.883 13537 13674 E Unity:在 com.unity3d.player.ReflectionHelper.getMethodID(未知来源:162) 12-10 14:00:21.883 13537 13674 E Unity : at com.unity3d.player.UnityPlayer.nativeRender(Native Method) 12-10 14:00:21.883 13537 13674 E Unity:在 com.unity3d.player.UnityPlayer.access$300(未知来源:0) 12-10 14:00:21.883 13537 13674 E Unity : at com.unity3d.player.UnityPlayer$e$1.handleMessage(未知来源:95) 12-10 14:00:21.883 13537 13674 E 统一:在 android.os.Handler.dispatchMessage(Handler.java:103) 12-10 14:00:21.883 13537 13674 E 统一:在 android.os.Looper.loop(Looper.java:214) 12-10 14:00:21.883 13537 13674 E Unity : at com.unity3d.player.UnityPlayer$e.run(Unknown Source:20)
【问题讨论】:
标签: java android unity3d kotlin