Передача данных из Unity в собственное приложение - как? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть два приложения

Нативное приложение для Android (скажем, NAA)

Unity Game (скажем, UG)

Я хочу интегрировать игру единства (UG) в приложение Native Android (NAA)

Я экспортировал игру «Единство» в Android, которая преобразована в библиотеку .aar, и я могу интегрировать UG в NAA. Но я хочу отправить счет игры Unity в приложение для Android.

AndroidManagerScript.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AndroidManager : MonoBehaviour {

    private AndroidJavaObject curActivity;
    public string strLog = "No Java Log";
    static AndroidManager _instance;
    public Text _text;
    public static AndroidManager GetInstance()
    {
        if( _instance == null )
        {
            _instance = new GameObject("AndroidManager").AddComponent<AndroidManager>();   
        }
        return _instance;
    }
    void Awake()
    {

        #if UNITY_ANDROID 
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //AndroidJavaClass jc = new AndroidJavaClass("great.good.com.rolauncher");
        curActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
        #endif


        _text = (Text)GameObject.Find ("Canvas/Text").GetComponent<Text>();
        _text.text = strLog;
    }
    void Start ()
    {
    }
    public void CallJavaFunc( string strFuncName, string strTemp )
    {
        if( curActivity == null )
        {
            strLog = curActivity + " is null";
            return;
        }

        strLog = "Before call " + strFuncName;
        //curActivity.Call(strFuncName, new object[] { strTemp } );

        curActivity.Call( strFuncName, strTemp );
        strLog = strFuncName + " is Called with param " + strTemp;
    }
    void SetJavaLog(string strJavaLog)
    {
        strLog = strJavaLog;
        _text.text = strLog;
    }
}

Я вызываю функцию javaTestFunc при выходе из игры

public void GQuit()
        {
            AndroidManager.GetInstance().CallJavaFunc( "javaTestFunc", "UnityJavaJarTest" );

            Application.Quit();
        }

Собственный код Android

import com.Hash.FC.UnityPlayerActivity;

public class MainActivity extends com.unity3d.player.UnityPlayerActivity {

    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button= (Button)findViewById(R.id.button);
        Log.e("data","start");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, UnityPlayerActivity.class);
                startActivity(i);
            }
        });
    }

    public void javaTestFunc(String strFromUnity) {

        //java to unity
        //UnityPlayer.UnitySendMessage("AndroidManager", "SetJavaLog", strFromUnity + "HelloWorld");
        Log.e("data",strFromUnity);

    }

    public static void testMethod(){
        Log.e("data","data");
    }
}

JavaTestFunc не запускается. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 29 апреля 2019

Идея состоит в том, чтобы просто сохранить данные в persistentDataPath: https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html

и прочитайте эту папку из вашего собственного приложения. Я не уверен в ограничении этого, так как я просто использую Unity3d с собственным приложением для ПК (я не уверен, что можно прочитать файл persistentDataPath, который является / storage / emulated / 0 / Android / data // файлы на Android с другим приложением), но если это возможно, вам просто нужно будет прочитать данные из собственного приложения и записать данные из приложения Unity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...