Hi,
ich habe 4 verschiedene "Zellen". Einfach Würfel mit jeweils 1 Script. Da die Methoden der Scripte aber alle gleich sind, erben diese 4 von einer Zellbasis und implementieren ein Interface.
Zu Beginn werden 100 Zellen erzeugt, zufällig zwischen diesen 4 Zellen ausgewählt und in einer Liste gespeichert. Da jede Zelle durch das Interface die Methoden implementiert, kann ich diese ja bei einer Schleife aufrufen. Aber wie lasse ich dynamisch das Script des GameObjects suchen?
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
public abstract class CommonCell : Monobehaviour
{
// ist aktuell noch leer
}
public Interface ICell
{
void Methode1();
void Methode2();
}
public class Zelle1 : CommonCell, ICell
{
public void Methode1()
{
// Tue dies
}
public void Methode2()
{
// Tue jenes
}
}
public class Zelle2 : CommonCell, ICell
{
public void Methode1()
{
// Tue dies
}
public void Methode2()
{
// Tue jenes
}
}
|
Und die Liste liegt in einem Store. In diesem erfolgt dann auch der Aufruf mit einer Schleife
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class Store
{
private List<GameObject> cells = new List<GameObject>(); // Wird gefüllt
private void ActivateCells()
{
foreach(GameObject c in cells)
{
c.GetComponent<???>().Methode1();
c.GetComponent<???>().Methode2();
}
}
}
|
Die Sauberkeit / Performanz der Schleife mal nicht beachten, es geht mir nur darum, eine Rückmeldung zu bekommen, ob ich meine Idee überhaupt so umsetzen kann und vielleicht sogar einen möglichen Lösungsweg zu bekommen.
Das GameObject "c" muss sein Script finden (Zelle1, Zelle2, Zelle3, Zelle4) und soll dann die Methode im Script aufrufen, sichergestellt durch das Interface.
Leider habe ich Interfaces erst frisch kennen gelernt, es kann also sein, dass meine Idee überhaupt nicht umsetzbar ist, klingt einleuchtend, weil wie sollte "c" an das passende Script gelangen, aber vielleicht kann ich die Liste auch überarbeiten, dass nicht nur die Zelle in der Liste (oder im Tuple / oder im Array / ...) liegt, sondern auch das zugehörige Script.