@@ -76,3 +76,51 @@ Berpindah ke _window Animator Controller_, kita atur bagaimana transisi tiap ani
76
76
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 .
77
77
78
78
## 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 )+ 360 f )% 360 + 22 . 5 f )/ 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 = 5 f ;
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 , 0 f ).normalized ;
118
+ mouseScreenToWorld = Camera .main .ScreenToWorldPoint (Input .mousePosition );
119
+ mouseToPlayer = (mouseScreenToWorld - transform .position );
120
+ directionID = (int )((((Mathf .Atan2 (mouseToPlayer .y , mouseToPlayer .x ) * Mathf .Rad2Deg )+ 360 f )% 360 + 22 . 5 f )/ 45 )% 8 ;
121
+
122
+ animator .SetInteger (" directionIndex" , directionID );
123
+ transform .Translate (movement * speed * Time .deltaTime );
124
+ }
125
+ }
126
+ ```
0 commit comments