Jump to content
Unity Insider Forum

Scripting einfacher - Schleife?


Hermetes

Recommended Posts

Mein Script wird immer länger und ich frage mich ob sich das nicht einfacher und übersichtlicher mit einer Schleife gestalten lässt.

	public Image ProfilePic;
	public Image Background;
	public Image LivebarPic;
	public Image HealthbarPic;
	public Image StaminabgPic;
	public Image StaminabarPic;
	public Image wishtable;
	public Image HintergrundImage;	
	
	public void SetPic(Sprite pic1,Sprite pic2,Sprite pic3,Sprite pic4,
		Sprite pic5,Sprite pic6,Sprite pic7,Sprite pic11)
	{
		
		ProfilePic.sprite = pic1;
		ProfilePic.color = Color.white;
		
		Background.sprite = pic2;
		Background.color = Color.white;
		
		LivebarPic.sprite = pic3;
		LivebarPic.color = Color.white;
		
		HealthbarPic.sprite = pic4;
		HealthbarPic.color = Color.white;
		
		StaminabgPic.sprite = pic5;
		StaminabgPic.color = Color.white;
		
		StaminabarPic.sprite = pic6;
		StaminabarPic.color = Color.white;
		
		wishtable.sprite = pic7;
		wishtable.color = Color.white;
		
		HintergrundImage.sprite = pic11;
		HintergrundImage.color = Color.white;
		
	}
	
	
	
	public void ClearPic()
	{
		ProfilePic.color = Color.clear;
		Background.color = Color.clear;
		LivebarPic.color = Color.clear;
		HealthbarPic.color = Color.clear;
		StaminabgPic.color = Color.clear;
		StaminabarPic.color = Color.clear;
		wishtable.color = Color.clear;
		HintergrundImage.color = Color.clear;
	}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wozu machst du die Images erst "public", wenn du sie dann doch erst wieder über eine Methode setzt? Für eine Schleife müsstest du die Images in ein Array oder eine Collection (List) packen. Der Methode "SetPic" könntest du dann das Array übergeben und innerhalb deiner Methode über foreach über jedes Arrayelement iterieren.

Wenn du deinen Code nicht auf ein Array ändern willst und nur deinen Methodenkopf kürzen willst, dann ginge das so:
(das hat allerdings auch den Nachteil, daß man der Methode SetPic nicht mehr entnehmen kann, welches Sprite für welches Image ist)

public void SetPic(params Sprite[] pics)
	{
		
		ProfilePic.sprite = pics[0];
		ProfilePic.color = Color.white;
		
		Background.sprite = pics[1];
		Background.color = Color.white;
		
		LivebarPic.sprite = pics[2];
		LivebarPic.color = Color.white;
		
		HealthbarPic.sprite = pics[3];
		HealthbarPic.color = Color.white;
		
		StaminabgPic.sprite = pics[4];
		StaminabgPic.color = Color.white;
		
		StaminabarPic.sprite = pics[5];
		StaminabarPic.color = Color.white;
		
		wishtable.sprite = pics[6];
		wishtable.color = Color.white;
		
		HintergrundImage.sprite = pics[7];
		HintergrundImage.color = Color.white;
		
	}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich würde alles in ein Array packen. Da musste auch einmal die ganzen Variablen ansprechen, aber danach kann man alles per Loop machen.

Ansonsten machst du es komplizierter, dafür wird schöner mit neuen Klassen. Beispiel Klasse Pic, publics Image und Color und die Funktionen SetColor and ClearColor.Die Klasse kannst du auch mit [System.Serializeable] versehen. Dann kann man im Inspector die Bilder in die Felder rein schieben.
Hier musst du jetzt nochmal wie oben geschrieben in Arrays packen.

Jetzt kann man loopen und SetColor machen oder ClearColor machen. Ist im Prinzip wie oben nur mit mehr Klassen und vllt übersichtlicher.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi und Danke für eure Antworten! :)

Ist auf public da dieses Script die Architektur der GUI ist.  Aber da ich nur die Syntax eines Tutorials abschreibe, weiss ich nicht wie es auch anders möglich ist.
Außerdem lasse ich alles zunächst mal auf public. In meinen Anfängen hatte ich mal eine ganze Woche damit verbracht einem anderen Skript ein private bool zu setzen ^^.
Daher würde mir auch kein [System.Serializeable] weiter helfen (oder?). Oder hätte es auch einen Nutzen wenn ich meine Variablen auf public hätte + [System.Seri....] Weiss nicht ob es nur dafür da eine private Variable im Inspector sichtbar zu machen.

Jetzt stehe ich da, und bin ratlos was ich denn jetzt als Parameter angeben muss. Muss ich trotz Schleife und Liste alle Variablen ansprechen?
 

@Mazy

Ich werds irgendwann mal bereuen es nicht so strukturiert gemacht zu haben! :)
Wie geht man so eine Struktur an? Mit oder ohne abstrakte Klassen?
 

 

 

public List<Image> profilImages = new List<Image>();


public void SetProfilPics()
	{
		
		foreach (var picture in profilImages)
		{
			picture.color = Color.white;
		}
	}
 
  public void ClearProfilImages()
	{
		foreach (Image picture in profilImages)
		{
			picture.color = Color.clear;
		}
	}
  
  void Start()
	{
		
		ClearLines();
		ClearPic();
		//ClearGameObjects();
		ClearSiegeImages();
		ClearPlayerPropertiesImages();
		ClearJobs();
		ClearIntJobs();
		ClearButton();
		ClearProfilImages();
		
		
	}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...