Skip to content

Commit 4160b8c

Browse files
committed
Second chapter finished. Ready for revision
1 parent 22a2fe6 commit 4160b8c

File tree

5 files changed

+139
-0
lines changed

5 files changed

+139
-0
lines changed

Assets/2-Gerakan-dan-Animasi/README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,51 @@ Berpindah ke _window Animator Controller_, kita atur bagaimana transisi tiap ani
7676
Transisi animasi akan berjalan apabila beberapa kondisi terpenuhi. Pada _Animator Controller_ terdapat empat macam tipe parameter yang bisa kita gunakan untuk menyusun kondisi transisi animasi; _float_, _integer_, _bool_, dan _trigger_. Parameter-parameter yang dibutuhkan terdapat pada tab _parameters_. Kita buat paramater baru bertipe _integer_. Penjelasan mengenai penggunaan parameter akan diterangkan pada sub-bab berikutnya.
7777

7878
## Mengubah _Sprite_ Objek _Player_ Berdasarkan Posisi _Mouse_
79+
Kita akan mengaplikasikan teori trigonometri untuk membantu pekerjaan kita menentukan _sprite player_ yang harus ditampilkan sesuai dengan posisi _mouse_ terhadap objek _player_.
80+
81+
Perhatikan gambar berikut:
82+
![Sudut](/img/sudut.png)
83+
84+
Kita memiliki _spritesheet_ yang terdiri dari delapan gambar berbeda yang juga menghadap ke arah yang berbeda juga. Pada gambar, garis hitam menunjukkan besar sudut yang dimiliki _spritesheet_ kita, sedangkan garis merah adalah jangkauan yang apabila posisi _mouse_ berada di antara kedua garis merah, maka _player_ akan "menghadap" ke arah dengan sudut sesuai dengan garis hitam yang terapit oleh kedua garis merah tersebut. Angka biru adalah indeks arah, dengan 0 menghadap ke kanan, 1 menghadap ke kanan atas, dan seterusnya. Indeks inilah yang akan kita cari untuk mengatur transisi animasi pada _Animator Controller_.
85+
86+
Perhitungan untuk mendapatkan indeks didefinisikan dengan rumus berikut:
87+
![Rumus Indeks](/img/index-eq.png)
88+
89+
_playerToMouse_ adalah vektor yang menghubungkan posisi _mouse_ dengan posisi _player_. Posisi _mouse_ didapat dengan menggunakan fungsi _Camera.ScreenToWorldPoint()_, di mana input yang dibutuhkan adalah posisi _mouse_ pada layar (diperoleh dari _Input.mousePosition_).
90+
91+
```C#
92+
Vector3 mouseScreenToWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);
93+
Vector3 mouseToPlayer = (mouseScreenToWorld - transform.position);
94+
int directionID = (int)((((Mathf.Atan2(mouseToPlayer.y, mouseToPlayer.x) * Mathf.Rad2Deg)+360f)%360 + 22.5f)/ 45)%8;
95+
```
96+
97+
Indeks yang didapat kemudian diteruskan ke parameter pada _Animator Controller_ melalui fungsi _AnimatorController.SetInteger()_ yang mengambil dua paramater; nama parameter yang akan diatur nilainya dan besar nilai yang akan diberikan.
98+
99+
```C#
100+
public class MovementInput : MonoBehaviour
101+
{
102+
private int directionID;
103+
private Animator animator;
104+
private Vector3 mouseScreenToWorld, mouseToPlayer;
105+
public float speed = 5f;
106+
107+
void Start()
108+
{
109+
animator = gameObject.GetComponent<Animator>();
110+
}
111+
112+
void Update()
113+
{
114+
float inputX = Input.GetAxisRaw("Horizontal");
115+
float inputY = Input.GetAxisRaw("Vertical");
116+
117+
Vector3 movement = new Vector3(inputX, inputY, 0f).normalized;
118+
mouseScreenToWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);
119+
mouseToPlayer = (mouseScreenToWorld - transform.position);
120+
directionID = (int)((((Mathf.Atan2(mouseToPlayer.y, mouseToPlayer.x) * Mathf.Rad2Deg)+360f)%360 + 22.5f)/ 45)%8;
121+
122+
animator.SetInteger("directionIndex", directionID);
123+
transform.Translate(movement * speed * Time.deltaTime);
124+
}
125+
}
126+
```
6.76 KB
Loading
2.34 KB
Loading
23.1 KB
Loading

Assets/2-Gerakan-dan-Animasi/img/sudut.png.meta

Lines changed: 91 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)