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

Gia*_*uca 1 c# java eclipse android unity-game-engine

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

  1. 在 Unity 中,我有一个名为 Jump 的游戏对象
  2. C#类的名称是Jump
  3. 我构建一个 android 项目并在 Eclipse 中添加暂存区文件夹(通过创建新的 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

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

UnityPlayer. UnitySendMessage("Gameobject Name","Method","Message")
Run Code Online (Sandbox Code Playgroud)