Upgrade to Pro — share decks privately, control downloads, hide ads and more …

製作 Unity Plugin for Android

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Johnny Sung Johnny Sung
September 25, 2014

製作 Unity Plugin for Android

製作 Unity Plugin for Android
自從上次講的iOS版本了之後,不講一下Android怎麼可以XD
2014.09.25 @ Android Taipei

Avatar for Johnny Sung

Johnny Sung

September 25, 2014
Tweet

More Decks by Johnny Sung

Other Decks in Technology

Transcript

  1. ♧⦐瑠涯涸$PNQPOFOUꟀ鸏垺 using UnityEngine;
 using System.Collections;
 
 public class testComponent :

    MonoBehaviour {
 
 // Use this for initialization
 void Start () {
 
 }
 
 // Update is called once per frame
 void Update () {
 
 }
 }
  2. package com.example.unitytest; ! public class Pet { private int id;

    private String name; ! public void setId(int id) { this.id = id; } ! public void setName(String name) { this.name = name; } ! @Override public String toString() { return "Pet [id=" + id + ", name=" + name + "]"; } ! } ♧⦐矦㋲涸眕⢿
  3. AndroidJavaObject obj = new AndroidJavaObject ("com.example.unitytest.Pet");
 obj.Call ("setId", 123);
 obj.Call

    ("setName", "Lucky");
 string str = obj.Call<string> ("toString");
 Debug.Log (str); Pet obj = new Pet(); obj.setId(123); obj.setName("Lucky"); String str=obj.toString(); Log.v("Unity", str); Java C# ♧⦐矦㋲涸眕⢿
  4. try { UnityPlayer.UnitySendMessage(gameObject, method, message); } catch(Exception e) { Log.e("Unity",

    "UnitySendMessage failed" + e.getMessage()); } ꡠ倴6OJUZ4FOE.FTTBHF  GameObject Name Method Name Parameter
  5. C# 䱺佐 ꡠ倴6OJUZ4FOE.FTTBHF  public void CallFromObjC(string message)
 {
 Debug.Log

    (message);
 } MyViewObject.cs try { UnityPlayer.UnitySendMessage("MyGameObject", "CallFromObjC", "hello"); } catch (Exception e) { e.printStackTrace(); } Java ⫄鷑 MyPlugin.java
  6. 《䖤Activity import android.app.Activity; import com.unity3d.player.UnityPlayer; ! public class MyViewPlugin {

    public static Activity getActivity() { Activity a = UnityPlayer.currentActivity; return a; } } public static AndroidJavaClass getActivity ()
 {
 AndroidJavaClass player; player = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
 AndroidJavaObject a; a = player.GetStatic<AndroidJavaObject> (“currentActivity"); return a;
 } C# Java
  7. package com.unity3d.player; ! public class UnityPlayerNativeActivity extends NativeActivity { //

    don't change the name of this variable; referenced from native code protected UnityPlayer mUnityPlayer; ! // Setup activity layout @Override protected void onCreate (Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); ! getWindow().takeSurface(null); setTheme(android.R.style.Theme_NoTitleBar_Fullscreen); getWindow().setFormat(PixelFormat.RGB_565); ! mUnityPlayer = new UnityPlayer(this); if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true)) getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); ! setContentView(mUnityPlayer); mUnityPlayer.requestFocus(); } ! // Quit Unity @Override protected void onDestroy () { mUnityPlayer.quit(); super.onDestroy(); } ! // … UnityPlayerNativeActivity.java
  8. 糒䪭㸐 package com.example.unitytest; ! import android.os.Bundle; ! import com.unity3d.player.UnityPlayerNativeActivity; !

    public class MainActivity extends UnityPlayerNativeActivity { ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } ! }
  9. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.unitytest" android:theme="@android:style/Theme.NoTitleBar" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal">

    <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" /> <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false"> <activity android:label="@string/app_name" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen| keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize| smallestScreenSize|fontScale" android:name="com.example.unitytest.UnityPlayerNativeActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" /> </activity> </application> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="20" /> <uses-feature android:glEsVersion="0x00020000" /> </manifest> AndroidManifest.xml 岤䠑"OESPJE.BOJGFTU
  10. References Unity Webview https://github.com/gree/unity-webview Building Plugins for Android http://docs.unity3d.com/Manual/PluginsForAndroid.html 藍斯洛‧雜技的雜記:

    Unity3D Plug-in for Android -- Activity 擴展⽅方法 http://lancelotdiary.blogspot.tw/2012/05/unity3d-plug-in-for- android-activity.html 懂點Unity Plugin,替荷包省點錢!(安卓 Android篇) http://www.unityin.com/2013/05/%E6%87%82%E9%BB%9Eunity-plugin%EF%BC%8C %E6%9B%BF%E8%8D%B7%E5%8C%85%E7%9C%81%E9%BB%9E%E9%8C%A2%EF%BC %81%E5%AE%89%E5%8D%93-android%E7%AF%87/
  11. Unity3D研究院之打開Activity與調⽤用JAVA代碼傳遞參數 http://www.xuanyusong.com/archives/667 Unity GPS plugin development tutorial: 
 building a

    Android plugin for Unity with Eclipse and Ant http://www.mat-d.com/site/unity-gps-plugin-development-tutorial- building-a-android-plugin-for-unity-with-eclipse-and-ant/ References
  12. ꡠ倴Android 涸Back ꒳ public class BackKey : MonoBehaviour
 {
 void

    Update() {
 #if UNITY_ANDROID
 if (Input.GetKeyDown(KeyCode.Escape)) {
 Application.Quit(); // Application.LoadLevel("PreviousLevel");
 }
 #endif
 }
 } #BDL꒳剚㼩䥰ⵌ꒳湏涸&TD h"p://answers.unity3d.com/quesBons/25535/android-­‐back-­‐bu"on-­‐event.html