Game over dapat didefinisikan secara tidak baik melalui objek permainan. Pengurus permainan berguna untuk ini.
Buat objek di tetingkap hierarki, klik kanan komponen transform di tetingkap pemeriksa dan tetapkan ke Reset. Kemudian namakan objek tersebut sebagai GameManager.

Tambahkan komponen baru dan beri nama GameManager. Komponen ini bertanggungjawab untuk mengubah status dalam permainan. Permainan boleh dimulakan, dihentikan atau dimulakan semula melalui Game Manager. Kaunter skor juga boleh diletakkan. Tujuan skrip baru dalam kes ini adalah untuk memulakan semula permainan ketika anda selesai permainan.
Buat fungsi baru anda sendiri:
batal permainan akhir
Anda memerlukan cara untuk mengakses GameManager dan menjalankan fungsinya.

Dengan penambahan Debug.Log ("GAME OVER"); hantar "Game Over" sebagai output ke konsol Unity dan lihat apakah fungsi dipanggil pada waktu yang tepat.
Untuk dapat mengakses fungsi, anda memerlukan Skrip Pemain Pemain dari pemain.
Tambahkan komponen untuk Pengurus Permainan di sana:
awam GameManager GameManager;
Seterusnya, buat awalan watak anda. Kemudian padamkan pemain dari tempat kejadian anda. Seret pemain kembali ke tempat kejadian dan anda akan melihat bahawa pemain tidak dihubungkan ke GameManager.

Pada akhirnya, anda tidak menggunakan pemboleh ubah dalam kes ini, tetapi hapus sekali lagi.
Anda gunakan untuk mencari GameManager:
FindObjectOfType ();
Anda memasukkan ini pada titik di mana anda mahu permainan berakhir.
Mempunyai fungsi yang serupa: GetComponent <>
Tukar skrip GameManager
batal permainan akhir
zu
Endgame awam tidak sah
Sekarang anda boleh membuat perubahan dalam skrip PlayerCollision.
Dengan MainCamera dan TextCanvas, anda sekarang harus menyeret pemain sehingga rujukan ke pemain dibuat. Jika tidak, anda akan mendapat mesej ralat.
Sebagai tambahan, Game Over harus ditunjukkan jika watak jatuh dari platform, misalnya.
Prasyarat dibuat dalam skrip PlayerMovement. Sekiranya pemain berada di bawah nilai tertentu pada sumbu, Game Over akan dipaparkan.
Dalam skrip PlayerMovement tambahkan ini ke FixedUpdate:
jika (rb.posisi.y <-1f)
{
FindObjectOfType () .Permainan tamat ();
}
Skrip PlayerMovement kemudian kelihatan seperti ini:

Game Over kini hanya boleh dipaparkan sekali sahaja.
Untuk melakukan ini, perubahan dibuat di GameManager:
permainan boolHasEnded = false;
Di bawah suara awam datang:
jika (gameHasEnded == false)
{
gameHasEnded = benar;
Debug.Log ("Game Over");
}
Ini menamatkan permainan hanya sekali:

Akhirnya permainan harus dimulakan semula:
Ini dimasukkan ke dalam GameManager:
Anda memerlukan Restart yang tidak sah () sebagai fungsi yang berasingan.
Di bawah Debug.Log anda tambahkan:
Mula semula ();
Fungsi lain yang anda masukkan menggunakan UnityEngine adalah:
menggunakan UnityEngine.SceneManagement;
Ini digunakan untuk pemandangan lain atau untuk memulakan semula pemandangan.
Sekarang anda menambah kurungan keriting di bawah Mulakan semula kosong:
SceneManager.LoadScene (SceneManager.GetActiveScene (). Nama);
Ini bermaksud bahawa anda memuatkan semula pemandangan aktif dari Pengurus Adegan.
.nama bermaksud nama tempat kejadian anda sekarang.

Permulaan semula permainan berlaku dengan sangat pantas pada masa ini.
Itulah sebabnya kami membuka Lighting in Unity. Sekiranya anda mengubah sesuatu dalam permainan anda, masuk akal untuk mengira semula kesan pencahayaan. Pilih Pencahayaan Binaan.

Sekarang anda menggunakan parameter baru:
Ganti Restart dengan Invoke ("Restart") dalam skrip GameManager. Selepas itu anda meletakkan masa yang sepatutnya berlalu sebelum fungsi "Mulakan semula" dipanggil.
Memohon ("Mulakan semula", 2f);
Kelewatan kini dijadikan pemboleh ubah.
Di bawah bool tambahkan:
restart awam awamDelay = 1f;
Daripada 2f di bawah, anda sekarang menetapkan pemboleh ubah.
Skrip selesai kelihatan seperti ini:

Asalnya diposkan 2020-06-08 18:56:00.
