[英]How to call Unity C# method from Android java project by UnitySendMessage method?
我创建一个Unity项目,并将其添加到我的Android布局中。 一切都很好。 当我尝试使用UnityPlayer.UnitySendMessage(“ GameObject”,“ method”,“ message”)从我的Android项目中调用c#方法时遇到问题。 我收到以下错误:找不到对象跳转!。 我读过很多类似的问题,但有人帮助我。
我给你看我的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");
}
}
这是我的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");
}
}
您应该检查名称为“ Jump”的游戏对象是否在当前场景中退出。 自然地,
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”的方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.