2017-10-12 38 views
0

我嘗試在android studio中製作插件以在Unity中使用。如何在Unity中使用Java插件

所以我在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。

這是成功。

我可以通過統一檢查設備中的消息。

但是,發生一個錯誤。

如果我改變這樣的方法,

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到插件.Call

如果我只是刪除靜態,但它不返回任何結果。

https://docs.unity3d.com/kr/current/ScriptReference/AndroidJavaClass.html

我只是改變類型。但沒有回報。

我想我錯由AndroidJavaClass通話方法,

,但我無法找到它。

如果你瞭解它,請幫助我。

+0

https://xinyustudio.wordpress.com/2015/12/31/step-by-step-指南爲開發Android插件爲unity3d-i/ – David

+0

https://stackoverflow.com/questions/27550280/unity-call-android-function-from-unity 這是我覺得有點similer你的問題。 你也可以添加一個調試語句來檢查logcat中該函數是否被調用 –

+0

@David謝謝我試過了。 –

回答

1

您可以使用「類型」來調用靜態方法,因爲靜態的東西被綁定到它們的定義類型。但是,您不能使用實例方法(即非靜態方法),而不使用實例的類型。這就是爲什麼你的第二次嘗試失敗。要調用實例方法,你必須,無論是通過調用這樣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"); 
相關問題