繁体   English   中英

如何通过UnitySendMessage方法从Android Java项目中调用Unity C#方法?

[英]How to call Unity C# method from Android java project by UnitySendMessage method?

我创建一个Unity项目,并将其添加到我的Android布局中。 一切都很好。 当我尝试使用UnityPlayer.UnitySendMessage(“ GameObject”,“ method”,“ message”)从我的Android项目中调用c#方法时遇到问题。 我收到以下错误:找不到对象跳转!。 我读过很多类似的问题,但有人帮助我。

  1. 在Unity中,我有一个gameobject调用Jump
  2. C#类的名称是Jump
  3. 我构建一个android项目并在Eclipse中添加Staging Area文件夹(通过创建新的android项目)
  4. 该项目被标记为图书馆
  5. 我在我的图书馆添加classes.jar

我给你看我的android代码:

package com.example.footm;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.os.Bundle;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
//Studio dei movimenti del soggetto

public class AvatarUnity extends UnityPlayerActivity {

    UnityPlayer mUnityPlayer;
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        MachineState.Avatar_Thread_isRunning = true;
        Thread AvatarThread = new Thread(new Runnable(){

            @Override
            public void run() {
                String start_string = "s";
                OutputStream os;
                byte[] byte_start = new byte[start_string.length()];
                byte_start=start_string.getBytes();
                try {

                     os = MachineState.socket.getOutputStream();
                     os.write(byte_start);
                     os.flush();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    MachineState.Avatar_Thread_isRunning=false;
                    e1.printStackTrace();
                }
                byte[] buffer_dati = new byte[1024];
                int count_bytes_read;
                int Pressure_back;
                int Pressure_front;
                //Valori baseline di pressione di un soggetto in piedi (punta e tacco della scarpa)
                int soglia_front = 120;
                int soglia_back = 120;

                InputStream is;
                try {
                    is = MachineState.socket.getInputStream();
                    while((count_bytes_read = is.read(buffer_dati))!=-1 && MachineState.Avatar_Thread_isRunning){
                        String data = new String(buffer_dati,0,count_bytes_read);
                        if(data.length()==19){
                            Pressure_back = Integer.parseInt(data.substring(10, 13), 16);
                            Pressure_front = Integer.parseInt(data.substring(13, 16), 16);
                            if(Pressure_back>soglia_back && Pressure_front>soglia_front){

                                doJump();


                            }

                        }
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


            }

        });
        AvatarThread.start();


    }

    @Override
    public void onBackPressed(){
        Activity a = new Activity();
        a.onBackPressed();
    }

    public static void doJump(){
        com.unity3d.player.UnityPlayer.UnitySendMessage("Jump", "performJump", "doJump");
    }
}

这是我的Unity代码:

using UnityEngine;
using System.Collections;

public class Jump : MonoBehaviour {

    AndroidJavaClass androidClass;
    // Use this for initialization
    void Start () {
        AndroidJNIHelper.debug = true; 
        using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { 
                jc.CallStatic ("UnitySendMessage", "Jump", "performJump", "doJump"); 
        }
//      AndroidJNI.AttachCurrentThread ();
//      androidClass = new AndroidJavaClass("com.example.footm.Avatar");

    }

    // Update is called once per frame
    void Update () {

    }

    public void performJump(string message){
        //Void esecuzione salto
        GameObject go2 = GameObject.Find ("myHumanoid");
        Animator anim = go2.GetComponent<Animator> ();
        anim.Play ("jump_1");
    }
}

您应该检查名称为“ Jump”的游戏对象是否在当前场景中退出。 自然地,

UnityPlayer. UnitySendMessage("Gameobject Name","Method","Message")

我认为您使用AndroidJavaClass的方式错误。

using (AndroidJavaClass jc = new
AndroidJavaClass("com.unity3d.player.UnityPlayer")) { 
//jc.CallStatic ("UnitySendMessage", "Jump", "performJump", "doJump"); 
jc.CallStatic("doJump");

您的android代码中没有称为“ UnitySendMessage”的方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM