如何在Unity

时间:2017-10-12 00:34:06

标签: android unity3d plugins

我尝试在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调用方法,

但我无法找到它。

如果你知道,请帮助我。

1 个答案:

答案 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");