Jump to content
Unity Insider Forum

Übernehmen einer Variabel aus anderem Scrpt


Aron23

Recommended Posts

Script mit der Variabel:

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

public class WoodUpgrade : MonoBehaviour
{
    public GameObject UpgradeDisplay;
    public GameObject AutoWood;
    int Neu;
    int Alt;
    public int WoodPerSec = 1;
   
    public void Upgrade()
    ...

Script mit übernommener Variabel:

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

public class AutoWood : MonoBehaviour
{
    public bool CreatingWood = false;
    public static int WoodIncrease = 1;
    public int InternalIncrease;
    public Animator animator;

    void Update()
    {
        WoodIncrease = WoodUpgrade.WoodPerSec;
        animator.SetFloat("HolzFällen", 1);
        InternalIncrease = WoodIncrease;
        if (CreatingWood == false)
        {
            CreatingWood = true;
            StartCoroutine(CreateWood());
        }
    }
    IEnumerator CreateWood()
    {
        GlobalWood.WoodCount += InternalIncrease;
        yield return new WaitForSeconds(1);
        CreatingWood = false;
    }
}


 

Ich verstehe meinen Fehler nicht aber es muss ja einen geben Danke für jede hilfe.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe erst einmal ein paar CodeTags eingefügt, damit man erkennt, wo dein Code beginnt und auch endet.
(Das ist das Symbol <> was du oben  neben den Smiley sehen kannst. Wenn du dann noch die Formatierung C auswählst wird es auch schön bunt)

Zum Problem:
Dein AutoWood Script kennt das WoodUpgrade Script gar nicht. Deswegen kriegst du auch keinen Wert. Du solltest außerdem in der Console eine Fehlermeldung bekommen.

Füge mal oben bei der Variablendeklaration einen Variablentyp WoodUpgrade ein und gib ihm einen Namen wie z.B. myWoodUpgrade. Das WoodUpgrade Script ziehst du dann im Inspector in den leeren Slot. Ja, und dann kannst du mit dieser Variable arbeiten und alle public Dinge abfragen und auch setzen.
Bedenke aber, dass das WoodUpgrade Script auf einem Objekt in der Szene liegen muss, damit es auch arbeitet. Ich weiss ja nicht wo dein Sript in der Szene rum macht, deswegen kann ich dir jetzt auch nur diese allgemeine Hilfestellung anbieten. Wie dem auch sei; Wenn dein Script auf irgend einem anderen Objekt in der Szene liegt, dann zieh das andere Objekt einfach auf den Slot. Das Script wird dann automatisch ausgewählt. Ist das Script aber auf dem selben Objekt, wie dein AutoWood Script, dann packe es dir im Inspector und ziehe es direkt in den leeren Slot.

public WoodUpgrade myWoodUpgrade; // im Inspector einfügen

void Update()
    {
        WoodIncrease = myWoodUpgrade.WoodPerSec;  
        animator.SetFloat("HolzFällen", 1);
        InternalIncrease = WoodIncrease;
        if (CreatingWood == false)
        {
            CreatingWood = true;
            StartCoroutine(CreateWood());
        }
    }
    ...
}

Das nächste Mal musst du schon ein wenig mehr erzählen. Die 2 Script-Teile alleine sind nur bedingt nützlich. Was ist denn mit GlobalWood? Das sollte auch Probleme machen, wenn die Variablen nicht zufälligerweise static sind!

Übrigens: Falls dein Animator funktioniert, weisst du ja wie man eine Komponente mit einer Variable verknüpft.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...