|
1 | 1 | # Gerakan dan Animasi
|
2 | 2 |
|
3 |
| -TBA |
| 3 | +Bab ini akan menjelaskan beberapa hal berikut: |
| 4 | + |
| 5 | +1. Menggerakkan Objek |
| 6 | +2. Mengambil Posisi _Mouse_ |
| 7 | +3. Mengatur Animasi _Sprite_ |
| 8 | +4. Mengubah _Sprite_ Objek _Player_ Berdasarkan Posisi _Mouse_ |
| 9 | + |
| 10 | +## Menggerakkan Objek |
| 11 | +Buat _script_ C# baru (misal kita beri nama _MovementInput.cs_), kemudian buka _script_ yang sudah dibuat pada _text editor_ atau _IDE yang telah ter-_install_ di komputer Anda. Tambahkan kedua _variabel_ berikut di dalam _class MovementInput_ |
| 12 | + |
| 13 | +```C# |
| 14 | +public float speed = 5f; |
| 15 | +``` |
| 16 | + |
| 17 | +Seluruh _public variable_ yang Anda masukkan dalam semua jenis _class_ secara otomatis akan tampil di tampilan _Inspector_ objek _Unity_ dan variabel tersebut dapat diubah nilainya dan disimpan perubahannya secara otomatis pada _Edit Mode_. |
| 18 | + |
| 19 | +Supaya kita mampu menggerakkan objek sesuai dengan input yang diberikan pada _keyboard, maka kita harus tahu tombol mana saja yang ditekan. _Unity_ telah memudahkan kita untuk melakukan hal tersebut melalui sebuah _interface_ pada _class Input_ yang mengurus segala hal yang berkaitan dengan perangkat input. Tak hanya itu, _Unity_ juga menentukan fungsi masing-masing dari setiap tombol pada perangkat input, dalam kasus ini, kita mampu mendapatkan informasi input yang berkaitan dengan gerakan objek menggunakan fungsi _Input.GetAxisRaw()_. Pada fungsi _Update()_, tambahkan kode berikut: |
| 20 | + |
| 21 | +```C# |
| 22 | + void Update() |
| 23 | + { |
| 24 | + float inputX = Input.GetAxisRaw("Horizontal"); |
| 25 | + float inputY = Input.GetAxisRaw("Vertical"); |
| 26 | + |
| 27 | + Vector3 movement = new Vector3(inputX, inputY, 0); |
| 28 | + |
| 29 | + transform.Translate(movement * speed * Time.deltaTime); |
| 30 | + } |
| 31 | +``` |
| 32 | + |
| 33 | +Fungsi _GetAxisRaw_ membutuhkan sebuah parameter input berupa _keyword_ untuk mendapatkan jenis input apa yang ingin didapatkan. Daftar _Keyword_ dapat kita lihat pada konfigurasi input _Unity_ melalui _Edit > Project Settings > Input Manager_ |
| 34 | + |
| 35 | +<!-- Tambahin gambar Project Settings > Input Manager --> |
| 36 | + |
| 37 | +Fungsi _GetAxisRaw_ akan menghasilkan nilai antara -1, 0, dan 1 tergantung dari tombol yang ditekan; apabila tombol diatur sebagai _negative button_, nilai yang dihasilkan adalah -1. Sebaliknya, apabila diatur sebagai _positive button_, nilai yang dihasilkan adalah 1. Apabila tidak ada tombol yang ditekan, nilai yang dihasilkan adalah 0. |
| 38 | + |
| 39 | +Variable _inputX_ dan _inputY_ digunakan untuk menampung informasi input dari fungsi _Input.GetAxisRaw()_. Informasi input dari kedua variabel akan digabung menjadi satu variabel bertipe _Vector3_, yaitu sebuah _class_ yang mendefinisikan sebuah vektor dalam dimensi tiga. Objek akan digeser melalui fungsi _Translate()_ dengan variabel _Vector3_ sebagai input dan besar perpindahan objek. Terlihat pada contoh bahwa _movement_ selain dikalikan dengan _speed_ juga dikalikan dengan _Time.deltaTime_. Hal ini dilakukan agar simulasi perpindahan objek per detik dapat berjalan dengan benar, sebaliknya perpindahan objek akan terlihat semakin cepat. |
| 40 | + |
| 41 | +Mari kita uji coba program yang telah kita tulis dengan menjalankan mode _Game mode_. Anda akan mendapati pergerakan diagonal objek yang terlihat lebih cepat dibanding pergerakan vertikal maupun horizontal. Hal ini terjadi karena perbedaan panjang vektor pada variabel _movement_. Untuk mengatasi masalah tersebut, kita perlu menormalisasi variabel _movement_ agar panjang vektornya bernilai 1. |
| 42 | + |
| 43 | +```C# |
| 44 | + void Update() |
| 45 | + { |
| 46 | + float inputX = Input.GetAxisRaw("Horizontal"); |
| 47 | + float inputY = Input.GetAxisRaw("Vertical"); |
| 48 | + |
| 49 | + //Mengambil nilai variabel vektor unit dari variabel Vector3 yang baru dibuat |
| 50 | + Vector3 movement = new Vector3(inputX, inputY, 0).normalized; |
| 51 | +``` |
0 commit comments