สวัสดีครับ กลับมาอีกครั้งกับการเขียน Plugin Android นะครับ หลังจากที่เขียนไปในบล็อกที่แล้ว
เนื่องจากผมเพิ่งได้ไปเห็น Feature หนึ่งที่เขาเขียนไว้ใน Document แต่ไม่มีใครพูดถึงเอาซะเลย เลยถือโอกาสนี้ลองดูครับ ถ้าใครอยากอ่านเต็ม ๆ เข้าที่ https://docs.unity3d.com/Manual/AndroidJavaSourcePlugins.html นี้ได้เลยครับ
สำหรับวันนี้จะเป็นการเขียน Plugin ที่เอาไว้สำหรับปริ้นท์ Toast ขึ้นมาบนหน้าจอ Android นะครับ
Prerequisite
- Unity3d 2019.2.0b6 (จริง ๆ 2019.1 ก็ได้ครับ แต่พอดีตอนทำใช้เวอร์ชันนี้พอดี)
เริ่มด้วยการสร้างโปรเจคขึ้นมาอันนึงครับ อันนี้ตั้งชื่อว่า ToastDemo เลือกเป็น 2D ก็พอครับ เพราะว่าเราไม่ได้ทำอะไรมาก เสร็จแล้วก็ CREATE โลด
หลังจากเข้ามาในโปรเจคนะครับ ไปที่ File -> Player Settings แล้วเลือก Android แล้วกด Switch Platform โลดเลยครับ
หลังจาก Switch มาเสร็จสรรพ กด Player Settings ข้างซ้ายต่อเลยครับ แล้วเข้าไปที่ส่วนของ Other Settings เพื่อเซ็ต Bundle Identifier ของโปรเจคนี้ก่อนนะครับ อันนี้ผมตั้งไปว่า dev.warpgate.ToastDemo นะครับ (จริง ๆ จะเป็นอะไรก็ได้นะ ไม่ต้องเป็นอันนี้ก็ได้)
ต่อไปเราจะมาสร้าง Folder สำหรับเก็บโค้ด Kotlin ก่อนนะครับ โดย***ย้ำสำคัญมาก ๆ เลยนะครับ คือ ห้ามเอาไว้ใน Folder พิเศษของ Unity อันต่าง ๆ นะครับ เพราะว่าถ้าอยู่ใน Folder พิเศษ Unity จะไม่เอาโค้ดเราเข้าไปด้วยนะครับ โดยอันนี้สร้างเป็น Natve/Android นะครับ
ทำการเปิดโปรเจคข้างนอกแล้วสร้างไฟล์ Native.kt ได้เลยครับ แล้วทำการเปิด File ขึ้นมาแล้วใส่โค้ดนี้โลด
// Native.kt
package dev.WarpGate.WarpGate
import android.content.Context
import android.widget.Toast
class _Native_ {
fun toastShort(context: _Context_, text: _String_) {
_Toast_.makeText(context, text, _Toast_._LENGTH\_SHORT_).show()
}
fun toastLong(context: _Context_, text: _String_) {
_Toast_.makeText(context, text, _Toast_._LENGTH\_LONG_).show()
}
}
ซึ่งโค้ดนี้ก็คือเป็นโค้ดธรรมดาใน Android ที่เอาไว้ใช้สำหรับการเรียก Toast ขึ้นมาเลยนะครับ สังเกตนะครับว่าชื่อ package ข้างบนนี่จะเหมือนกับของตัว Bundle Identifier เลยนะครับ
หลังที่เขียนเสร็จแล้ว เราจะต้องไปเลือกครับ ว่าจะให้ไฟล์นี้ Import บน Platform ไหนบ้างนะครับ ซึ่งแน่นอนเราจะต้องเลือก Android เพียงอย่างเดียว โดยเราสามารถคลิกที่ไฟล์ แล้วเลือกในหน้าต่าง Inspector ได้เลยครับ
หลังจากนั้นเราต้องทำการเขียนไฟล์ C# ที่จะไปเรียก Plugin นี้ผ่าน Unity นะครับ ทำการสร้าง Scripts/Native/Native.cs ได้เลยครับผม
จากนั้นก็ใส่โค้ด Monobehaviour ได้เลยนะครับ
// Native.cs
using UnityEngine;
public class _Native_ : MonoBehaviour {
private const string m\_UnityPlayerClass = "com.unity3d.player.UnityPlayer";
private const string m\_NativeClass = "dev.warpgate.ToastDemo.Native";
private const string m\_ToastShortMethod = "toastShort";
private const string m\_ToastLongMethod = "toastLong";
public void ToastShort(string text) {
using (AndroidJavaClass unityPlayer = new AndroidJavaClass(m\_UnityPlayerClass)) {
using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity")) {
using (AndroidJavaObject context = currentActivity.Call<AndroidJavaObject>("getApplicationContext")) {
using (AndroidJavaObject native = new AndroidJavaObject(m\_NativeClass)) {
native.Call(m\_ToastShortMethod, context, text);
}
}
}
}
}
public void ToastLong(string text) {
using (AndroidJavaClass unityPlayer = new AndroidJavaClass(m\_UnityPlayerClass)) {
using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity")) {
using (AndroidJavaObject context = currentActivity.Call<AndroidJavaObject>("getApplicationContext")) {
using (AndroidJavaObject native = new AndroidJavaObject(m\_NativeClass)) {
native.Call(m\_ToastLongMethod, context, text);
}
}
}
}
}
}
หลังจากนั้นลองเอา Function พวกนี้ไปใส่ในปุ่มแล้ว Build ลง Android มาลองได้เลยครับ
ในที่สุดดด เราก็มาถึงเวลานี้ครับ เย่ พอเทสแล้วก็จะได้แบบนี้นะครับบ
จะเห็นว่า มี Toast ขึ้นมาด้านล่างครับ ถือว่าประสบความสำเร็จอย่างงดงาม เย่
จบไปแล้วนะครับ สำหรับการเขียน Plugin Android ด้วยไฟล์ Kotlin นะครับ ถ้าเกิดว่ามีใครไม่เข้าใจตรงไหน หรือทำตามแล้วไม่ได้ Comment ไว้ด้านล่างนี้ได้เลยนะครับ :)
Top comments (0)