【问题标题】:How can I use Java Plugin in Unity如何在 Unity 中使用 Java 插件
【发布时间】:2017-10-12 00:34:06
【问题描述】:

我尝试在 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");

    }

}

统一使用 SendMessage() 方法,使用 AndroidJavaClass 和 CallStatic。

成功了。

我可以通过unity查看设备中的消息。

但是,发生了一个错误。

如果我像这样改变方法,

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 方法类型。(静态字符串为字符串)

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

但我找不到它。

如果你知道,请帮助我。

【问题讨论】:

  • stackoverflow.com/questions/27550280/… 我认为这与您的问题有些相似。如果函数被调用,你还可以添加一个调试语句来检查 logcat
  • @David 谢谢我试过了。
  • @killer_mech 是的,我认为这是我的问题,但我找不到。
  • @PolarisNation 你检查过下面的答案了吗?很久以前我也有类似的问题,当时我正在开发统一的 android 插件并且不得不做 Arshia001 提到的类似的事情。一个建议是尝试将调试语句放入代码中,看看它在哪里停止。尝试在代码中添加静态方法并在其中添加调试语句。您还可以阅读有关如何创建插件/获取插件包并尝试调用该插件的更多信息。我看到一些教程提供了插件可能在谷歌中搜索那些。我认为这是我在当前信息中可以提供的最大帮助:(

标签: android unity3d plugins


【解决方案1】:

您可以使用“类型”来调用静态方法,因为静态事物绑定到它们的定义类型。但是,您不能在没有 instance 类型的情况下使用 instance 方法(即非静态方法)。这就是你第二次尝试失败的原因。要调用实例方法,您必须获取该类型的实例,或者通过调用 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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多