Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过UnitySendMessage方法从Android java项目调用Unity C#方法?_Java_C#_Android_Eclipse_Unity3d - Fatal编程技术网

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

如何通过UnitySendMessage方法从Android java项目调用Unity C#方法?,java,c#,android,eclipse,unity3d,Java,C#,Android,Eclipse,Unity3d,我创建了一个Unity项目,并将其添加到我的Android布局中。一切都很顺利。当我试图使用UnityPlayer.UnitySendMessage(“GameObject”、“method”、“message”)从我的Android项目调用c#method时,我遇到了问题。我收到以下错误:未找到对象跳转!。我读了很多类似的问题,但有人能帮我吗 在Unity中,我有一个叫做Jump的游戏对象 c#类的名称是Jump 我构建了一个android项目,并在Eclipse中添加了Staging Are

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

  • 在Unity中,我有一个叫做Jump的游戏对象
  • c#类的名称是Jump
  • 我构建了一个android项目,并在Eclipse中添加了Staging Area文件夹(通过创建新的android项目)
  • 此项目被标记为库
  • 我在我的库中添加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");
        }
    }
    
    这是我的统一代码:

    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");
        }
    }
    
    使用UnityEngine;
    使用系统集合;
    公共类跳跃:单一行为{
    AndroidJavaClass和androidClass;
    //用于初始化
    无效开始(){
    AndroidJNIHelper.debug=true;
    使用(AndroidJavaClass jc=新的AndroidJavaClass(“com.unity3d.player.UnityPlayer”){
    jc.CallStatic(“UnitySendMessage”、“Jump”、“performJump”、“doJump”);
    }
    //AndroidJNI.AttachCurrentThread();
    //androidClass=新的AndroidJavaClass(“com.example.footm.Avatar”);
    }
    //每帧调用一次更新
    无效更新(){
    }
    public void performJump(字符串消息){
    //空埃塞库齐昂萨尔托酒店
    GameObject go2=GameObject.Find(“myHumanoid”);
    Animator anim=go2.GetComponent();
    动画游戏(“跳跃1”);
    }
    }
    
    您应该检查名为“跳跃”的游戏对象是否存在于当前场景中。从本质上说

    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”的方法