2014-10-16 79 views
0

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

  1. 在Unity我有一个游戏对象调用跳转
  2. C#类的名称是跳转
  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"); 
    } 
} 

,这是我的统一编码:

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"); 
    } 
} 

回答

2

您应该检查是否有名为“跳”的游戏对象上当前场景中退出。本质上,

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

我想你是用AndroidJavaClass错误的方式。

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

有没有在你的Android代码名为 “UnitySendMessage” 方法