Unity'de karakterin hasar alması nasıl sağlanır?

Ahmet Efe11

Femtopat
Katılım
18 Ağustos 2023
Mesajlar
29
Daha fazla  
Cinsiyet
Erkek
Unity ile bir oun geliştirirken karakterin hasar almasını nasıl sağlayacağımı bulamadım. Kodlar şu şekilde.

Kod:
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class characterhealth : MonoBehaviour
{
    // health
    public int Maxhealth = 1;
    public int currenthealth;
    public Healthbar healtbar;


    //Enemy AttackTime
    public bool enemyattack;
    public float enemytimer;


    void Start()
    {
        currenthealth = Maxhealth;
        enemytimer = 1.5f;
    }
    // düşmanın vurma arlığı
    void EnemyAttackTimer()
    {
        if (enemyattack == false)
        {
            enemytimer -= Time.deltaTime;
        }
        if (enemytimer < 0)
        {
            enemytimer = 0f;
        }
        if (enemytimer == 0f)
        {
            enemyattack = true;
            enemytimer = 1.5f;
        }
    }
    // düşmana vurduğumuzda kitlenmesi
    public void characterdamage()
    {
        if (Input.GetKeyDown(KeyCode.E))
        {
            enemyattack = false;
        }
    }
    //karakterin hasar alması
    public void Takedamage(int damage)
    {
        if (enemyattack == true)
        {
            currenthealth -= 20;
            enemyattack = false; 
        }
        healtbar.SetHealth(currenthealth);
    }

    // Update is called once per frame
    void Update()
    {
        EnemyAttackTimer();
        characterdamage();
    
        if (Input.GetKeyDown(KeyCode.Z))
        {
            Takedamage(20);
        }
 
    }
 
}
bu ve
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Healthbar : MonoBehaviour
{

    public Slider slider;
    public void SetMaxHealth(int health)
    {
        slider.maxValue = health;
        slider.value = health;

    }
    public  void SetHealth(int health)
    {
        slider.value = health;

    }


}
 
Son düzenleyen: Moderatör:
TakeDamage fonksiyonunu hasar aldığınız zaman çağırmanız gerekiyor. Şu anda Z tuşuna bastığınızda bu fonksiyon çağrılıyor ancak karakteriniz atak yapmıyorsa canı azalmıyor. Çünkü if(enemyattack == true) ise bu hasar alma çalışıyor sadece. O kontrolü niye koydunuz bilmiyorum ama canın azalması kısmını o if kontrolünün dışına alırsanız şartlar ne olursa olsun düşmanınız hasar alır. Ayrıca canın - ye düşmemesi için canı azalttıktan sonra kontrol etmeyi unutmayın
C#:
if(currentHealth <0)
{
    currentHealth = 0;
}

//ya da daha temiz bir şekilde yapmak isterseniz düşmanın canının minimum değeri
//0 olacak şekilde böyle limitleyebilirsiniz. İkisiniden birini kullanabilirsiniz.
currentHealth = Mathf.Clamp(0,currentHealth);
 
Enemytimer==0 da else if kullan. Ve == değil de küçük eşittir kullancan, zaman azalıyor ama sıfıra denk gelmiyor, sıfırdan küçük oluyor.
 
Son düzenleme:
TakeDamage fonksiyonunu hasar aldığınız zaman çağırmanız gerekiyor. Şu anda Z tuşuna bastığınızda bu fonksiyon çağrılıyor ancak karakteriniz atak yapmıyorsa canı azalmıyor. Çünkü if(enemyattack == true) ise bu hasar alma çalışıyor sadece. O kontrolü niye koydunuz bilmiyorum ama canın azalması kısmını o if kontrolünün dışına alırsanız şartlar ne olursa olsun düşmanınız hasar alır. Ayrıca canın - ye düşmemesi için canı azalttıktan sonra kontrol etmeyi unutmayın
C#:
if(currentHealth <0)
{
 currentHealth = 0;
}

//ya da daha temiz bir şekilde yapmak isterseniz düşmanın canının minimum değeri
//0 olacak şekilde böyle limitleyebilirsiniz. İkisiniden birini kullanabilirsiniz.
currentHealth = Mathf.Clamp(0,currentHealth);

Onu koyma amacım health bar üzerinde gerçekten etki ediyor mu etmiyor mu diye basit bir kontrolle kontrol etmekti

Enemytimer==0 da else if kullan. Ve == değil de küçük eşittir kullancan, zaman azalıyor ama sıfıra denk gelmiyor, sıfırdan küçük oluyor.
O kısımda sıkıntı yaratmıyor ben vurduktan sonra bir süre kitlenip geri açılıyor düşman ama işte sıkıntı ben z tuşuna bastığımda canım azalmıyor ( veya health bara yansımıyor)
 
Max health e 1 demişsin 100 demek istemiş olabilirsin, current healti max healte eşitlemişsin yani o da 1, sonra current healthten 20 çıkarmışsın ve sonuç eksi 19 yapar slider sıfırla 1 arası değer alır.

En iyisi maxhealti ilkte 100e eşitle ve slider.value = health / maxhealth yapacaksın ve öncesinde healti arkadaşın dediği gibi 0 ile maxhealth arası clample yoksa slider.value hata verir
 
Onu koyma amacım health bar üzerinde gerçekten etki ediyor mu etmiyor mu diye basit bir kontrolle kontrol etmekti


O kısımda sıkıntı yaratmıyor ben vurduktan sonra bir süre kitlenip geri açılıyor düşman ama işte sıkıntı ben z tuşuna bastığımda canım azalmıyor ( veya health bara yansımıyor)
Fonksiyonu çağırmışsınız fakat if'in içindeki "enemyattack == true" değerini sağlamıyor olabilir.


CSS:
if (Input.GetKeyDown(KeyCode.Z))
{
    enemyattack = true;
    Takedamage(20);
}

şeklinde değiştirip dener misiniz?
 

Geri
Yukarı