我尝试在android studio中制作插件以在Unity中使用。
所以我在android studio中制作了这个方法。
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public static String SendMessage(){
return "Message";
}
}
在Unity中,
public class PluginWrapper : MonoBehaviour {
// Use this for initialization
void Start () {
TextMesh textMesh = GetComponent<TextMesh> ();
var plugin = new AndroidJavaClass ("com.thewell_dev.beaconf.MainActivity");
textMesh.text = plugin.CallStatic<string> ("ReturnMessage");
}
}
使用AndroidJavaClass和CallStatic以统一方式使用SendMessage()方法。
这是成功的。
我可以通过统一检查设备中的消息。
但是,发生了一个错误。
如果我改变这样的方法,
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public String SendMessage(){
return "Message";
}
}
更改SendMessage方法类型。(static String to String)
在Unity中,
public class PluginWrapper : MonoBehaviour {
// Use this for initialization
void Start () {
TextMesh textMesh = GetComponent<TextMesh> ();
var plugin = new AndroidJavaClass ("com.thewell_dev.beaconf.MainActivity");
textMesh.text = plugin.Call<string> ("ReturnMessage");
}
}
将plugin.CallStaic更改为plugin.Call
如果我只是删除静态,但它不会返回任何结果。
https://docs.unity3d.com/kr/current/ScriptReference/AndroidJavaClass.html
我只是改变了类型。但没有回报。
我想我错误地通过AndroidJavaClass调用方法,
但我无法找到它。
如果你知道,请帮助我。
答案 0 :(得分:1)
您可以使用“types”来调用静态方法,因为静态事物被绑定到它们的定义类型。但是,如果没有该类型的实例,则不能使用实例方法(非静态方法)。这就是你的第二次尝试失败的原因。要调用实例方法,必须通过调用java构造函数来自己创建一个类型的实例:
var object = new AndroidJavaObject ("com.some.class", constructor_param1, constructor_param2, constructor_param3, ...);
result = object.Call<string> ("SomeMethod");
或,为了获得类似于在C#脚本范围之外构建的活动的实例,您可以使用静态方法来检索您正在寻找的实例:
var type = new AndroidJavaClass ("com.some.class");
var object = type.CallStatic<AndroidJavaObject>( "SomeStaticGetterMethod" );
result = object.Call<string> ("SomeMethod");