Unity oyun yaparken float hatası

emre1035

Femtopat
Katılım
20 Nisan 2023
Mesajlar
40
Daha fazla  
Cinsiyet
Erkek
Merhabalar ben bir oyun yapıyorum. Bu oyundaki karakterimiz yukarı doğru çıkacak karşımıza engeller çıkacak. Karakterimiz bu engellere çarpmadan yukarı çıkacak. Ancak karakterimiz ekranın dışına çıkmasını istemiyorum bir şeyler denedim ama olmadı. Yine float hatası veriyor.

Kod:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour
{

public int harakethızı = 10;
public float speed = 5f;
public float min_X, max_X;
private float yatayharaket;
Rigidbody2D rb;
public GameObject panel;


void Start()
{
rb = GetComponent<Rigidbody2D>();

}

void Update()
{
//yatayharaket = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(yatayharaket * harakethızı * Time.deltaTime, rb.velocity.y);
}

private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "para")
{
panel.SetActive(true);


}
}






public void Sol()
{
yatayharaket = -1;

if (yatayharaket.x > max_X)
yatayharaket.x = max_X;

}

public void Sag()
{
yatayharaket = 1;

if (yatayharaket.x < min_X)
yatayharaket.x = min_X;
}

public void Dur()
{
yatayharaket = 0;
}

}
 
Karakterin ekrandan çıkmasını istemiyorsan eğer manuel olarak sağ ve solu hesapla ve if bloğu ile hareket kod bloğuna ekle. Fakat bu tüm ekran tipleri için geçerli bir şey olmaz o sebeple kamera boyutunu alıp hesaplamasını yaptıktan sonra hareket alanını kısıtlaman daha doğru olur. Yazdığın kodu ufak editledim. Daha da düzenlenmesi gerekiyor.


C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour
{
    public int haraketHizi = 10;
    public float speed = 5f;
    public float min_X, max_X;
    private float yatayHareket;
    private Rigidbody2D rb;
    public GameObject panel;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        yatayHareket = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(yatayHareket * haraketHizi * Time.deltaTime, rb.velocity.y);

        // Oyuncunun sınırlarını kontrol et
        float clampedX = Mathf.Clamp(rb.position.x, min_X, max_X);
        rb.position = new Vector2(clampedX, rb.position.y);

        // Sağ ve Sol hareket için düğmeleri kontrol et
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            Sol();
        }
        else if (Input.GetKey(KeyCode.RightArrow))
        {
            Sag();
        }
        else
        {
            Dur();
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("para"))
        {
            panel.SetActive(true);
        }
    }

    public void Sol()
    {
        yatayHareket = -1;

        if (rb.position.x > max_X)
            rb.position = new Vector2(max_X, rb.position.y);
    }

    public void Sag()
    {
        yatayHareket = 1;

        if (rb.position.x < min_X)
            rb.position = new Vector2(min_X, rb.position.y);
    }

    public void Dur()
    {
        yatayHareket = 0;
    }
}
 
Karakterin ekrandan çıkmasını istemiyorsan eğer manuel olarak sağ ve solu hesapla ve if bloğu ile hareket kod bloğuna ekle. Fakat bu tüm ekran tipleri için geçerli bir şey olmaz o sebeple kamera boyutunu alıp hesaplamasını yaptıktan sonra hareket alanını kısıtlaman daha doğru olur. Yazdığın kodu ufak editledim. Daha da düzenlenmesi gerekiyor.


C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour
{
    public int haraketHizi = 10;
    public float speed = 5f;
    public float min_X, max_X;
    private float yatayHareket;
    private Rigidbody2D rb;
    public GameObject panel;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        yatayHareket = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(yatayHareket * haraketHizi * Time.deltaTime, rb.velocity.y);

        // Oyuncunun sınırlarını kontrol et
        float clampedX = Mathf.Clamp(rb.position.x, min_X, max_X);
        rb.position = new Vector2(clampedX, rb.position.y);

        // Sağ ve Sol hareket için düğmeleri kontrol et
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            Sol();
        }
        else if (Input.GetKey(KeyCode.RightArrow))
        {
            Sag();
        }
        else
        {
            Dur();
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("para"))
        {
            panel.SetActive(true);
        }
    }

    public void Sol()
    {
        yatayHareket = -1;

        if (rb.position.x > max_X)
            rb.position = new Vector2(max_X, rb.position.y);
    }

    public void Sag()
    {
        yatayHareket = 1;

        if (rb.position.x < min_X)
            rb.position = new Vector2(min_X, rb.position.y);
    }

    public void Dur()
    {
        yatayHareket = 0;
    }
}
Sağol teşekkür ettim
 

Technopat Haberler

Yeni mesajlar

Geri
Yukarı