Rumah >Peranti teknologi >industri IT >Menambah Jeda, Menu Utama dan Permainan melalui Skrin dalam Perpaduan
Dalam tutorial ini, kami akan mengambilnya ke peringkat seterusnya, dan membolehkan pengguna menjeda atau memulakan semula permainan dan beralih antara adegan yang berbeza. Kami juga akan melihat bagaimana untuk menunjukkan unsur -unsur UI tertentu hanya pada masa -masa tertentu - seperti ketika permainan dijeda atau ketika pemain mati/kalah.
Kebanyakan permainan mengandungi menu jeda, permainan di atas skrin, dan menu utama. Oleh kerana ini adalah beberapa elemen yang diperlukan untuk permainan "selesai", kami akan memasukkan ketiga -tiga ke dalam klon Dodger kami. Di samping itu, kami juga akan membuat skrin arahan supaya pemain dapat mempelajari kawalan yang boleh mereka gunakan sebelum mereka mula bermain permainan.
Permainan yang lengkap boleh dimainkan di gatal.io.
Takeaways Key
Membuat teks jeda
kita perlu membuat tajuk yang memberitahu pemain bahawa permainan itu dijeda. Kita harus membuat objek teks dengan mengklik kanan dalam anak tetingkap hierarki dan memilih UI -> teks. Mari namakan objek yang baru dibuat PauseText.
Sekarang kita boleh memformat objek teks untuk memilikinya kelihatan lebih baik dalam skrin permainan. Untuk menukar teks objek teks, kita perlu mengklik pada anak tetingkap Inspektor di bawah atribut teks di mana perkataan "teks baru". Di dalam atribut teks, kita boleh menukar teks teks jeda kami kepada "Jeda". Untuk menyimpan dengan skema warna untuk permainan kita harus menukar warna teks menjadi putih. Ini boleh dicapai dengan mengklik di bawah objek warna (di mana warna hitam atau lain boleh dipilih) dan memilih putih.
semua yang perlu kita lakukan sekarang ialah tag objek supaya program itu, selepas kita menambah kod, akan dapat memberitahu bahawa kita hanya mahu objek ini menunjukkan apabila permainan dijeda. Kita boleh klik di bawah nama teks jeda di mana ia mengatakan "Untagged" dan kemudian klik "Tambah Tag ...". Sekarang kita boleh membuat tag bernama "ShowonPause". Sebaik sahaja tag ini dibuat, kita perlu menambahkannya ke teks jeda.
Membuat butang yang dijeda
Kami akan mencipta tiga butang yang berbeza: butang main, butang restart, dan butang menu utama. Butang Play tidak akan memusnahkan permainan, butang restart akan memulakan semula permainan, dan butang menu utama akan membawa pemain kembali ke adegan menu utama permainan.
mari kita mulakan dengan membuat butang baru (klik kanan dalam hierarki -> UI -> butang) dan menamakannya "PlayButton". Kami harus menetapkan tag butang Play untuk ShowonPause supaya ia hanya akan ditunjukkan apabila permainan dijeda. Sekarang mari kita tetapkan teks butang main untuk "bermain". Ini boleh dilakukan dengan membuka objek Teks Kanak -kanak di Inspektor (klik dropdown di sebelah butang Play dalam hierarki dan pilih objek teks) dan kemudian menukar harta teks untuk "bermain". Kita harus menyelaraskan butang main dengan pusat skrin supaya ia berada di bawah teks jeda.
Cara cepat untuk membuat dua butang yang lain adalah memilih butang main dalam hierarki dan menduplikasinya (Command / Ctrl D) dua kali. Kita boleh menamakan butang baru "RestartButton" dan "MainMenubutton". Kita juga harus memberikan setiap butang baru teks yang sesuai. Butang restart harus mengatakan "mulakan semula" dan butang menu utama harus mengatakan "menu utama". Sekarang mari kita padamkan butang refresh yang dicipta dalam tutorial terakhir. Kita dapat melihat sekarang bahawa kita mempunyai menu jeda asas. Walau bagaimanapun, menu tidak melakukan apa -apa kerana kami tidak melampirkan sebarang kod ke objek.
GameObject<span>[] pauseObjects; </span> <span>// Use this for initialization </span> <span>void Start () { </span> Time<span>.timeScale = 1; </span> pauseObjects <span>= GameObject.FindGameObjectsWithTag("ShowOnPause"); </span> <span>hidePaused(); </span> <span>} </span> <span>// Update is called once per frame </span> <span>void Update () { </span> <span>//uses the p button to pause and unpause the game </span> <span>if(Input.GetKeyDown(KeyCode.P)) </span> <span>{ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Debug<span>.Log ("high"); </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>} </span> <span>//Reloads the Level </span> public <span>void Reload(){ </span> Application<span>.LoadLevel(Application.loadedLevel); </span> <span>} </span> <span>//controls the pausing of the scene </span> public <span>void pauseControl(){ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>//shows objects with ShowOnPause tag </span> public <span>void showPaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(true); </span> <span>} </span> <span>} </span> <span>//hides objects with ShowOnPause tag </span> public <span>void hidePaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(false); </span> <span>} </span> <span>} </span> <span>//loads inputted level </span> public <span>void LoadLevel(string level){ </span> Application<span>.LoadLevel(level); </span> <span>} </span>Sekarang kita mempunyai kod yang kita perlukan di dalam skrip Uimanager, kita boleh kembali ke perpaduan. Di dalam Perpaduan, mari kita pilih butang main dan lampirkan kaedah pausecontrol kepadanya. Untuk melakukan ini, kita boleh memilih butang Play dan seret objek permainan Uimanager ke ruang objek permainan di bawah atribut OnClick () dalam anak tetingkap Inspektor. Dengan objek permainan uimanager ditambah, kini kami boleh menggunakan dropdown kedua untuk memilih fungsi PauseControl (Uimanager -> PauseControl).
Menggunakan langkah yang sama, kita boleh menambah kaedah tambah nilai () ke butang restart dan kaedah LoadLevel () ke butang menu utama. Oleh kerana kaedah LoadLevel () mengambil parameter rentetan, kita harus menaip "mainmenu" ke dalam kotak di bawah dropdown fungsi.
Jika kita memukul bermain sekarang, kita akan melihat bahawa butang bermain dan memulakan semula berfungsi. Juga, jika kita memukul P semasa permainan sedang bermain, kita dapat berhenti sejenak dan tidak membuat permainan. Satu -satunya masalah ialah butang menu utama tidak berfungsi. Ini kerana kami tidak menambah adegan bernama "Mainmenu" ke tetapan binaan.
Membuat adegan menu utama
Pertama, kita harus menyimpan adegan semasa yang kita sedang bekerja supaya kerja yang telah kita lakukan tidak akan dipadamkan apabila kita membuka yang baru. Mari buat adegan baru (Command / Ctrl N atau Fail -> Adegan Baru). Sebaik sahaja tempat kejadian dibuka, simpan dan namakannya "Mainmenu".
NOTA: Kami menamakannya "Mainmenu" kerana itu adalah harta rentetan yang kami tetapkan butang menu utama di tempat bermain. Jika kita mahukan nama yang berbeza, maka kita boleh menukar sifat rentetan fungsi loadLevel () yang dilampirkan pada butang menu utama dalam adegan main.
Sekarang adegan telah diselamatkan kita boleh mula mengusahakannya. Mari kita mulakan dengan memilih objek permainan kamera utama dan mengubah latar belakangnya ke warna yang sama seperti dalam adegan main (R: 0, G: 223, b: 255).
Untuk adegan ini, kita perlu dapat mengakses kaedah LoadLevel () di dalam skrip Uimanager. Ini bermakna kita perlu membuat objek permainan uimanager dan melampirkan skrip uimanager kepadanya supaya kita dapat menambahkan fungsi ke butang kita.
Mari buat objek permainan kosong (klik kanan dalam hierarki -> buat kosong) dan namakannya uimanager. Sekarang kita boleh menambah skrip uimanager ke objek permainan uimanager.
kita boleh mula membuat menu mudah yang akan mengandungi teks yang mengatakan "Dodger" dan butang main. Kami akan bermula dengan membuat teks (klik kanan dalam hierarki -> ui -> teks) dan menamakannya "titleText". Kita harus menukar teks untuk mengatakan "Dodger" dan menyelaraskannya ke pusat skrin, sedikit ke arah atas. Sekarang mari kita tetapkan warna teks tajuk menjadi putih.
dengan teks yang dibuat dan diedit kita boleh membuat butang baru dan namakannya "PlayButton". Kita harus menukar teks objek kanak -kanak Play Button untuk "bermain". Akhirnya, mari tambahkan objek permainan uimanager ke atribut OnClick () butang dan pilih fungsi LoadLevel (). Parameter fungsi LoadLevel () bergantung pada nama adegan permainan dari tutorial terakhir. Kami dapat mencari nama adegan permainan dengan mencari tempat kejadian di panel aset.
Menamatkan permainan
Menambah skor
Keadaan yang akan kami gunakan untuk mengemas kini skor akan menjadi blok yang akan dimatikan (bermakna blok pemain telah mengelak). Untuk keadaan ini aktif, kita perlu menyemak skrin perlanggaran blok dan kenaikan pembolehubah untuk skor.
Mari buat objek permainan kosong dan namakannya "Bottomborder". Kami menambah BoxCollider2D ke sempadan bawah dan tetapkan saiz X ke sejumlah besar yang sedikit melepasi sempadan kamera. Sekarang kita boleh menambah RigidBody2D ke objek sempadan bawah dan menetapkan atribut skala graviti ke 0 supaya objek sempadan bawah tidak jatuh. Kami boleh menyelaraskan objek sempadan bawah sedikit di bawah pemain memastikan ia berada di luar skrin.
kita perlu membuat skrip baru untuk menetapkan skor untuk pemain. Mari buat skrip C# baru bernama "PointCounter" di dalam folder skrip kami. Sebaik sahaja skrip PointCounter telah dibuat, kami dapat membukanya dalam IDE dan jenis kami:
GameObject<span>[] pauseObjects; </span> <span>// Use this for initialization </span> <span>void Start () { </span> Time<span>.timeScale = 1; </span> pauseObjects <span>= GameObject.FindGameObjectsWithTag("ShowOnPause"); </span> <span>hidePaused(); </span> <span>} </span> <span>// Update is called once per frame </span> <span>void Update () { </span> <span>//uses the p button to pause and unpause the game </span> <span>if(Input.GetKeyDown(KeyCode.P)) </span> <span>{ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Debug<span>.Log ("high"); </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>} </span> <span>//Reloads the Level </span> public <span>void Reload(){ </span> Application<span>.LoadLevel(Application.loadedLevel); </span> <span>} </span> <span>//controls the pausing of the scene </span> public <span>void pauseControl(){ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>//shows objects with ShowOnPause tag </span> public <span>void showPaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(true); </span> <span>} </span> <span>} </span> <span>//hides objects with ShowOnPause tag </span> public <span>void hidePaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(false); </span> <span>} </span> <span>} </span> <span>//loads inputted level </span> public <span>void LoadLevel(string level){ </span> Application<span>.LoadLevel(level); </span> <span>} </span>
Skrip PointCounter hendaklah ditambah ke objek permainan sempadan bawah supaya apabila blok bertembung dengannya, blok akan dimusnahkan dan skor dikemas kini.
Sekarang, mari buat skrip bernama "PointupDater" yang akan mengemas kini teks skor. Kami boleh membuka skrip pointupdater dalam IDE dan jenis kami:
public <span>int score; </span> <span>// Use this for initialization </span> <span>void Start () { </span> score <span>= 0; </span> <span>} </span> <span>// Update is called once per frame </span> <span>void Update () { </span> <span>} </span> <span>//checks for entering a trigger </span> <span>void OnTriggerEnter2D(Collider2D other){ </span> <span>//checks other collider's tag </span> <span>if(other.gameObject.tag == "Enemy"){ </span> score<span>++; //increments score </span> <span>Destroy (other.gameObject); //destroys other collider's gameobject </span> <span>} </span> <span>} </span>
kita harus menambah skrip pointupdater ke objek permainan teks skor. Objek permainan sempadan bawah harus ditambah ke nilai kaunter titik supaya skor dapat dikemas kini.
Untuk menyelesaikan permainan, kita perlu menambah permainan di atas menu yang akan muncul apabila pemain telah meninggal dunia.
mari kita buka skrip PlayerController dalam IDE kami dan di bawah pengisytiharan pembolehubah terakhir Tambah:
public PointCounter pointCounter<span>; </span> <span>// Use this for initialization </span> <span>void Start () { </span> text <span>= gameObject.GetComponent<Text>(); </span> text<span>.text = "Score: 0"; </span> <span>} </span> <span>// Update is called once per frame </span> <span>void Update () { </span> text<span>.text = "Score: " + pointCounter.score.ToString(); </span> <span>} </span>
Di dalam skrip Enemycontroller Mari tambah:
public bool alive<span>; </span> <span>// Use this for initialization </span> <span>void Start () { </span> alive <span>= true; </span> <span>} </span>
Untuk memulakan menu, kita boleh membuat objek permainan teks baru dan namakannya "GameOvertext". Teks itu harus ditetapkan untuk "permainan lebih" dan warna teks harus putih. Kita harus menyelaraskan permainan melalui teks untuk sedikit di atas pusat skrin. Untuk memastikan menu ini hanya akan muncul apabila pemain telah meninggal dunia, kita harus membuat tag baru bernama "Showonfinish" dan menambahnya ke permainan melalui teks.
Sekarang mari duplikat butang menu restart dan utama. Kita harus menamakan semula butang kepada "FinRestartButon" dan "FinMainMenubutton" dan tambahkan tag Showonfinish ke kedua -dua butang.
Akhirnya, mari kita buka skrip Uimanager dalam IDE kami dan editnya supaya kelihatan seperti kod di bawah.
<span>void OnTriggerEnter2D(Collider2D other){ </span> <span>//Checks if other gameobject has a Tag of Player </span> <span>if(other.gameObject.tag == "Player"){ </span> other<span>.gameObject.GetComponent<PlayerController>().alive = false; </span> Time<span>.timeScale = 0; </span> <span>} </span><span>} </span>
soalan? Komen? Tolong tinggalkan mereka di bawah!
Projek siap boleh dimuat turun dari GitHub.
Menambah butang jeda dalam Perpaduan melibatkan membuat butang UI dan melampirkan skrip kepadanya yang mengawal skala masa permainan. Skala Masa adalah pengganda global yang mempengaruhi kelajuan di mana masa permainan berlangsung. Dengan menetapkannya kepada sifar, anda secara berkesan menjeda permainan. Skrip yang dilampirkan pada butang jeda harus memasukkan fungsi yang mengubah skala masa antara 1 (kelajuan normal) dan 0 (dijeda) apabila butang diklik. 🎜>
Mewujudkan menu utama dalam Perpaduan melibatkan mewujudkan adegan baru yang akan berfungsi sebagai menu. Adegan ini harus termasuk elemen UI seperti butang yang membolehkan pemain memulakan permainan, menyesuaikan tetapan, atau berhenti. Setiap butang harus mempunyai skrip yang dilampirkan yang melakukan tindakan yang sesuai apabila diklik. Sebagai contoh, skrip butang Mula mungkin memuatkan adegan permainan, manakala skrip butang berhenti mungkin menutup aplikasi. Skrin dalam Perpaduan adalah serupa dengan menambahkan menu utama. Anda perlu membuat adegan baru yang akan berfungsi sebagai permainan di atas skrin, lengkap dengan elemen UI yang menyediakan pilihan untuk pemain, seperti memulakan semula permainan atau kembali ke menu utama. Unsur -unsur ini sepatutnya mempunyai skrip yang dilampirkan yang melakukan tindakan yang sesuai apabila diklik. Kelas ini menyediakan fungsi untuk memuatkan dan memunggah adegan, serta untuk menanyakan maklumat mengenai adegan semasa. Untuk beralih ke adegan baru, anda boleh menggunakan fungsi SceneManager.Loadscene, lulus sama ada nama atau indeks adegan yang anda mahu muatkan.mengoptimumkan UI anda untuk prestasi dalam perpaduan boleh melibatkan pelbagai strategi, seperti meminimumkan penggunaan grafik kompleks, mengelakkan kemas kini yang tidak perlu, dan menggunakan kanvas scaler untuk mengurangkan resolusi UI anda pada peranti rendah. Alat Profiler Perpaduan boleh menjadi sumber yang berharga untuk mengenal pasti kesesakan prestasi dalam UI anda. Rujukan API, dan amalan terbaik. Di samping itu, terdapat banyak komuniti dan sumber dalam talian di mana anda boleh belajar dari pemaju perpaduan yang lain, seperti Forum Perpaduan, Stack Overflow, dan pelbagai laman web tutorial.
Atas ialah kandungan terperinci Menambah Jeda, Menu Utama dan Permainan melalui Skrin dalam Perpaduan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!