Unity oyundaki karakterin hızı FPS'e göre değişiyor

UstaEDDIZ

Decapat
Katılım
2 Kasım 2020
Mesajlar
18
Daha fazla  
Cinsiyet
Erkek
Unity ile oyun geliştirmeye başladım ve daha çok acemiyim ilk başta böyle bir protatip gibi bir şey yaptım 2D platformer fakat oyunu denemeleri için bazı arkadaşlarıma gönderdeğimde yavaş olduğunu söylediler karakterin bende fark ettim ki oyunu 60 FPS sabit oynamazsan FPS yükselince karakter yavaşlıyor düşünce hızlanıyor bunu önlemek için "time.Deltatime" ile çarptıydım hareket yönlerini ama işe yaramamış galiba. Kodlarımın fotosunu en aşağıya fotoğraf olarak da attım kodlara düzgün çalışıyor zaten sadece FPS yükselince yavaşlıyor oyun. Çözümü nedir bunun kodlama bilen arkadaşlar yardımcı olursa çok mutlu olurum.


Kod:
Kod:
using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class KarakterHareket : MonoBehaviour

{

    public float yatayhareket;

    public int harekethızı;

    public int zıplamahızı;

    public int zıplamahakkı;



    Rigidbody2D rb;



    public bool karakteryerde = true;

    public bool faceright = true;

    void Start()

    {

        rb = GetComponent<Rigidbody2D>();

        zıplamahakkı = 2;

    }



    void Update()

    {

        yatayhareket = Input.GetAxis("Horizontal");

        rb.velocity = new Vector2(yatayhareket * harekethızı * 100 * Time.deltaTime, rb.velocity.y);



        if(Input.GetKeyDown(KeyCode.Space) && (karakteryerde==true || zıplamahakkı > 0))

        {

            rb.velocity = Vector2.up * zıplamahızı * 100 * Time.deltaTime;

            karakteryerde = false;

            zıplamahakkı -= 1;

        }



        if(yatayhareket > 0 && faceright == false)

        {

            turn();

        }

        if(yatayhareket < 0 && faceright ==true)

        {

            turn();

        }

    }



    private void OnCollisionEnter2D(Collision2D temas)

    {

        if(temas.gameObject.tag == "zemin")

        {

            karakteryerde = true;

            zıplamahakkı = 2;

        }

    }





    void turn()

    {

        faceright = !faceright;

        Vector2 yeniscale = transform.localScale;

        yeniscale.x *= -1;

        transform.localScale = yeniscale;

    }

}
 

Dosya Ekleri

  • resim_2021-06-11_162021.png
    resim_2021-06-11_162021.png
    545,8 KB · Görüntüleme: 72
  • resim_2021-06-11_162055.png
    resim_2021-06-11_162055.png
    235,6 KB · Görüntüleme: 79
  • resim_2021-06-11_162118.png
    resim_2021-06-11_162118.png
    190 KB · Görüntüleme: 68
Frame rate'e değil de Delta Time'a bağımlı yaparsanız bahsettiğiniz sorun ortadan kalkar.


Tüm vektörlerin Delta Time'a bağımlı olması lazım. Eğer Delta Time kullandığınız halde yavaşlama oluyorsa kodunuzun bazı yerleri hala frame rate üzerinden yenilenerek çalışıyor demektir. void Update ilk şüphelenmeniz gereken method.
 
Frame rate'e değil de Delta Time'a bağımlı yaparsanız bahsettiğiniz sorun ortadan kalkar.


Tüm vektörlerin Delta Time'a bağımlı olması lazım. Eğer Delta Time kullandığınız halde yavaşlama oluyorsa kodunuzun bazı yerleri hala frame rate üzerinden yenilenerek çalışıyor demektir. void Update ilk şüphelenmeniz gereken method.
Dediğiniz gibi yaptım zaten ama yinede frame rateye göre yapıyor. saatlerdir birsürü şey denedim ama düzeltmedim bu kodun normalde düzgün olması lazım hata varsa bile hiç bi şekilde bulamıyorum.
 
Update yerine fixedUpdate kullanabilirisiniz. Eğer sorun hala devam ediyosa time.deltatime ı doğru kullandığınızdan emin olun
 

Geri
Yukarı