2014-10-16 78 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」 方法