1. Pengantar
Dalam codelab ini, Anda akan mempelajari cara mengoptimalkan game Android Unity untuk perangkat layar besar dan foldable. Anda akan menggunakan project contoh Lost Crypt untuk menerapkan dukungan rasio aspek, memperluas penggunaan layar penuh, dan merespons status perangkat foldable.
Prasyarat
- Pemahaman dasar tentang pengembangan Unity dan Android.
- Perangkat Android layar besar seperti tablet atau ponsel foldable.
Yang Anda pelajari
- Cara menerapkan dukungan untuk berbagai rasio aspek.
- Cara menggunakan anchor di setelan UI dan kamera game untuk menyesuaikan ukuran layar secara otomatis.
- Cara menggunakan Jetpack Window Manager Android untuk mendeteksi postur lipatan perangkat dan menyesuaikan tata letak.
Yang Anda perlukan
- Unity Hub dan Editor: Unity 2020 LTS atau Unity 2022 terinstal, dengan dukungan build Android.
- Hardware: Perangkat Android layar besar seperti tablet atau ponsel foldable.
- Platform pengembangan agentic seperti Google Antigravity jika Anda berencana menggunakan skill tersebut.
2. Keahlian Agen
Secara opsional, keterampilan agen tersedia untuk mengevaluasi project game Unity Anda. Keterampilan ini membantu Anda menambahkan dukungan untuk kemampuan pengubahan ukuran dan dukungan untuk perangkat layar besar dan perangkat foldable. Untuk mengetahui informasi selengkapnya, lihat: GitHub
Untuk menggunakan keahlian ini:
- Salin file SKILL.md ke direktori agen Anda. Untuk mengetahui informasi selengkapnya tentang cara menambahkan skill, lihat Memulai Google Antigravity.
- Berikan perintah ke agen Anda di Agentic IDE, seperti Antigravity, dengan pertanyaan tentang layar besar, perangkat foldable, atau kemampuan mengubah ukuran.
- Minta agen untuk menambahkan dukungan untuk layar besar dan perangkat foldable.
3. Dukungan Rasio Aspek
Untuk memastikan game Anda ditampilkan dengan benar di berbagai ukuran layar, mulailah dengan menerapkan dukungan untuk berbagai rasio aspek. Anda dapat mempertimbangkan untuk menyesuaikan rasio aspek kamera atau kanvas agar lebih sesuai dengan berbagai layar.
- Pastikan aplikasi Anda menggunakan setelan yang dapat diubah ukurannya untuk layar penuh.
- Di
AndroidManifest.xmlAnda (berlokasi diAssets/Plugins/Android/AndroidManifest.xml):- Setel
android:resizeableActivity="true". - Setel
android:screenOrientation="fullSensor".
- Setel
Contoh:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.unity.lostcryptlargescreenexample.LargeScreenPlayableActivity"
android:theme="@style/UnityThemeSelector"
android:screenOrientation="fullSensor"
android:launchMode="singleTask"
android:resizeableActivity="true"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"
android:hardwareAccelerated="false">
<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" />
</activity>
</application>
</manifest>
- Periksa Build Settings di Unity untuk konfigurasi platform Android.
Catatan: Mendukung berbagai rasio aspek adalah langkah pertama untuk membuat game Anda terlihat bagus di tablet dan perangkat foldable.
4. Penggunaan Layar Penuh
Setelah beradaptasi dengan rasio aspek yang berbeda, pastikan game Anda menggunakan seluruh layar untuk membuat gameplay lebih imersif.
Untuk menggunakan seluruh layar:
- Gunakan penahan di setelan UI dan kamera game Anda. Dengan begitu, elemen UI dapat menyesuaikan posisinya secara otomatis berdasarkan ukuran layar.
- Buka adegan Anchoring dalam project contoh untuk melihat cara penyiapan penjangkaran kanvas UI.
- Dalam adegan Penjangkaran, kanvas diperbarui agar kompatibel dengan frame aman, dan kontrol gerakan ditambatkan ke sudut layar.
Untuk mempertahankan rasio aspek kamera utama, sesuaikan pixelRect kamera secara dinamis. Skrip CameraAspectLock.cs menunjukkan cara merespons perubahan orientasi dan menampilkan tampilan kamera dalam format lebar:
[SerializeField]
private float minAspectRatio = 4f / 3f;
[SerializeField]
private float maxAspectRatio = 21f / 9f;
public void MaintainAspectRatio() {
int viewWidth = Display.main.systemWidth;
int viewHeight = Display.main.systemHeight;
// 1. Calculate screen aspect ratio
float scaleScreen = viewWidth / (float)viewHeight;
Rect rect = _camera.pixelRect;
// 2. Scale to the fullest of the lower between width or height
if (scaleScreen > maxAspectRatio) {
// use height, lock width to max at aspect scale
rect.width = viewHeight * maxAspectRatio;
rect.height = viewHeight;
} else if (scaleScreen < minAspectRatio) {
// use width, lock height to min at aspect scale
rect.width = viewWidth;
rect.height = viewWidth / minAspectRatio;
} else {
// within allowed aspect ratio range, use full screen
rect.width = viewWidth;
rect.height = viewHeight;
}
// make sure to center the rect within the window
rect.x = Mathf.Floor((viewWidth - rect.width) * 0.5f);
rect.y = Mathf.Floor((viewHeight - rect.height) * 0.5f);
Debug.Log("camera view width = " + rect.width +
" height = " + rect.height +
" x = " + rect.x +
" y = " + rect.y);
// 3. Commit the new size to the camera so that it takes effect
_camera.pixelRect = rect;
}
5. Dukungan perangkat foldable
Dengan perangkat foldable, Anda harus menyesuaikan tata letak game berdasarkan posisi lipatan perangkat (misalnya, HALF_OPENED, FLAT) dan ukuran layar secara langsung.
- Gunakan Jetpack Window Manager Android untuk mendeteksi status perangkat.
- Di project contoh, buka adegan HingeAware.
- Adegan ini berisi MonoBehaviour
ConfigurationManageryang menjembatani peristiwa Jetpack WindowManager Android ke Unity dan merespons status pelipatan melalui callbackUnityEvent. HingeSensor.csmembaca sudut engsel menggunakan plugin Javacom.unity.lostcryptlargescreenexample.HingeAngleSensor.
Menggunakan ConfigurationManager
ConfigurationManager.cs berkomunikasi dengan aktivitas Android kustom dan mengurai string JSON yang merepresentasikan status. Objek ini memproses callback onConfigurationChanged dan onFoldChanged dari Aktivitas Android.
[System.Serializable]
public class FoldInfo {
public string orientation;
public string state;
public int isSeparating;
public int boundsLeft;
public int boundsTop;
public int boundsRight;
public int boundsBottom;
}
public void onFoldChanged(string strFoldInfo) {
FoldInfo info = JsonUtility.FromJson<FoldInfo>(strFoldInfo);
// Always call the refresh from the main Unity thread
StartCoroutine(ExecuteOnMainUnityThread(ActionOnFoldChange, info));
}
Anda juga dapat mengkueri status secara serentak menggunakan properti getFoldableState:
public static string getFoldableState {
get {
if (Application.platform == RuntimePlatform.Android) {
var foldingFeatureObject = foldablePlayerActivity.Call<AndroidJavaObject>("getFoldingFeature");
if (foldingFeatureObject != null) {
var state = foldingFeatureObject.Call<AndroidJavaObject>("getState");
return state.Call<string>("toString");
}
}
return "NONE";
}
}
6. Memanfaatkan HingeSensor
Beberapa perangkat foldable memiliki sensor engsel fisik yang memberikan sudut lipatan yang tepat (0 hingga 360 derajat). Anda dapat menggunakannya untuk mendorong mekanisme gameplay atau menyesuaikan kamera.
Di HingeSensor.cs, plugin Android diinisialisasi untuk membaca sensor hardware. Anda juga dapat memeriksa apakah engsel diaktifkan:
public class HingeSensor : IDisposable {
AndroidJavaObject plugin;
public static HingeSensor Start() {
if (Application.platform == RuntimePlatform.Android) {
return OnPlayer.Run(p => {
var context = p.GetStatic<AndroidJavaObject>("currentActivity");
var plugin = new AndroidJavaClass("com.unity.lostcryptlargescreenexample.HingeAngleSensor")
.CallStatic<AndroidJavaObject>("getInstance", context);
if (plugin != null) {
plugin.Call("setupSensor");
return new HingeSensor(plugin);
}
return null;
});
}
return null;
}
public float GetHingeAngle() {
return (Application.platform == RuntimePlatform.Android && plugin != null) ? plugin.Call<float>("getHingeAngle") : -1.0f;
}
public bool IsHingeEnabled() {
return Application.platform == RuntimePlatform.Android && plugin != null && plugin.Call<int>("isHingeEnabled") > 0;
}
}
Catatan: Pastikan untuk memanggil Dispose() atau StopSensing() di instance HingeSensor saat aplikasi Anda dijeda atau dihapus untuk mencegah pengurasan baterai.
7. Membuat file AAB
Untuk membuat file AAB di Unity Editor, ikuti langkah-langkah berikut:
- Di Unity Editor, klik File > Build settings.
- Pilih Build App Bundle ( Google Play ).Untuk mengetahui informasi selengkapnya, lihat Referensi Setelan Build Android.
- Klik Build.
- Download file AAB dari Unity Editor.
Membuat rilis pengujian internal
Untuk membuat rilis pengujian internal dan menambahkan penguji di Konsol Play, lakukan langkah-langkah berikut:
- Di Konsol Google Play, pilih game.
- Buka halaman Uji dan rilis (Pengujian > Pengujian internal).
- Klik Upload, lalu pilih file AAB.
- Di kolom Release details, masukkan nama.
- Klik Berikutnya dan tinjau detail rilis.
- Klik Save and publish.
8. Membangun dan menjalankan project
Sekarang Anda siap membangun project dan mengujinya di perangkat Anda.
- Pastikan Anda telah membuka game.
- Di Konsol Play, buka File > Build Profile (atau Build Settings).
- Pastikan Build App Bundle (Google Play) dicentang jika Anda ingin mengupload ke Konsol Play, atau klik Build and Run untuk men-deploy langsung ke perangkat terhubung Anda.
- Verifikasi perangkat foldable, Anda harus menyesuaikan tata letak game berdasarkan postur lipatan perangkat (Misalnya, HALF_OPENED, FLAT) dan ukuran layar secara langsung.
9. Selamat
Anda telah berhasil mempelajari prinsip-prinsip penyesuaian game Android Unity untuk layar besar dan perangkat foldable.
Survei
Masukan Anda tentang codelab ini sangat berharga. Pertimbangkan untuk meluangkan waktu beberapa menit untuk mengisi survei kami.