Sebagian besar struktur API dan proyek Unity identik untuk semua platform yang didukung dan kadang-kadang proyek dapat dibangun kembali untuk menjalankan perangkat yang berbeda. Namun, perbedaan mendasar dalam metode hardware dan deployment berarti bagian dari sebuah proyek tidak dapat port antara platform tanpa perubahan. Halaman ini mencantumkan beberapa masalah dan saran lintas platform umum untuk menyelesaikannya.
Contoh terbaik dari perilaku yang berbeda antara platform dalam metode input yang ditawarkan oleh perangkat keras.
Fungsi Input.GetAxis nyaman di platform desktop untuk mengkonsolidasikan keyboard dan input joypad. Fungsi ini tidak cocok untuk platform seluler yang bergantung pada input layar sentuh. Input keyboard desktop standar hanya cocok untuk porting teks ke perangkat seluler. Anda dapat menambahkan lapisan abstraksi ke kode input Anda jika Anda mempertimbangkan port ke platform lain di masa depan. Misalnya, jika Anda membuat game mengemudi, maka Anda mungkin membuat kelas input Anda sendiri dan membungkus panggilan API Unity dalam fungsi Anda sendiri:
// Returns values in the range -1.0 .. +1.0 (== left .. right).
function Steering() {
return Input.GetAxis("Horizontal");
}
// Returns values in the range -1.0 .. +1.0 (== accel .. brake).
function Acceleration() {
return Input.GetAxis("Vertical");
}
var currentGear: int;
// Returns an integer corresponding to the selected gear.
function Gears() {
if (Input.GetKeyDown("p"))
currentGear++;
else if (Input.GetKeyDown("l"))
currentGear--;
return currentGear;
}
Mengikat panggilan API di kelas menempatkan mereka ke dalam satu file sumber dan membuat panggilan mudah untuk menemukan dan mengganti. Anda harus merancang fungsi input Anda sesuai dengan makna logis dari input dalam permainan Anda. Ini membantu mengisolasi sisa kode permainan dari metode input tertentu yang digunakan dengan platform tertentu.
Misalnya, Anda dapat memodifikasi fungsi Gears di atas sehingga input aktual berasal dari sentuhan pada layar perangkat mobile. Anda dapat menggunakan bilangan bulat untuk mewakili karya gigi yang dipilih untuk semua platform, tetapi jika Anda mencampur panggilan API spesifik platform dengan sisa kode, Anda dapat menyebabkan masalah. Anda juga dapat menggunakan kompilasi tergantung platform untuk menggabungkan implementasi fungsi input yang berbeda dalam file sumber yang sama dan menghindari swap manual.
Fungsi Input.GetMouseButtonXXX dirancang untuk memiliki interpretasi yang jelas pada perangkat seluler. Layar melaporkan sentuhan sederhana sebagai klik kiri dan properti Input.mousePosition memberikan posisi sentuhan, selama jari menyentuh layar. Game dengan interaksi mouse sederhana sering dapat bekerja secara transparan antara platform desktop dan seluler.
Konversi seringkali jauh lebih mudah daripada ini. Misalnya, permainan desktop dapat menggunakan lebih dari satu tombol mouse dan permainan mobile dapat mendeteksi beberapa sentuhan pada layar pada waktu. Untuk membantu mengelola ini, Anda dapat mewakili masukan dengan nilai logis yang kemudian digunakan oleh sisa kode permainan.
Misalnya, Anda mungkin mengganti gestur pinch untuk memperbesar perangkat seluler dengan +/- keystroke di desktop; fungsi input dapat mengembalikan nilai float yang menentukan faktor zoom. Demikian juga, mungkin untuk menggunakan keran dua arah di ponsel untuk mengganti tombol kanan klik di desktop. Namun, jika sifat perangkat input adalah bagian integral dari permainan maka mungkin tidak mungkin untuk mengubahnya pada platform yang berbeda. Ini mungkin berarti bahwa Anda tidak dapat port permainan atau bahwa Anda perlu memodifikasi input atau gameplay secara luas.
Input ini berasal dari mobilitas perangkat genggam dan mungkin tidak memiliki setara yang berarti di desktop. Namun, beberapa kasus penggunaan hanya kontrol game standar cermin dan port dengan mudah. Misalnya, permainan mengemudi mungkin menerapkan kontrol kemudi dari kemiringan perangkat mobile (dihentikan oleh accelerometer). Dalam kasus seperti ini, panggilan API input biasanya mudah diubah, sehingga Anda dapat mengganti input accelerometer dengan keystrokes.
Namun, mungkin perlu untuk mengkalibrasi ulang input atau berbagai kesulitan permainan untuk menyesuaikan dengan metode input yang berbeda. Memiringkan perangkat lebih lambat dan lebih keras daripada menekan kunci, yang membuatnya lebih sulit untuk berkonsentrasi pada tampilan. Ini mungkin membuat permainan lebih sulit untuk menguasai perangkat seluler, sehingga mungkin tepat untuk memperlambat gameplay atau memungkinkan lebih banyak waktu per tingkat. Ini membutuhkan merancang kode permainan untuk menyesuaikan faktor-faktor ini.
Perangkat seluler memiliki lebih sedikit penyimpanan, memori dan daya CPU yang tersedia dari mesin desktop dan sehingga permainan mungkin sulit untuk port hanya karena kinerjanya tidak dapat diterima pada perangkat keras bertenaga yang lebih rendah. Jika Anda mendorong batas perangkat keras desktop Anda, maka permainan mungkin bukan kandidat yang baik untuk port ke platform mobile.
Video, audio, dan tekstur dapat menggunakan banyak ruang penyimpanan. Anda perlu mengelola penyimpanan secara efektif jika Anda ingin port permainan Anda. Ruang penyimpanan (yang sering juga sesuai dengan waktu download) biasanya bukan masalah pada mesin desktop, tetapi dapat terbatas pada perangkat mobile. Toko aplikasi seluler sering memaksakan batas pada ukuran maksimum produk yang diajukan. Ini mungkin memerlukan beberapa perencanaan untuk mengatasi masalah ini selama perkembangan permainan Anda.
Misalnya, Anda mungkin perlu menyediakan versi cut-down aset untuk ponsel untuk menghemat ruang. Kemungkinan lain adalah bahwa permainan mungkin perlu dirancang agar aset besar dapat diunduh berdasarkan permintaan daripada menjadi bagian dari unduhan awal aplikasi.
Unity secara otomatis menangani pemulihan memori yang tidak digunakan dari objek "dead" dan sering terjadi taktik pada mesin desktop. Namun, daya memori dan CPU yang lebih rendah pada perangkat seluler berarti bahwa pengumpulan sampah dapat lebih sering, kinerja dampak dan menyebabkan jeda yang tidak diinginkan dalam gameplay. Bahkan jika permainan berjalan dalam memori yang tersedia, mungkin perlu untuk mengoptimalkan kode untuk menghindari jeda koleksi garbage.
Untuk informasi lebih lanjut, lihat halaman manajemen memori.
Sebuah permainan yang berjalan dengan baik pada mesin desktop mungkin mengalami bingkai yang buruk pada perangkat mobile karena CPU mobile berjuang dengan kompleksitas permainan. Perhatikan efisiensi kode ketika sebuah proyek port ke platform mobile.