Tôi có một dự án thư viện android và đã nhập dự án thư viện vào dự án Unity. Bây giờ, tôi muốn thực hiện một cuộc gọi lại trong dự án Unity, mà sẽ thực hiện theo phản ứng được đưa ra bởi dự án thư viện android. Tôi có nghĩa là để nói, Call Script File phương pháp từ UnityPlayerActivity (Android dự án).Trình nghe gọi lại trong Unity - Cách gọi phương thức tệp kịch bản từ UnityPlayerActivity trong Android
Hiện nay tôi đang sử dụng bên dưới dòng mã nhưng không có gì xảy ra:
UnityPlayer.UnitySendMessage("Main Camera","showMessage",errorMessage);
Main Camera
là trò chơi đối tượng của tôi. showMessage
là tên thông báo trong Tệp Tập lệnh. Message
là thông báo sẽ được hiển thị trong Unity thông qua Hoạt động Android.
Vui lòng kiểm tra mã dưới đây của tôi Tệp Unity Script và Hoạt động Android.
Unity Script File:
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");
}
}
tệp của 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 stub
UnityPlayer.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");
}
}
bất cứ ai có thể giúp tôi để thoát khỏi vấn đề này?
Hãy chắc chắn rằng kịch bản của bạn gắn liền với camera chính (Gameobject được gọi). xem ref http://answers.unity3d.com/questions/366452/call-a-unity-script-function-from-android-java-cod.html – Vivek
vivek có, đã được đính kèm chính xác. – user1986760
Cá nhân tôi không thích hệ thống nhắn tin Unity, tại sao không sử dụng giao diện để gọi lại? –