Pertama, anda memerlukan pemain yang dapat melihat-lihat kawasan tersebut.
Sebagai contoh, anda boleh membuat objek kosong untuk ini. Pilih Createn -> Kosongkan di tetingkap hierarki dengan butang tetikus kanan. Namakan objek sebagai pemain orang pertama. Seret ke pusat pemandangan anda. Tambahkan komponen pengawal watak.

Pusatkan watak dengan F dan pastikan gizmo diaktifkan. Kemudian batasan watak menjadi jelas. Seterusnya, buat grafik untuk menjadikan objek lebih mudah dilihat. Klik kanan pada GameObject, pilih Create -> 3D–> Cylinder. Kemudian keluarkan kapsul Collider, kerana pengawal watak bertindak sebagai pelanggar. Pilih Cipta–>Bahan untuk menetapkan bahan kepada watak anda. Seret bahan ke pemain.
Sekiranya anda belum memiliki kamera dalam permainan, anda boleh membuatnya dengan butang tetikus kanan di GameObject atau anda menyeret MainCamera ke GameObject anda, yang seharusnya bertindak sebagai pemain.

Pilih kamera, tetapkan semula komponen transform dan seret ke bahagian kepala pemain. Kamera tidak boleh berjalan jauh, kerana kamera tidak boleh melewati siling ketika watak anda melompat.
Anda memerlukan skrip yang membolehkan anda melihat-lihat. Semuanya digerakkan dengan tetikus dan ia bergerak pada dua paksi (x dan y). Sekiranya anda menggerakkan tetikus ke sisi, pemain harus berputar pada paksi-y. Sekiranya anda menggerakkan tetikus ke atas atau ke bawah, watak anda tidak boleh bergerak, hanya kamera pada paksi-x.
Putaran kamera harus dihadkan pada 180 ° supaya tidak berada di belakang pemain. Proses ini dikenali sebagai pengapit. Pilih kamera dan tambahkan komponen baru: MouseLook
Fungsi input untuk gerakan tetikus akan dimasukkan ke dalam fungsi pembaruan skrip.
Buat:
float mouseX = Input.GetAxis ("Tetikus X")
Ini adalah akses program dalam Unity untuk putaran tetikus.
Lakukan perkara yang sama untuk paksi-Y:
tetikus tetikusY = Input.GetAxis ("Tetikus Y");
Sekarang anda mahu mengawal kelajuan tetikus.
Oleh itu, buatlah di bawah kelas awam:
tetikus apung awam Sensitiviti = 100f;
Input dikalikan dengan Sensitiviti tetikus.
Tulis skrip untuk permainan dari perspektif orang pertama
Pertama, anda memerlukan pemain yang dapat melihat-lihat kawasan tersebut.
Sebagai contoh, anda boleh membuat objek kosong untuk ini. Pilih Createn -> Kosongkan di tetingkap hierarki dengan butang tetikus kanan. Namakan objek sebagai pemain orang pertama. Seret ke pusat pemandangan anda. Tambahkan komponen pengawal watak.

Pusatkan watak dengan F dan pastikan gizmos diaktifkan. Maka keterbatasan watak dapat dilihat. Seterusnya, buat grafik supaya objek dapat dilihat dengan lebih baik. Pergi dengan butang tetikus kanan pada GameObject, pilih Buat -> 3D–> Silinder. Kemudian keluarkan kapsul collider kerana pengawal watak bertindak sebagai collider. Pilih Buat–> Bahan untuk menetapkan bahan untuk watak anda. Seret bahan ke pemain.
Sekiranya anda belum memiliki kamera dalam permainan, anda boleh membuatnya dengan butang tetikus kanan di GameObject atau anda menyeret MainCamera ke GameObject anda, yang seharusnya bertindak sebagai pemain.

Pilih kamera, tetapkan semula komponen transform dan seret ke bahagian kepala pemain. Kamera tidak boleh berjalan jauh, kerana kamera tidak boleh melewati siling ketika watak anda melompat.
Anda memerlukan skrip yang membolehkan anda melihat-lihat. Semuanya digerakkan dengan tetikus dan ia bergerak pada dua paksi (x dan y). Sekiranya anda menggerakkan tetikus ke sisi, pemain harus berputar pada paksi-y. Sekiranya anda menggerakkan tetikus ke atas atau ke bawah, watak anda tidak boleh bergerak, hanya kamera pada paksi-x.
Putaran kamera harus dihadkan pada 180 ° supaya tidak berada di belakang pemain. Proses ini dikenali sebagai pengapit. Pilih kamera dan tambahkan komponen baru: MouseLook
Fungsi input untuk gerakan tetikus akan dimasukkan ke dalam fungsi pembaruan skrip.
Buat:
float mouseX = Input.GetAxis ("Tetikus X")
Ini adalah akses program dalam Unity untuk putaran tetikus.
Lakukan perkara yang sama untuk paksi-Y:
tetikus tetikusY = Input.GetAxis ("Tetikus Y");
Sekarang anda mahu mengawal kelajuan tetikus.
Oleh itu, buatlah di bawah kelas awam:
tetikus apung awam Sensitiviti = 100f;
Input dikalikan dengan Sensitiviti tetikus. Di samping itu, pergerakan harus bebas dari kadar bingkai. Selain itu, gandakan fungsi anda dengan Time.deltaTime;
Anda melakukan perkara yang sama dengan paksi-Y. Ini menyesuaikan kelajuan putaran dengan kadar bingkai.

Sekarang badan pemain juga harus bergerak. Rujukan dari kamera utama ke objek orang pertama diperlukan untuk ini.
Untuk melakukan ini, buat: public Transform playerBody;
Akses PlayerBody di kawasan kemas kini.
playerBody.Rotate (Vector3.up * tetikusX)

Kemudian seret pemain ke kawasan PlayerBody.

Sekarang masalah melihat ke atas dan ke bawah. Untuk melakukan ini, tetikus mesti berputar di sekitar paksi X.
Buat pemboleh ubah peribadi untuk ini:
apungan xRotasi = 0f

Di kawasan kemas kini tambahkan:
xRotasi - = tetikusY;
Sekarang putaran ditambahkan:
transform.localRotation = Quaternion.Euler ()
Quaternion bertanggungjawab untuk putaran dalam Unity in Unity. Kemudian terdapat nilai x, y dan z.
transform.localRotation = Quaternion.Euler (xRotation, 0f, 0f);
"Pengapit" sekarang mesti ditambahkan untuk putaran ini.
Untuk ini, anda memerlukan:
xRotation = Mathf.Clamp (xRotation, -90f, 90f)
Ini menghadkan pergerakan kamera hingga -90f dan 90f. Dengan cara ini anda dapat memastikan bahawa kamera tidak terlalu berlebihan di belakang pemain.

Kod masih hilang dalam fungsi permulaan, yang menetapkan kursor ke tengah skrin sebagai titik permulaan.
Cursor.lockState = CursorLockMode.Locked;
Skrip sekarang kelihatan seperti ini:

Seterusnya adalah pergerakan pemain. Input diperlukan untuk pergerakan pemain. Catatan diperlukan untuk paksi mendatar dan menegak. Kekunci pergerakan, yang telah ditentukan di Unity, terletak di papan kekunci dan W, A, S dan D.
Untuk W, Menegak = 1
S -> Vertikal = -1
Perkara yang sama berlaku untuk mendatar:
A -> -1
D -> 1
Tetapan ini berfungsi pada masa yang sama untuk pengawal.
Pemain bergerak ke sisi sepanjang paksi-x dan ke sana ke mari sepanjang paksi-z.
Pergerakan mesti selalu bersesuaian dengan arah di mana pemain melihat.
Untuk ini kita memerlukan Skrip PlayerMovement yang ditulis di Visual Studio. Tambahkan ini ke FirstPersonPlayer.
Buat Kemas kini di bawah kekosongan:
apungan x = Input.GetAxis ("Mendatar");
terapung z = Input.GetAxis ("Vertical");
Sekarang input diubah ke arah di mana pemain harus bergerak.
Verctor3 move = transform.right * x + transform.forard * z;
Anda kini telah membuat arah berdasarkan pergerakan pemain dan pergerakan x dan z masing-masing. Kesannya, watak selalu bergerak berdasarkan arah yang dia cari.

Rujukan kepada pengawal watak juga diperlukan.
Sekarang buat CharacterController sebagai umum:
pengawal CharacterController awam;
Keluarkan mesej mula.
Sekarang tambahkan di bawah langkah Vector3:
pengawal.Pindah (bergerak);

Di samping itu, kelajuan pergerakan harus dapat dikawal:
kelajuan apungan awam = 12f;
Oleh itu, gandakan pergerakan pengawal dengan kelajuan:
pengawal.Move (bergerak * kelajuan);
Di samping itu terdapat "* Time.deltaTime");
kerana berada di kawasan kemas kini.
pengawal.Move (bergerak * speed * Time.deltaTime);
Ini menjadikan kadar bingkai bebas.

Kemudian CharacterController diseret ke lapangan. Apabila kamera bergerak, begitu juga arah pemain bergerak.
Untuk dapat menaiki tangga, misalnya, perlu meningkatkan StepOffset dari CharacterController, mis. B. hingga 0.7

Step Offset menentukan seberapa tinggi langkah yang boleh anda naiki. Di bawah Slope Limit anda menentukan sudut yang boleh dinaiki oleh watak anda.
Seterusnya, anda memerlukan graviti agar watak anda tidak tersekat di udara ketika, misalnya, dia telah menaiki tangga.
Graviti didefinisikan sebagai kekuatan yang bertindak dalam masa tertentu. Ini meningkatkan kelajuan apabila ia berkesan. Pemboleh ubah kelajuan diperlukan.
Awak perlu:
Halaju vektor 3;
Kelajuan berkenaan dengan paksi-y ditetapkan dengan pemalar graviti.
halaju.y + =
Buat juga: graviti apungan awam = -9,81f;
Kemudian anda menambah graviti dengan kelajuan.
halaju.y + = graviti * Time.deltaTime;
Untuk menambahkan kelajuan yang anda tambahkan:
pengawal. Gerakkan (halaju * Time.deltaTime)
Delta y terhasil dari separuh gravitasi dikalikan dengan kuadrat masa.
Atas sebab ini kelajuan dikalikan lagi dengan Time.deltaTime.
Skrip selesai kelihatan seperti ini:

Graviation kini mempengaruhi pemain.
Buat objek kosong dan seret ke bawah pada pemain anda dan beri nama GroundCheck. Objek ini melakukan pemeriksaan fizik untuk melihat apakah pemain berdiri di atas tanah. Agar objek dapat melakukan pemeriksaan ini, sambungan harus dibuat dalam skrip.
Tambah:
awam Transform groundCheck;
tanah apungan awamJarak = 0.4f;
Terdapat juga satu
LayerMask groundMask awam;
Anda juga memerlukan pemboleh ubah yang menentukan sama ada pemain berada di lapangan:
bool isGrounded;
Sekarang datang penambahan fungsi kemas kini:
isGrounded = Physics.CheckSphere (groundCheck.position, groundDistance, groundMask);
Ini menggunakan fizik untuk memeriksa sama ada angka itu berada di atas tanah. Ini adalah ketika objek atau sfera adalah kedudukan, jarak dan topeng di tanah.

Dengan GameObject baru, bola kecil yang tidak dapat dilihat dibuat pada titik yang ditentukan. Sekiranya bertembung dengan sesuatu yang ada di GroundMask, pemain berada di atas tanah. Jika tidak, ia bukan pemain.
Sebagai tambahan:
jika (isGrounded && velocity.y <0)
{
halaju.y = 2f;
}
Dengan ini anda memaksa pemain ke tanah.
Skrip sekarang kelihatan seperti ini:

Seret GroundCheck ke medan PlayerScript masing-masing.

Tambah lapisan atau untuk topeng tanah Layer a. Anda juga boleh mentakrifkan semula lapisan baharu di bahagian atas sebelah kanan.


Anda harus menukar persekitaran, yang seharusnya bertindak sebagai lantai, ke lapisan masing-masing.
Sekiranya watak jatuh terlalu perlahan, anda boleh meningkatkan graviti.


Untuk melompat, kelajuan ditentukan oleh ketinggian melompat:
Kelajuan = punca kuasa dua (ketinggian lompat * -2 * graviti)
Untuk ini, anda memerlukan:
jika (Input.GetButtonDown ("Jump") && isGrounded)
{
velocity.y = Mathf.Sqrt ()
}
Sekarang anda menambah pemboleh ubah awam untuk ketinggian lompatan:
lompat apungan awamKetinggian = 3f;
Kemudian anda tinggalkan: gravitasi jumpHeight * -2f * tarik akar.
velocity.y = Mathf.Sqrt (jumpHeight * -2f * graviti)
Skrip selesai kelihatan seperti ini:

Untuk melompat ke tempat kerja, tanah harus ditugaskan ke lapisan Tanah. Jika tidak, skrip tidak akan berfungsi dengan melompat.
