Jedna zmienna do kilku obiektów

0

Witam
Chciałbym aby 1 wartość była dodana do kilku obiektów i aby niebyła zależne od siebie . Problem w tym że chcąc odjąć wartość od 1 obiektu odejmuje od każdego , tak wiem logiczne bo wartość jest w 1 zmiennej ale nie będę robił oddzielnie do każdego obiektu inną zmienną . Dali byście mi jakąś poradę jak mógłbym to wykonać ?
Pracuje w środowisku Unity .

Z góry dziękuję a tutaj macie kod :

 
public class Enemy : MonoBehaviour { 
void Update () {
        if (Config.hp <=0)
        {
            Destroy(gameObject);         
        }
 
public class Config : MonoBehaviour {

    public static float hp = 100f;
    public static float maxhp = 100f;
    public static float hit = 15f;
    
}
using UnityEngine;
using System.Collections;

public class Dmg : MonoBehaviour
{

    void OnTriggerEnter2D(Collider2D other)
    {
            Debug.Log(Config.hp);
            Config.hp -= Config.hit;
        
        Destroy(gameObject);
    }
}
 
1

Jeśli dobrze zrozumiałem na czym polega Twój problem to hp, maxhp i hit nie powinny być zadeklarowane jako static (statyczne). Słowo static definiuje zmienne jako należące do typu (klasy) a nie obiektu. Usuń static i to powinno rozwiązać Twój problem.

Aha i nigdy nie udostępniaj pól klasy bezpośrednio, użyj do tego właściwości chyba że są to stałe (zadeklarowane z użyciem słowa const).

(...)ale nie będę robił oddzielnie do każdego obiektu inną zmienną(...)

To zdanie świadczy o tym że nadal nie do końca rozumiesz na czym polega programowanie obiektowe i czym są właśnie obiekty. Proponuję jeszcze raz dokładnie przestudiować temat.

1

@Sqery

hp powinno nalezec do Enemy albo do Playera albo jakiegos intefrejsu a nie byc w configu

Chyba ze chcesz ustawiac sobie kto z jakim zaczyna hp. Ale to wtedy wystarczy przypisac raz przy Tworzeniu obiektu

0

Zmieniłem zmienne z public static na public i zmienne "hp , maxhp" przeniosłem do klasy enemy a zmienną hit to klasy Dmg .
Teraz mając kilka obiektów wartość zmiennej hp zmniejsza się tylko w jednym obiekcie i przy kolizji z pociskiem mam taki błąd :
__NullReferenceException: Object reference not set to an instance of an object __

Wiecie co źle zrobiłem ?

 
public class Enemy : MonoBehaviour {

    
    public float speed = 1f;
    public  float hp = 100f;
    public  float maxhp = 100f;
    


 
	void Update () {


        if (hp <=0)
        {
            Destroy(gameObject);
        }
    }

 

}
public class Dmg : MonoBehaviour
{
    public Enemy enemy;
    public float hit = 15f;







    void OnTriggerEnter2D(Collider2D other)
    {
            Debug.Log("DMG");
            Debug.Log(enemy.hp);
        enemy.hp -= hit;
        
        Destroy(gameObject);
    }
}
 
1

Do zmiennej enemy nie przypisujesz nigdzie obiektu, więc jest nullem.

0
some_ONE napisał(a):

Do zmiennej enemy nie przypisujesz nigdzie obiektu, więc jest nullem.

Przypisuje tylko z interfejsu unity :
user image

Tylko mogę przypisać tylko 1 obiekt , a kolejne nie reagują na skrypt a dokładniej odwołują błąd który pisałem w poprzednim poście .

0

czemu w ogole masz klase dmg? chyba ze to jakis pocisk

masz obiekt

Collider2D other

mozesz ten obiekt wykorzystac na to by zadawac obrazenia Enemy. Z tego co pamietam to mozesz ten obiekt rzutowac na Enemy i pozniej odpisac jakiemus enemy zycie.

0

W Update klasy Enemy niszczysz obiekt. Prawdopodobnie odwołujesz się później do niego w OnTriggerEnter w klasie dmg: enemy.hp. Przed takim odwołaniem powinieneś sprawdzić, czy enemy nie jest przypadkiem nullem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1