所以我创建了一个在 Unity 游戏中显示广告的插件。在 Unity 中,我想调用扩展 UnityPlayerActivity 的类中的方法。这是我的一些来自 com/mycompany/mygame/MainActivity.java
的代码:
public class MainActivity extends UnityPlayerActivity {
private static AdView adView;
// Code the initializes the ad view goes here
...
public static void hideAd() {
adView.setVisibility(View.INVISIBLE);
}
public static void showAd() {
adView.setVisibility(View.VISIBLE);
}
}
hideAd()
和 showAd()
是我希望能够从 Unity 调用的方法。在 Unity 中,这是我必须测试我的插件的一些示例代码:
AndroidJavaClass ajc;
bool ohBool = true;
void Update () {
foreach (Touch touch in Input.touches) {
if (touch.phase == TouchPhase.Began) {
// Call my function
float touchLoc = Camera.main.ScreenToWorldPoint(touch.position).y;
if (touchLoc > 0.0f) {
if (showAd) {
ajc.CallStatic("hideAd");
showAd = false;
}
else {
ajc.CallStatic("showAd");
showAd = true;
}
}
}
}
}
但是,只要发生这些函数调用,LogCat 就会向我吐这个:
AndroidJavaException: android.view.ViewRootImpl$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.
我该怎么办?
编辑:这是我要求的初始化代码:
void Start() {
AndroidJNI.AttachCurrentThread();
ajc = new AndroidJavaClass("com.mycompany.mygame.MainActivity");
}
最佳答案
首先尝试附加当前线程。
void Start() {
AndroidJNI.AttachCurrentThread();
AndroidJavaClass ajc = new AndroidJavaClass("com.mycompany.mygame.MainActivity"); //This is your java class hierarchy
ajc.CallStatic("showAd");
}
关于c# - Android & Unity3D - 函数调用转到错误的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749341/