Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
製作 Unity Plugin for Android
Search
Johnny Sung
September 25, 2014
Technology
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
製作 Unity Plugin for Android
製作 Unity Plugin for Android
自從上次講的iOS版本了之後,不講一下Android怎麼可以XD
2014.09.25 @ Android Taipei
Johnny Sung
September 25, 2014
More Decks by Johnny Sung
See All by Johnny Sung
Escape RCA Writing Hell: Using MCP to Let AI Handle the Last Mile of Operations 告別 RCA 撰寫地獄:利用 MCP 讓 AI 替你完成維運最後一哩路 @ DevOpsDays 2026
j796160836
0
100
ArgoCD 新手村:告別手動部署,從 0 到 1 打造自動化部署路徑 @ CNTUG meetup #73
j796160836
0
56
CI/CD 落地指南:用開源 Jenkins & Ansible 打造自動化部署平台 @ DevOps Taiwan Meetup #76
j796160836
0
61
全端 AI 實戰:Gemini x Antigravity 快速開發與 PentestGPT 滲透攻防實務
j796160836
0
100
Event Driven Ansible (EDA) 使用情境分享 @ Red Hat Ansible User Club 線上交流會
j796160836
0
84
用 Gemma 3 開放模型來解決企業難解的問題 @ COSCUP 2025
j796160836
0
75
[GDG Build with AI] 善用現代 AI 科技:打造專屬行銷工具箱 @ GDG Changhua 彰化
j796160836
0
77
Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024
j796160836
0
120
地端自建 Kubernetes (K8s) 小宇宙 (On-premises Kubernetes) @ CNTUG 2024/11 Meetup #63
j796160836
0
120
Other Decks in Technology
See All in Technology
AI コーディングと人間の認知スループット / CTO Night & Day 2026 Morning Session / AI Coding and Human Cognitive Throughput
prog893
4
1k
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
1
150
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
440
Metadata - Section 1: HTML Basics
mohab1
0
120
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
260
夫婦で子育てするための育児標準化
codmoninc
PRO
0
330
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
100
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
140
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
380
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
130
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
620
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Skip the Path - Find Your Career Trail
mkilby
1
260
Mind Mapping
helmedeiros
1
400
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
410
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Visualization
eitanlees
153
17k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Transcript
製作 Unity Plugin for Android Johnny Sung 2014.09.24 @ Android
Taipei
荈䖰$PDPB)FBE5BJQFJ ⴕ ٰڅù ❧ ٹډö ✫⛓䖕
ّ∣ὕ҂ấĆ ሱ࠭ᾣ
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
Agenda 6OJUZۀ∻ᾏࢺ (BNF0CKFDU $PNQPOFOU "OESPJE1MVHJOℯቔ "OESPJEࢤ१ $ࢤ१ ẵσյЇ٢ᇂ֥ᇿၩ൙⇊
6OJUZ僽➊랃 %䵔↰ႄౣ ္ॖၛ⇔%(BNF ಆ౯"QQ䵔↰㍇Ⴈ +BWB4DSJQU$#00 ቨℸル֥ॴ https://unity3d.com/unity/multiplatform http://www.moneydj.com/kmdj/news/NewsViewer.aspx?a=f4767522-2281-4d16-8ed0-99c6acb797f8
X .POPEFWFMPQ
6OJUZ涸嚌䙂 GameObject Component
GameObject GameObject
GameObject Component
♧⦐瑠涯涸$PNQPOFOUꟀ鸏垺 using UnityEngine; using System.Collections; public class testComponent :
MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
.POP#FIBWJPVS涸欰ㄐ鹋劍 "XBLF ⶾ鸤儘ⴲ㨥⻋ 4UBSU 㛂遤儘ⴲ㨥⻋ 6QEBUF 粭㕮鶬㕖 ⣜佪腋罜㹁⢿GQT 'JYFE6QEBUF
暟椚鶬㕖
None
http://docs.unity3d.com/ScriptReference/
C# AndroidJavaClass AndroidJavaObject Java Java UnitySendMessage() C# (對應的接⼝口) (Unity Engine)
(Native) 6OJUZ1MVHJO涸ㄎ〭倰䒭
"OESPJE畮彋⪔ 倞"OESPJEQSPKFDU 䒸欽DMBTTFTKBS PQUJPOBM 之㻨玑䒭
/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)
6OJUZㄎ〭"OESPJE涸侸 AndroidJavaClass AndroidJavaObject
h"p://docs.unity3d.com/ScriptReference/AndroidJavaObject.html
AndroidJavaObject Call() CallStatic() Get() GetStatic() SetStatic()
h"p://docs.unity3d.com/ScriptReference/AndroidJavaObject.Call.html
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 + "]"; } ! } ♧⦐矦㋲涸眕⢿
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# ♧⦐矦㋲涸眕⢿
try { UnityPlayer.UnitySendMessage(gameObject, method, message); } catch(Exception e) { Log.e("Unity",
"UnitySendMessage failed" + e.getMessage()); } ꡠ倴6OJUZ4FOE.FTTBHF GameObject Name Method Name Parameter
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
《䖤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
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
糒䪭㸐 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); } ! }
<?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
䩧⺫㛂遤
"OESPJE畮䩧⺫ 鱒ⴀ 玑䒭焺鱒ⴀ䧭KBS "OESPJE.BOJGFTUYNM 须彂墂呪
None
յЇ℻ԛ Assets! Plugins! Android! bin! MyJar.jar! res! drawable-hdpi! drawable-ldpi! …!
layout! values! AndroidManifest.xml
յЇ℻ԛ 6OJUZ晝劥⟃♳佅䴂 ⴀ"OESPJE㼠呪
Q and A
Thanks!
佞♳"TTFU4UPSF风㢫䘰
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/
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
ꡠ倴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
Unity∣Ⴈ‴თ https://www.facebook.com/groups/581769871867384 想做遊戲?