Bagaimana saya bisa membuat medan yang sangat besar di Unity? Sepertinya saya bisa mengatur lebar dan panjang ke nilai besar. Tetapi resolusi Heightmap hanya mencapai 4097 dan resolusi Detail hanya mencapai 4048.
Ada ide?
Bagaimana saya bisa membuat medan yang sangat besar di Unity? Sepertinya saya bisa mengatur lebar dan panjang ke nilai besar. Tetapi resolusi Heightmap hanya mencapai 4097 dan resolusi Detail hanya mencapai 4048.
Ada ide?
Jawaban:
Pisahkan medan menjadi "bongkahan" persegi, muat orang-orang yang Anda sayangi (kebanyakan: Mereka yang berada di dekat kamera yang aktif) di Perbarui () dan - jika Anda kekurangan ruang (kemungkinan besar akan terjadi), bongkar yang tidak diperlukan jauh .
Gunakan model poli-rendah yang dihitung sebelumnya untuk LoD medan jauh, kecuali Anda tidak memiliki jarak pandang yang rendah. Selain itu, jika Anda memerlukan peta ketinggian terain dari medan jauh untuk apa pun (seperti gerakan NPC atau simulasi lainnya), buat varian resolusi rendah atau variabel yang bervariasi untuk terain di memori Anda; jangan gunakan data terain lengkap untuk itu. Ini bisa dilakukan secara otomatis saat memuat game, tetapi umumnya merupakan ide yang lebih baik untuk membuat alat yang membuat data pra-dihasilkan ini selama pembuatan atau paket.
Akhirnya: Untuk menghindari masalah presisi floating point, Anda harus memposisikan ulang seluruh adegan setiap kali kamera utama Anda bergerak menjauh (0.0f, 0.0f, 0.0f).
Pertanyaan yang mungkin relevan tentang Unity Answers http://answers.unity3d.com/questions/17225/dynamic-terrain-loading.html
Anda harus memecah medan dalam potongan, yaitu. beberapa medan yang lebih kecil. Anda harus 'saling melipat' satu sama lain (dengan naskah) sehingga tidak akan ada 'lubang' di antara mereka, tetapi jika tidak, Anda bisa langsung mulai melakukannya.
Anda mungkin ingin tahu juga bahwa karena Unity3D ~ 3.0 Anda tidak dapat memindahkan item (baca medan dan item) terlalu jauh (seperti +/- 100000 langkah IIRC) sehingga ini akan memengaruhi ukuran maksimum dunia Anda.
Saya menggunakan ini dalam game RPG online saya (dengan pengecualian bahwa saya hanya menggunakan Unity3D untuk desain level, bukan untuk game yang sebenarnya).
Hanya karena saya ingin tahu, apakah Anda ingin berbagi info tentang game Anda (seperti peningkatan, jenis, grafik, gaya, dll.)?
Kami benar-benar mengimplementasikan medan besar di Unity5 dengan memproses data SRTM untuk seluruh bumi menjadi peta ketinggian untuk TerrainData
objek dengan Level Detail yang berbeda [1]. Ada beberapa hal yang perlu dipertimbangkan:
Bagian paling tepi dari peta ketinggian harus tumpang tindih dengan setidaknya satu sampel dan Anda perlu mengatur posisi medan Anda dengan tepat. Terrain.SetNeighbors
tidak akan menghubungkan jala, hanya akun untuk berbagai tingkat detail yang dilakukan oleh Unity.
Anda, tentu saja, membutuhkan 2 ^ n + 1 sampel tinggi per TerrainData
objek, jika tidak Unity hanya akan menetapkan tinggi 0 ke bagian yang belum disetel.
Jika Anda memiliki kurang dari 2GB TerrainData
, Anda dapat menggunakannya dengan Aset di folder Sumber Daya dan Resource.Load
saat runtime. Jika Anda memiliki lebih dari 2GB pendekatan ini tidak lagi berfungsi karena tidak ada lebih dari 2GB sumber daya dengan Unity builds. Dalam hal ini Anda harus membangun AssetBundles dan memuatnya secara asinkron dengan WWW
objek. Ini memiliki efek samping yang tidak diinginkan dari panggilan Shader.Parse
untuk masing-masing dengan overhead sekitar 500ms. Saya melaporkan ini di forum [2] dan masih menunggu balasan. Saya akan mengirimkan laporan bug pada akhirnya.
Jangan berpikir untuk menggunakan AssetDatabase.LoadAssetAtPath
, itu hanya tersedia di editor dan bukan di Unity builds.
[1] https://www.youtube.com/watch?v=2UsyVuWoFbQ
[2] http://forum.unity3d.com/threads/shader-parse-delays-loading-of-assetbundle-containing-no-shader 0,358235 /
Ada solusi pihak ketiga.
kode ini dapat membuat medan seluas 99.999 meter, pegunungan adalah formula kebisingan apa pun, tetapi Anda dapat mencampur 100 rumus kebisingan ke dalam satu peta jika Anda mau. misalnya, di medan ini, jumlah total segitiga yang tersedia di peta adalah antara 66 juta, resolusi rendah, dan 200 juta resolusi menengah. di sini adalah peta segitiga 66 juta, di mana segitiga 0,7 juta diperbarui di sekitar kamera. medan raksasa unityplayer, WASD dan Space
Saya akan merekomendasikan memuat medan Anda dalam potongan. Dengan menggunakan medan yang lebih kecil, dan mungkin skrip Anda dapat memeriksa apakah Anda berada dalam jarak tertentu ke medan Anda dengan menggunakan transform.position - terrain.transform.position. Saya benar-benar menulis posting blog tentang cara mengoptimalkan game Anda secara keseluruhan, dan saya berbicara tentang chunk loading. Semoga ini membantu.