Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

荈䖰⿡$PDPB)FBE5BJQFJ ⴕ ٰڅù ❧ ٹډö ✫⛓䖕

Slide 3

Slide 3 text

ّ∣ὕ҂ấĆ ሱ࠭ᾣ

Slide 4

Slide 4 text

https://fb.com/j796160836 Johnny Sung Mobile devices Developer https://plus.google.com/+JohnnySung http://about.me/j796160836 Mobile devices Developer https://plus.google.com/+JohnnySung http://about.me/j796160836

Slide 5

Slide 5 text

Agenda 6OJUZۀ୑∻ᾏࢺ (BNF0CKFDU $PNQPOFOU "OESPJE1MVHJOℯቔ "OESPJEࢤ१ $ࢤ१ ẵσյЇ٢ᇂ֥ᇿၩ൙⇊

Slide 6

Slide 6 text

6OJUZ僽➊랃 %䵔↰ႄౣ ္ॖၛ⇔%(BNF ಆ౯"QQ䵔↰㍇Ⴈ +BWB4DSJQU$#00 ቨℸル֥ॴ௜෻ https://unity3d.com/unity/multiplatform http://www.moneydj.com/kmdj/news/NewsViewer.aspx?a=f4767522-2281-4d16-8ed0-99c6acb797f8

Slide 7

Slide 7 text

X .POPEFWFMPQ

Slide 8

Slide 8 text

6OJUZ涸嚌䙂 GameObject Component

Slide 9

Slide 9 text

GameObject GameObject

Slide 10

Slide 10 text

GameObject Component

Slide 11

Slide 11 text

♧⦐瑠涯涸$PNQPOFOUꟀ鸏垺 using UnityEngine;
 using System.Collections;
 
 public class testComponent : MonoBehaviour {
 
 // Use this for initialization
 void Start () {
 
 }
 
 // Update is called once per frame
 void Update () {
 
 }
 }

Slide 12

Slide 12 text

.POP#FIBWJPVS涸欰ㄐ鹋劍 "XBLF ⶾ鸤儘ⴲ㨥⻋ 4UBSU 㛂遤儘ⴲ㨥⻋ 6QEBUF 粭㕮鶬㕖 ⣜佪腋罜㹁⢿GQT 'JYFE6QEBUF 暟椚鶬㕖

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

C# AndroidJavaClass AndroidJavaObject Java Java
 UnitySendMessage() C#
 (對應的接⼝口) (Unity Engine) (Native) 6OJUZ1MVHJO涸ㄎ〭倰䒭

Slide 16

Slide 16 text

"OESPJE畮彋⪔ Ꟛ倞"OESPJEQSPKFDU 䒸欽DMBTTFTKBS PQUJPOBM 之㻨玑䒭

Slide 17

Slide 17 text

/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)

Slide 18

Slide 18 text

6OJUZㄎ〭"OESPJE涸⿮侸 AndroidJavaClass AndroidJavaObject

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

AndroidJavaObject Call() CallStatic() Get() GetStatic() SetStatic()

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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 + "]"; } ! } ♧⦐矦㋲涸眕⢿

Slide 23

Slide 23 text

AndroidJavaObject obj = new AndroidJavaObject ("com.example.unitytest.Pet");
 obj.Call ("setId", 123);
 obj.Call ("setName", "Lucky");
 string str = obj.Call ("toString");
 Debug.Log (str); Pet obj = new Pet(); obj.setId(123); obj.setName("Lucky"); String str=obj.toString(); Log.v("Unity", str); Java C# ♧⦐矦㋲涸眕⢿

Slide 24

Slide 24 text

try { UnityPlayer.UnitySendMessage(gameObject, method, message); } catch(Exception e) { Log.e("Unity", "UnitySendMessage failed" + e.getMessage()); } ꡠ倴6OJUZ4FOE.FTTBHF GameObject Name Method Name Parameter

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

《䖤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 (“currentActivity"); return a;
 } C# Java

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

糒䪭㸐 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); } ! }

Slide 29

Slide 29 text

AndroidManifest.xml 岤䠑"OESPJE.BOJGFTU

Slide 30

Slide 30 text

䩧⺫㛂遤

Slide 31

Slide 31 text

"OESPJE畮䩧⺫ 鱒ⴀ 玑䒭焺鱒ⴀ䧭KBS "OESPJE.BOJGFTUYNM 须彂墂呪

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

յЇ℻ԛ Assets! Plugins! Android! bin! MyJar.jar! res! drawable-hdpi! drawable-ldpi! …! layout! values! AndroidManifest.xml

Slide 34

Slide 34 text

յЇ℻ԛ 6OJUZ晝劥⟃♳佅䴂 ⻽ⴀ"OESPJE㼠呪

Slide 35

Slide 35 text

Q and A

Slide 36

Slide 36 text

Thanks!

Slide 37

Slide 37 text

佞♳"TTFU4UPSF风㢫䘰

Slide 38

Slide 38 text

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/

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

ꡠ倴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

Slide 41

Slide 41 text

Unity∣Ⴈ‴თ https://www.facebook.com/groups/581769871867384 想做遊戲?