Lot*_*tan 8 c# java plugins android unity-game-engine
我试图了解如何为 Android 构建我自己的 Android 插件。
我实现了在我的 Java 类(在 AndroidStudio 上创建的)上调用静态方法,但我真的不能调用非静态方法。
我检查这些链接:
https://answers.unity.com/questions/884503/cant-call-non-static-method-in-androidjavaclass.html
http://leoncvlt.com/blog/a-primer-on-android-plugin-development-in-unity/
https://answers.unity.com/questions/1327186/how-to-get-intent-data-for-unity-to-use.html
但没有一个有效。
我正在尝试从 Unity 的按钮中获取呼叫,例如:
AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = UnityPlayer.Get<AndroidJavaObject>("currentActivity");
currentActivity.Call("SayHi");
Run Code Online (Sandbox Code Playgroud)
我在 Android 上的活动如下所示:
public class MainActivity extends UnityPlayerActivity {
private static final String TAG = "LibraryTest";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "Created!");
}
public void SayHi()
{
Log.d(TAG, "HI_");
}
}
Run Code Online (Sandbox Code Playgroud)
我也试过调用而不是 UnityPlayer 调用它:
AndroidJavaClass pluginClass = new AndroidJavaClass("com.example.eric.librarytest.MainActivity");
Run Code Online (Sandbox Code Playgroud)
编辑: 这是我的 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.eric.librarytest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="24"
android:targetSdkVersion="28" />
<application android:label="@string/app_name" >
<activity
android:name="com.example.eric.librarytest.MainActivity"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
但是对于非静态方法也不起作用,如果我这样做pluginClass.CallStatic("")
,它只适用于静态方法,知道吗?
编辑2:
Taras Leskiv 建议将 UnityPlayer.Get 更改为 UnityPlayer.GetStatic,但随后出现以下错误:
错误:java.lang.NoSuchMethodError:在类 Ljava.lang.Object 中没有 name='SayHi' 签名 ='()V' 的非静态方法;
我的代码是正确的,问题在于项目结构。
\n\n我的项目是这样的:
\n\nAssets\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Plugins\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 classes.jar\n
Run Code Online (Sandbox Code Playgroud)\n\n并且应该是这样的:
\n\nAssets\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Plugins\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Android\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 classes.jar\n
Run Code Online (Sandbox Code Playgroud)\n\n显然(不适合我)会导致错误垃圾邮件无法找到签名的消息,因此软件无法读取这些类。
\n 归档时间: |
|
查看次数: |
1486 次 |
最近记录: |