Bu gün (phisics kullanarak) birlik ile bir 2D karakter denetleyicisi oluşturmaya çalışıyorum. Fizik motorları için oldukça yeniyim ve aradığım kontrolü hissetmek gerçekten zor. Herkes bulduğum bir sorun için çözüm önermek gerçekten mutlu olurdu:
Bu benim FixedUpdate'ım şu an:
public void FixedUpdate()
{
Vector3 v=new Vector3(0,-10000*Time.fixedDeltaTime,0);
_body.AddForce(v);
v.y=0;
if(state(MovementState.Left))
{
v.x=-_walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=-_maxWalkSpeed;
}
else if(state(MovementState.Right))
{
v.x= _walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=_maxWalkSpeed;
}
_body.velocity=v;
Debug.Log("Velocity: "+_body.velocity);
}
Burada sadece sol ve sağ için bir yerçekimi ve doğrusal kuvvet uygulayarak sert gövdeyi hareket ettirmeye çalışıyorum. Hareket ederken zıplama ve 0 sürtünme ve hareketsiz dururken 1 sürtünme yapmayan bir fizik malzeme ayarladım. Asıl sorun, eğimli çarpıştırıcılara sahip olmam ve hızın yukarı (daha yavaş), yokuştan aşağı (daha hızlı) gitmesi ve düz bir çarpıştırıcıda (normal) yürümesi. Bu nasıl düzeltilebilir? Gördüğünüz gibi x ekseni için her zaman aynı hızı uyguluyorum.
Oyuncu için kuvvetleri uyguladığım katı cisim olan ayak pozisyonunda bir küre ile ayarladım.
Bununla hayatımı kolaylaştıracak diğer ipuçlarını bekliyoruz :).
PD Eve gelirken, oyuncunun yürüdüğü yüzeye paralel sabit bir kuvvet uygulayarak bunu çözebileceğimi fark ettim, ancak en iyi yöntem olup olmadığını bilmiyorum.