Note: Ikuti saran di bagian ini dalam urutan rilis. Misalnya, jika Anda perlu meningkatkan proyek Anda dari 2018 ke 2020, baca panduan peningkatan 2019 untuk melihat apakah ada perubahan yang Anda perlukan sebelum Anda membaca panduan peningkatan 2020.
Daftar halaman ini berubah dalam versi Unity 2021.2 yang mungkin mempengaruhi proyek yang ada ketika Anda meng-upgrade dari versi 2021.1 beta ke 2021.2.
Unity's Progressive LightmapperA tool in Unity that bakes lightmaps according to the arrangement of lights and geometry in your scene. More info
See in Glossary sekarang secara otomatis menghasilkan probe ambient dan skyboxJenis khusus Bahan yang digunakan untuk mewakili langit. Biasanya enam sisi. More info
Lihat di Glossary reflection probeKomponen rendering yang menangkap pandangan bulat dari sekitarnya di semua arah, seperti kamera. Gambar yang ditangkap kemudian disimpan sebagai kubus yang dapat digunakan oleh benda dengan bahan reflektif. More info
Lihat di Glossary untuk setiap sceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary secara default. Ini berarti bahwa adegan secara otomatis menerima pencahayaan lingkungan sesuai dengan pengaturan di tab Environment di panel pengaturan Lighting. Editor memperbarui probe ambient dan probe refleksi skybox setiap kali perubahan pencahayaan lingkungan, sampai Anda menghasilkan pencahayaan. Ketika Anda bake dengan kontrol Generate Lighting, Editor berhenti memperbarui probe, dan hanya memperbarui mereka lagi di bake berikutnya. Ketika Anda mengaktifkan opsi Auto Generate, Editor terus memperbarui probe setiap kali perubahan pencahayaan lingkungan. Jika Anda menghasilkan pencahayaan dan kemudian menghapus data pencahayaan ini dengan menghapus Aset Data Pencahayaan dari proyek, Editor secara otomatis menghasilkan probe ambient dan probe refleksi skybox lagi.
Ada satu situasi yang membutuhkan tindakan ketika Anda meningkatkan proyek. Ini adalah ketika Anda tidak ingin memiliki kontribusi pencahayaan Lingkungan dalam proyek yang juga:
Dalam situasi ini, arahkan ke Window > Rendering > Lighting Settings > Environment dan menonaktifkan kontribusi lingkungan dari probe ambient yang dihasilkan secara otomatis dan probe refleksi skybox dengan membuat salah satu perubahan berikut:
Sebelumnya, beberapa properti Lapangan Angkatan berperilaku berbeda pada tingkat bingkai yang berbeda (atau jika menggunakan Skala Waktu dalam pengaturan Manajer Waktu)
Particle SystemKomponen yang mensimulasikan entitas fluida seperti cairan, awan dan nyala dengan menghasilkan dan memikat sejumlah besar gambar 2D kecil di tempat kejadian. More info
Lihat di Glossary sekarang menggunakan tingkat bingkai referensi 30fps untuk berfungsi sebagai dasar untuk simulasi. Jika aplikasi Anda berjalan pada tingkat bingkai yang berbeda, pengaturan berikut mungkin berperilaku berbeda dibandingkan dengan versi Unity sebelumnya:
Jika pengaturan ini dipengaruhi, menyesuaikan kekuatan daerah yang terkena untuk mendapatkan penampilan yang diinginkan.
Sebelumnya, Tingkat emisi jarak jauh mengabaikan pengaturan Start Delay. Sekarang, jika pengaturan Start Delay ditentukan, penundaan awal emisi berbasis jarak.
Jika bidang ini sebelumnya ditetapkan, Anda mungkin perlu menyesuaikannya.
PackedAssets.file telah ditandai usang tanpa penggantian langsung. Sebelumnya ini mengadakan integer menandakan id file atau indeks ke BuildReport.files Untuk melihat file BuildReport sekarang, gunakan PackedAssets.shortPath.
API TerrainPemandangan di tempat kejadian Anda. Terrain GameObject menambahkan pesawat datar besar untuk adegan Anda dan Anda dapat menggunakan jendela Inspektur Terrain untuk menciptakan lanskap rinci. More info
Lihat di Glossary eksperimental telah dipindahkan ke ruang nama yang tidak berpengalaman. Ada juga beberapa perubahan kecil lainnya ke API Terrain. Jika Anda menggunakan API Terrain eksperimental, gunakan API berikut bukan:
UnityEngine.TerrainTools
;UnityEditor.TerrainTools
;UnityEngine.TerrainUtils
;Berikut adalah daftar perubahan API lengkap:
UnityEngine.Experimental.TerrainAPI
dan UnityEditor.Experimental.TerrainAPI
sekarang UnityEngine.TerrainTools
dan UnityEditor.TerrainTools
, masing-masing. Beberapa API runtime telah pindah ke ruang nama UnityEngine.TerrainUtils
baru.GetDesc()
dari kelas TerrainPaintTool<T>
berganti nama menjadi GetDescription()
.TerrainUtility
telah pindah dari UnityEngine.Experimental.TerrainAPI
ke UnityEngine.TerrainUtils
.TerrainUtility.TerrainMap
tidak lagi merupakan kelas dalam dan milik ruang nama UnityEngine.TerrainUtils
.TerrainMap.TileCoord
tidak lagi dalam kelas TerrainMap
, telah berganti nama menjadi TerrainTileCoord
, dan sekarang juga merupakan bagian dari ruang nama UnityEngine.TerrainUtils
.UnityEditor.Experimental.TerrainAPI.BrushPreviewMode
enum telah berganti nama menjadi TerrainBrushPreviewMode
dan pindah ke ruang nama UnityEditor.TerrainTools
.TerrainPaintUtilityEditor.BuiltinPaintMaterialPasses
.TerrainPaintUtilityEditor
class and into the UnityEditor.TerrainTools
namespace. It has also been renamed to TerrainBuiltinPaintMaterialPasses
.ShowBrushGUI
dalam IOnInspectorGUI
telah digabungkan menjadi satu fungsi dengan nilai parameter default bukan fungsi yang berlebihan.TerrainFilter
telah dihapus. Gunakan System.Predicate<Terrain>
bukan. Texture2D.Resize
dan kelebihan bebannya telah berganti nama menjadi Texture2D.Reinitialize
.
API Updater harus mengubah nama ini secara otomatis. Jika tidak, ubah penggunaan Texture2D.Resize
ke Texture2D.Reinitialize
.
Bagian besar dari pipa build Android sekarang inkremental dan Unity menghapus fitur-fitur berikut yang berada di pipa build sebelumnya:
libil2cpp.so
ketika membangun aplikasi.Gambar default.scaleMode diubah dari ScaleAndCrop ke ScaleToFit.
Perilaku yang diharapkan untuk gambar adalah untuk mengukur ukuran elemen, sehingga kami mengubah nilai default dari Image.scaleMode ke ScaleToFit. Jika Anda tidak menimpa mode skala gambar, beberapa gambar yang dirajut mungkin mengecilkan ukuran elemen. Jika ScaleAndCrop adalah mode yang diharapkan untuk gambar Anda, Anda dapat menimpa gaya mereka dengan menambahkan nilai berikut dalam gaya inline file UXML Anda:
-unity-background-scale-mode: scale-and-crop;
Anda juga dapat membuat kelas gaya dengan override dan menerapkannya ke gambar yang membutuhkan ScaleAndCrop.
The underlying C# runtime, Mono, telah ditingkatkan dalam versi terbaru. Ini termasuk banyak perbaikan dari versi hulu Mono, dan beberapa perubahan yang tidak masuk akal dalam perilaku.
Directory.GetFiles
tidak lagi dijamin untuk mengembalikan daftar yang diurutkan.
Directory.GetFiles(dir).OrderBy(f => f)
;Object.GetHashCode
sekarang kembali nilai yang berbeda dan tidak boleh diandalkan sebagai algoritma hashing deterministik antara sistem operasi.
GetHashCode
di luar proses saat ini, itu tidak men serialisasinya atau mengharapkannya sama dengan waktu berikutnya kode berjalan dalam proses baru. Unity merekomendasikan menggunakan algoritma hashing deterministik seperti MD5.Versi 3.0 dari paket Performa Adaptif sekarang tersedia. Untuk informasi tentang cara meningkatkan versi 3.0, lihat .
Sebelumnya, jika Anda mengatur properti ke 32-bit, Anda bisa mendapatkan D24_S8 tergantung pada platform. Sekarang jika Anda mengaturnya ke 32-bit, Anda mendapatkan D32_S8 dengan 32-bit untuk komponen kedalaman jika format itu didukung pada platform saat ini. Namun, ini menggandakan penggunaan memori untuk depth bufferSebuah toko memori yang memegang kedalaman nilai z setiap pixel dalam gambar, di mana nilai z adalah kedalaman untuk setiap piksel yang diberikan dari pesawat proyeksi. More info
Lihat di Glossary.
Properti baru mengembalikan format yang digunakan API grafis untuk membuat sumber daya dalam memori video. Anda juga dapat menggunakan properti ini untuk meminta format tertentu. Namun, tidak semua platform mendukung semua format stensil kedalaman. Ketika Anda mengatur properti DepthStencilFormat
untuk format yang tidak didukung, Unity secara otomatis memilih format yang kompatibel yang memiliki jumlah bit yang sama atau lebih besar untuk komponen kedalaman dan stensil.
Aset RenderTexture sekarang serialisasi format stensil kedalaman yang Anda pilih. Jika Anda menggunakan API yang mengambil sejumlah bit bukan format, bit ini dipetakan ke format dan format itu serialisasi. Aset RenderTexture dari versi sebelumnya yang memiliki kedalaman yang ditetapkan ke lebih dari 16-bit secara otomatis ditingkatkan untuk menggunakan D24_S8.
Pada beberapa platform (misalnya Windows) yang menggunakan API grafis DirectX, hasil ini dalam format dengan sedikit kedalaman yang lebih sedikit karena backend grafis memilih format D32_S8 internal jika Anda mengatur bit> 16. Untuk memastikan peningkatan konsisten di semua platform, D24_S8 digunakan pada semua platform untuk pengupgrade otomatis. Namun, ini mungkin memperkenalkan artefak visual dalam output render proyek Anda jika Anda memiliki aset RenderTexture dalam proyek Anda. Tinjau aset ini dan mengubah format stensil kedalaman ke D32_S8 bila diperlukan. Masalah berikut mungkin terjadi:
Format grafis berikut sekarang telah diuraikan:
Format "Auto" ini tidak jelas tentang format yang tepat yang digunakan dan mungkin bervariasi oleh platform.
Langkah-langkah untuk menghapus penggunaan format yang ditentukan ini tergantung pada format dan penggunaan kasus.
Untuk mendapatkan format video otomatis platform saat ini, gunakan SystemInfo.GetGraphicsFormat(DefaultFormat.Video)
.
GrafikFormat API sering menggunakan DepthAuto atau ShadowAuto untuk membuat render texturesJenis Tekstur khusus yang diciptakan dan diperbarui pada runtime. Untuk menggunakannya, pertama membuat Tekstur Render baru dan menunjuk salah satu Kamera Anda untuk membuatnya. Kemudian Anda dapat menggunakan Tekstur Render dalam Bahan seperti Tekstur biasa. More info
Lihat di Glossary dengan rendering secara mendalam, dan tidak ada buffer warna. Contoh kasus penggunaan ini adalah:
renderTextureDescriptor.graphicsFormat = GraphicsFormat.ShadowAuto
RenderTexture.GetTemporary(width, height, bits, GraphicsFormat.ShadowAuto)
Untuk menunjukkan rendering dalam warna (non-warna), gunakan GraphicsFormat. Tidak seperti format warna baru. renderTextureDescriptor.graphicsFormat = GraphicsFormat.None;
Jika Anda menggunakan ShadowAuto, atur bayanganSamplingMode RenderTextureDescriptor Anda ke ShadowSamplingMode.CompareDepths untuk mengaktifkan sampling mendalam pada tekstur kedalaman, dan mengubah kode untuk menggunakan overload yang mengambil RenderTextureDescriptor. renderTextureDescriptor.shadowSamplingMode = ShadowSamplingMode.CompareDepths;
Dalam beberapa situasi format DepthAuto/ShadowAuto mewakili format kedalaman yang dipilih secara otomatis sesuai untuk platform saat ini. Untuk mengganti nilai yang telah ditentukan dalam kasus ini, gunakan SystemInfo.GetGraphicsFormat(DefaultFormat.Depth/Shadow)
Target asm.js Linker yang tersedia untuk pengguna tingkat lanjut tidak lagi tersedia.
Pointer_stringify()
is sekarang didepresikan. Sebagai gantinya, sebutkan fungsi UTF8ToString()
untuk mengasah string C yang dikodekan UTF8 dari WebAssembly heap ke string JavaScript.Progresif GPU Lightmapper tidak lagi mendukung perangkat OpenCL CPU. Jika tidak ada perangkat GPU yang didukung ditemukan tetapi perangkat OpenCL CPU terdeteksi, pesan peringatan memberi tahu Anda bahwa perangkat digesek dan jatuh kembali ke Progressive CPU Lightmapper. Progresif CPU Lightmapper menawarkan kinerja yang lebih baik untuk perhitungan berbasis CPU lightmapsTekstur pra-render yang mengandung efek sumber cahaya pada objek statis di tempat kejadian. Lightmaps dilalui atas geometri adegan untuk menciptakan efek pencahayaan. More info
Lihat di Glossary. Perubahan perilaku ini akan terjadi secara otomatis dan peta lampu harus sebanding seperti yang diharapkan.
Ketika metode Unity panggilan InitializeOnLoad
selama proses impor aset, pemuatan aset dapat gagal. Selama impor aset, database aset dalam state update dan Unity tidak dapat menentukan aset mana yang telah diimpor. Metode InitializeOnLoad
tidak dapat memuat aset yang belum diimpor.
Untuk meningkatkan proses impor aset, callback OnPostprocessAllAssets
telah ditingkatkan. Secara khusus, callback OnPostprocessAllAssets
:
didDomainReload
, yang ditetapkan untuk benar jika domain telah diisi ulang.Pindahkan logika penginisialisasi domain yang memerlukan operasi aset ke callback OnPostprocessAllAsset
; jangan melakukan operasi aset dalam metode InitializeOnLoad
.
Contoh kode perubahan perilaku berikut menunjukkan bagaimana operasi aset sebelumnya ditunda.
Contoh 1:
public class AssetPostprocessorTester1 : AssetPostprocessor
{
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
{
var assetPath = "Assets/hello.txt";
if (File.Exists(assetPath))
{
var txtObj = AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/hello.txt");
AssetDatabase.DeleteAsset("Assets/hello.txt");
if (txtObj == null)
Debug.Log("New Behaviour: Asset object is unloaded");
else
Debug.Log("Old Behaviour: Asset is loaded for deleted asset!!");
}
}
}
Contoh 2:
public class AssetPostprocessorTester2 : AssetPostprocessor
{
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
{
var assetPath = "Assets/SomeText.txt";
if (!File.Exists(assetPath))
{
File.WriteAllText(assetPath, "hello world");
AssetDatabase.ImportAsset(assetPath);
var txtObj = AssetDatabase.LoadAssetAtPath<TextAsset>(assetPath);
if (txtObj == null)
Debug.Log("Old Behaviour: Asset hasn't been imported yet");
else
Debug.Log("New Behaviour: Asset is imported and loaded");
}
}
}
Contoh berikut memiliki varian OnPostprocessAllAssets
baru dengan parameter didDomainReload
:
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths, bool didDomainReload)
{
if (didDomainReload)
Debug.Log("Domain has been reloaded");
else
Debug.Log("Domain did not reload during import");
}
Semua reload domain sekarang diproses dalam database aset.
OnPostprocessAllAssets
sekarang bekerja lebih baik dengan operasi aset, tetapi setiap pemrosesan dalam callback ini meningkatkan database aset menyegarkan dan waktu reload domain. Metode InitializeOnLoad
juga menambah waktu reload domain. Ini adalah praktik terbaik untuk meminimalkan pemrosesan dalam panggilan ini untuk meningkatkan responsifitas Editor antara iterasi.
Sistem kata kunci shaderProgram yang berjalan di GPU. More info
Lihat di Glossary sekarang memungkinkan hingga 65534 kata kunci lokal per naungan atau kolon dan 232-2 kata kunci global per proyek. Semua kata kunci yang Anda deklarasikan dalam naungan atau kolon sekarang lokal ke naungan ini. Kata kunci yang Anda deklarasikan secara langsung dengan suffix lokal tidak dipengaruhi oleh negara kata kunci global.
Contoh:
A lulus dalam naungan menyatakan kata kunci berikut:
#pragma shader_feature FOO BAR
#pragma shader_feature_local BOO BAZ
Ketika menggunakan kata kunci FOO dan BAR ini diaktifkan jika mereka diaktifkan baik secara global atau pada materi. Kata kunci BOO dan BAZ hanya diaktifkan jika mereka diaktifkan pada materi.
Unity sekarang mendukung banyak API tambahan di . Perpustakaan kelas dasar NET, termasuk semua API di . NET Standard 2.1 API. Proyek Anda mungkin gagal untuk mengkompilasi jika kode Anda memiliki konflik dengan API baru.
Untuk menghindari kesalahan ketika Anda meng-upgrade proyek yang dibuat dalam versi Unity sebelumnya, periksa dan memperbarui kode Anda untuk memastikan bahwa tidak ada konflik dengan jenis dan metode yang sekarang tersedia di . Standar NET 2.1.
Sumber konflik termasuk berikut:
Jika kode Anda menerapkan jenis atau metode dengan nama yang bertentangan dengan jenis atau metode yang. NET Standard 2.1 menambahkan, kode Anda gagal untuk dikompilasi. Nama konflik dapat menyebabkan kesalahan kompiler C# karena referensi yang ambigu.
Misalnya, jika Anda menambahkan jenis bernama MyCompany.MyCode.Range
ke kode proyek Anda, ini mungkin bertentangan dengan jenis System.Range
yang ada. Kode yang mengandung pernyataan using System;
dan using MyCompany;
gagal dikompilasi.
Untuk mencegah kesalahan, sepenuhnya menentukan namespace dalam kode C# untuk segala jenis yang memiliki nama konflik.
Jika kode yang ada memiliki metode ekstensi yang. Standar NET 2.1 sekarang mengimplementasikan pada jenis secara langsung, Anda dapat memilih untuk mengubah nama metode ekstensi Anda atau untuk menggunakan metode yang diterapkan oleh perpustakaan kelas dasar.
Sebagai contoh, kode dalam proyek Anda mungkin menerapkan metode ekstensi bernama CopyTo
pada tipe ArraySegment
. Dalam Standar .NET 2.1, ArraySegment
memiliki metode built-in CopyTo
. Anda dapat memilih untuk mengubah nama metode ekstensi CopyTo
Anda, atau menghilangkannya sepenuhnya dan menggunakan yang built-in.
Jika proyek Anda menggunakan rakitan prekompiled (yaitu, plugin yang dikelola) yang menerapkan jenis dan metode yang sekarang bagian dari perpustakaan kelas dasar, kemudian menghapus rakitan ini dari proyek Anda dan menggunakan implementasi bawaan.
Misalnya, dalam versi Unity sebelumnya, Anda perlu menggunakan perakitan System.Memory.dll
dari NuGet untuk mengakses tipe nilai System.Span
. Sekarang, .NET Standard 2.1 menyediakan System.Span
di perpustakaan kelas dasar. Jika Anda mencoba menggunakan plugin yang dikelola di Unity 2021.2, proyek gagal untuk membangun.System.Memory.dll
managed plugin in Unity 2021.2, the project fails to build.
Microsoft telah menentukan plugin Windows XR dan sekarang mendukung fitur dan perangkat Windows Mixed Reality (WMR) melalui plugin OpenXR.
Untuk meningkatkan ke plugin Unity OpenXR:
Setelah plugin OpenXR diaktifkan, Anda dapat menggunakan Mixed Reality Feature Tool yang disediakan oleh Microsoft untuk menginstal paket pendukung yang diperlukan.
Untuk menginstal atau memperbarui fitur WMR, alat, dan sampel:
Untuk informasi lebih lanjut tentang mengatur proyek Unity baru dan diperbarui untuk menggunakan Windows Mixed Reality, lihat Menyiapkan konfigurasi XR Anda di situs dokumentasi Microsoft.