Öncelikle sadece 3D capsule şekli ile başladım oyunu yapmaya, capsule sorunsuz bir şekilde ileri geri gidiyor gidilen yöne göre dönüş yapıyordu. Fakat daha sonra 3D bir humanoid model eklediğimde baya bir sorun çıkardı acaba modelle mi alakalı bilmiyorum. Yürüme animasyonu ile Idle animasyonu arasında speed değişkeni verdim ve aralarında bağ oluşturdum. Kodlar şöyle:
public class Mover : MonoBehaviour
{
Animator _animator;
Rigidbody _rb;
[SerializeField] float moveSpeed = 5.0f;
[SerializeField] float rotateSpeed = 0.15f;
void Start()
{
_rb = GetComponent<Rigidbody>();
_animator = GetComponentInChildren<Animator>();
}
void Update()
{
Debug.Log(_rb.velocity.magnitude);
UpdateAnimator();
}
public void Move(float horizontal, float vertical)
{
//x ve z eksenlerinde hareketi ayarla
float xAxis = horizontal;
float zAxis = vertical;
//yönü x ve z eksenlerinde ayarlama
Vector3 movement = new Vector3(xAxis, 0f, zAxis);
//çapraz gidildiğinde hızlanmayı düzeltme
movement = Vector3.ClampMagnitude(movement, 1);
//baktığı yönü belirleme
Vector3 movementValue = new Vector3(horizontal, 0f, vertical);
if (movementValue != Vector3.zero) //hareket hızı 0dan farklı olduğunda
{
//smooth bir şekilde rotation ayarı
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(movementValue), rotateSpeed * Time.deltaTime);
//hızını ayarlama ve hareket ettirme
_rb.velocity = movement * moveSpeed * Time.deltaTime;
}
}
void UpdateAnimator()
{
_animator.SetFloat("speed", _rb.velocity.magnitude);
}
}
=========================================================================================================
private bool InteractWithMovement()
{
//1 ile -1 değerlerini input ile al
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
//küçük değerleri 0'a eşitle
horizontal = Mathf.Abs(horizontal) < 0.01f ? 0f : horizontal;
vertical = Mathf.Abs(vertical) < 0.01f ? 0f : vertical;
_mover.Move(horizontal, vertical);
if(horizontal == 0 || vertical == 0)
{
return false;
}
return true;
}
Aşağıdaki kod ile input alıp üstteki koda gönderiyorum. Animasyon konusunda pek tecrübem olmadığı için çözemedim açıkcası. İsterseniz özelden görüşüp ekran da paylaşabilirim. Şimdiden teşekkürler.
Eklemeyi unuttum, karakter güneş ekseni etrafında döner gibi dönüyor hareket etmeye çalıştığımda ve o merkezde capsule collider'ı kalıyor. Ve hareket etmeyi bıraktığımda hala yavaş bi şekilde kaymaya devam ediyor.