Skip to content

Commit 6e492dd

Browse files
committed
Second chapter's guide updated
2.1
1 parent ba0b432 commit 6e492dd

File tree

2 files changed

+56
-6
lines changed

2 files changed

+56
-6
lines changed
Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,51 @@
11
# Gerakan dan Animasi
22

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+
```

Assets/2-Gerakan-dan-Animasi/Scripts/MovementInput.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,22 @@ void Start()
1616

1717
void Update()
1818
{
19+
// Dapatkan nilai input dari keyboard
1920
float inputX = Input.GetAxisRaw("Horizontal");
2021
float inputY = Input.GetAxisRaw("Vertical");
2122

23+
// Gunakan nilai yang telah didapatkan untuk menggerakkan pemain
2224
//Input axis are normalized to ensure every possible movements are in the same speed
2325
Vector3 movement = new Vector3(inputX, inputY, 0f).normalized;
2426
mouseScreenToWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);
2527
mouseToPlayer = (mouseScreenToWorld - transform.position);
2628
directionID = (int)((((Mathf.Atan2(mouseToPlayer.y, mouseToPlayer.x) * Mathf.Rad2Deg)+360f)%360 + 22.5f)/ 45)%8;
27-
Debug.Log((Mathf.Atan2(mouseToPlayer.y, mouseToPlayer.x) * Mathf.Rad2Deg + 360f)%360 + ", "+directionID + "("+ mouseToPlayer.x + ", "+mouseToPlayer.y+")");
28-
Debug.DrawLine(transform.position, mouseScreenToWorld, Color.red);
29-
// animator.SetFloat("moveHori", movement.x);
30-
// animator.SetFloat("moveVert", movement.y);
31-
animator.SetInteger("directionIndex", directionID);
29+
// Debug.Log((Mathf.Atan2(mouseToPlayer.y, mouseToPlayer.x) * Mathf.Rad2Deg + 360f)%360 + ", "+directionID + "("+ mouseToPlayer.x + ", "+mouseToPlayer.y+")");
30+
// Debug.DrawLine(transform.position, mouseScreenToWorld, Color.red);
31+
3232

33+
// Atur animasi dan gerakkan pemain
34+
animator.SetInteger("directionIndex", directionID);
3335
transform.Translate(movement * speed * Time.deltaTime);
3436
}
3537
}

0 commit comments

Comments
 (0)