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