製作 Unity Plugin for Android

41
製作 Unity Plugin for Android Johnny Sung 2014.09.24 @ Android Taipei

description

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

Transcript of 製作 Unity Plugin for Android

Page 1: 製作 Unity Plugin for Android

製作 Unity Plugin for AndroidJohnny Sung

2014.09.24 @ Android Taipei

Page 2: 製作 Unity Plugin for Android
Page 3: 製作 Unity Plugin for Android

反應還不錯!

(自己講)

Page 4: 製作 Unity Plugin for Android

https://fb.com/j796160836

Johnny SungMobile devices Developer

https://plus.google.com/+JohnnySung

http://about.me/j796160836

Mobile devices Developer

https://plus.google.com/+JohnnySung

http://about.me/j796160836

Page 5: 製作 Unity Plugin for Android

AgendaUnity 概念與簡介

GameObject

Component

Android Plugin實作

Android 接口

C# 接口

檔案打包放置的注意事項

Page 6: 製作 Unity Plugin for Android

3D 遊戲引擎 (也可以寫2D Game)

全球 60% App 遊戲採用

JavaScript / C# / BOO

夭壽強的跨平台

https://unity3d.com/unity/multiplatformhttp://www.moneydj.com/kmdj/news/NewsViewer.aspx?a=f4767522-2281-4d16-8ed0-99c6acb797f8

Page 7: 製作 Unity Plugin for Android

X

Monodevelop

Page 8: 製作 Unity Plugin for Android

GameObject

Component

Page 9: 製作 Unity Plugin for Android

GameObject

GameObject

Page 10: 製作 Unity Plugin for Android

GameObject

Component

Page 11: 製作 Unity Plugin for Android

using UnityEngine;using System.Collections;public class testComponent : MonoBehaviour {     // Use this for initialization    void Start () {        }        // Update is called once per frame    void Update () {        }}

Page 12: 製作 Unity Plugin for Android
Page 13: 製作 Unity Plugin for Android
Page 14: 製作 Unity Plugin for Android

http://docs.unity3d.com/ScriptReference/

Page 15: 製作 Unity Plugin for Android

C# AndroidJavaClass AndroidJavaObject

Java

JavaUnitySendMessage()

C#(對應的接⼝口)

(Unity Engine) (Native)

Page 16: 製作 Unity Plugin for Android
Page 17: 製作 Unity Plugin for Android

/Applications/Unity/Unity.app/Contents/ PlaybackEngines/AndroidPlayer/development/bin

classes.jar 檔案位置

Mac

C:\Program Files (x86)\Unity\Editor\Data\ PlaybackEngines\androidplayer\development\bin

Windows

(optional)

Page 18: 製作 Unity Plugin for Android

AndroidJavaClass

AndroidJavaObject

Page 19: 製作 Unity Plugin for Android

h"p://docs.unity3d.com/ScriptReference/AndroidJavaObject.html

Page 20: 製作 Unity Plugin for Android

AndroidJavaObject

Call()

CallStatic()

Get()

GetStatic()

SetStatic()

Page 21: 製作 Unity Plugin for Android

h"p://docs.unity3d.com/ScriptReference/AndroidJavaObject.Call.html

Page 22: 製作 Unity Plugin for Android

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 + "]"; }!}

Page 23: 製作 Unity Plugin for Android

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#

Page 24: 製作 Unity Plugin for Android

try{ UnityPlayer.UnitySendMessage(gameObject, method, message);}catch(Exception e){ Log.e("Unity", "UnitySendMessage failed" + e.getMessage());}

GameObject Name Method Name Parameter

Page 25: 製作 Unity Plugin for Android

C# public void CallFromObjC(string message){    Debug.Log (message);}

MyViewObject.cs

try { UnityPlayer.UnitySendMessage("MyGameObject", "CallFromObjC", "hello");} catch (Exception e) { e.printStackTrace();}

Java

MyPlugin.java

Page 26: 製作 Unity Plugin for Android

Activityimport 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

Page 27: 製作 Unity Plugin for Android

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

Page 28: 製作 Unity Plugin for Android

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); }!}

Page 29: 製作 Unity Plugin for Android

<?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

Page 30: 製作 Unity Plugin for Android
Page 31: 製作 Unity Plugin for Android
Page 32: 製作 Unity Plugin for Android
Page 33: 製作 Unity Plugin for Android

打包輸出Assets!

Plugins!

Android!

bin!

MyJar.jar!

res!

drawable-hdpi!

drawable-ldpi!

…!

layout!

values!

AndroidManifest.xml

Page 34: 製作 Unity Plugin for Android

打包輸出

Page 35: 製作 Unity Plugin for Android

Q and A

Page 36: 製作 Unity Plugin for Android

Thanks!

Page 37: 製作 Unity Plugin for Android
Page 38: 製作 Unity Plugin for Android

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/

Page 39: 製作 Unity Plugin for Android

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

Page 40: 製作 Unity Plugin for Android

Android Back

public class BackKey : MonoBehaviour{     void Update() {        #if UNITY_ANDROID        if (Input.GetKeyDown(KeyCode.Escape)) {            Application.Quit();  //            Application.LoadLevel("PreviousLevel");        }        #endif    }}

h"p://answers.unity3d.com/quesBons/25535/android-­‐back-­‐bu"on-­‐event.html

Page 41: 製作 Unity Plugin for Android

Unity 應用領域

https://www.facebook.com/groups/581769871867384

想做遊戲?