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

Ahmet Efe11

Decapat
Katılım
18 Ağustos 2023
Mesajlar
159
Çözümler
1
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?
 

Technopat Haberler

Geri
Yukarı