2023-01-21 280
我有一个Android库项目,并在Unity项目中导入了图书馆项目.现在,我想在Unity项目中实现回调,该项目将根据Android Library项目给出的响应执行.我的意思是说,从UnityPlayerActivity(Android Project)调用脚本文件方法.
目前我正在使用以下代码行,但什么也没有发生:
UnityPlayer.UnitySendMessage("Main Camera","showMessage",errorMessage);
Main Camera是我的游戏对象. showMessage是脚本文件中的消息名称.
Message是消息,将通过Android活动以统一显示.
请检查我的下面代码Unity脚本文件和Android活动.
Unity脚本文件:
using UnityEngine;
using System.Collections;
public class scriptfile : MonoBehaviour {
// Use this for initialization
void Start () {
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("shareText","236","236");
}
void showMessage(string message){
print ("hello");
Debug.Log ("hello");
}
}
Android文件UnityPlayerActivity:
/** * Created by CH-E01073 on 28-09-2015. */ public class MainAct extends UnityPlayerActivity implements RegistrationListener,BOffersListener { Context context; SharedPreferences prefs ; String AppIds=""; String PublisherIDs=""; public void shareText(String AppId,String PublisherID) { context=MainAct.this; prefs = PreferenceManager .getDefaultSharedPreferences(context); Log.e("AppID", AppId); Log.e("PublisherID",PublisherID); AppIds=AppId; PublisherIDs=PublisherID; runOnUiThread(new Runnable() { @Override public void run() { UnityPlayer.UnitySendMessage("Main Camera","showMessage","Start UI Thread"); if (prefs.getString(FreeBConstants.ID, null) == null || prefs.getString(FreeBConstants.ID, null).equals("") || !Build.VERSION.RELEASE.equals(prefs.getString( FreeBConstants.VERSION, null)) || !FreeBCommonUtility.getDeviceId(context).equals( (prefs.getString(FreeBConstants.DEVICE_ID, null)))) { BSDKLogger.enableLogging(true); SDKRegistration.initialize(MainAct.this, getApplicationContext(), AppIds,PublisherIDs); }else{ Offers Offers = new Offers(MainAct.this); Offers.setOnFreeBOffersListener(MainAct.this); Offers.setTitle( "Pick Any Offer to unlock your premium features", "#FFFFFF", "#FF6D00"); } } }); } @Override public void onOffersLoaded(String code,String freeBOffers) { CommonUtility.showToast(getApplicationContext(), code); UnityPlayer.UnitySendMessage("Main Camera","showMessage",freeBOffers); } @Override public void onShowOffers() { UnityPlayer.UnitySendMessage("Main Camera","showMessage","Show Offers"); } @Override public void noOfferInstalled(String s, String s2) { } @Override public void onLeaveApplication(String s, String s2) { } @Override public void onDialogDismiss(String s) { } @Override public void onOffersFailed(String code, String errorMessage) { FreeBCommonUtility.showToast(getApplicationContext(), errorMessage);UnityPlayer.UnitySendMessage("Main Camera","showMessage",errorMessage);
} @Override public void onOffersInstallSuccess(String code, String errorMessage) { FreeBCommonUtility.showToast(getApplicationContext(), errorMessage); } @Override public void onOffersInstallFailure(String code, String errorMessage) { FreeBCommonUtility.showToast(getApplicationContext(), errorMessage); } @Override public void onRegistrationFailed(String code, String errorMessage) { FreeBCommonUtility.showToast(getApplicationContext(), errorMessage);UnityPlayer.UnitySendMessage("Main Camera","showMessage",errorMessage);
} @Override public void onRegistrationSuccess(String code, String errorMessage) { // FreeBCommonUtility.showToast(getApplicationContext(), errorMessage); Log.e("SUCCESS", errorMessage); // TODO Auto-generated method stubUnityPlayer.UnitySendMessage("Main Camera","showMessage",errorMessage);
Offers Offers = new Offers(MainAct.this); Offers.setOnFreeBOffersListener(MainAct.this); Offers.setTitle( "Pick Any Offer to unlock your premium features", "#FFFFFF", "#FF6D00"); } }
任何人可以帮助我摆脱这个问题吗?
另一个选项将是使用 androidjavaproxy 实现接口回调.您可以简单地在Java代码中使用接口回调,然后在C#中实现此接口,然后在C#中使用 androidjavaproxy 并将其传递给Java方法以接收消息.
创建您的Java接口:
package com.example.android;
public interface PluginCallback {
public void onSuccess(String videoPath);
public void onError(String errorMessage);
}
致电传递的侦听器/回调返回消息
public void myPluginMethod(PluginCallback callback) {
// Do something
callback.onSuccess("onSuccess");
// Do something horrible
callback.onError("onError");
}
在C#
中实现接口
class AndroidPluginCallback : AndroidJavaProxy
{
public AndroidPluginCallback() : base("com.example.android.PluginCallback") { }
public void onSuccess(string videoPath) {
Debug.Log("ENTER callback onSuccess: " + videoPath);
}
public void onError(string errorMessage)
{
Debug.Log("ENTER callback onError: " + errorMessage);
}
}
将C#接口传递到Java方法
AndroidJavaObject pluginClass = new AndroidJavaObject("com.example.android.MyPlugin");
pluginClass.Call("myPluginMethod", new AndroidPluginCallback());
我相信您只允许您从主线程打电话 unitySendMessage() – 至少在上面的一种情况下,您是从Android UI Worker线程调用的.
.
作为快速的理智测试,请尝试在 shareText()函数的顶部之前调用它.
以上所述是小编给大家介绍的Unity中的回调听众 – 如何从Android中的UnityPlayerActivity调用脚本文件方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26334.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态