Du bist nicht angemeldet.

Werbeanzeige

1

18.05.2020, 17:44

Unity C# Script lässt Unity3D abstürzen?

Hallo liebe Leute,

ich bin relativ neu was das Arbeiten mit Unity2D angeht, aber nicht ganz neu mit C#.

Meine Frage ist nun, ich habe dieses Skript, was zur Laufzeit zu einem bestimmten Prefab, kopien davon erstellt und diese Kopien sollen in einem
Grid/Tilemap reinplatziert werden, und ich habe den Code auch vorher getestet, und der Code erkennt auch die Tiles innerhalb der Tilemap, aber obwohl ich eine feste Border berechnet habe, bis wohin die Loop laufen soll, hängt Unity3D sich auf, leider und ich verstehe einfach nicht genau wieso und wäre daher sehr dankbar wenn ich ein bisschen Hilfe bekäme^^.

hier der Code:

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
37
38
//This scriptt is attached to the tilemap "Grounds"
public class SpriteToPrefab : MonoBehaviour
{
    private Tilemap chocolateGround;
    
    public GameObject Prefab;

    private Vector3 getCenterOfCell()
    {
        Tilemap map = GetComponent<Tilemap>();
        Vector3Int cellPosition = map.LocalToCell(transform.localPosition);
        transform.localPosition = map.GetCellCenterLocal(cellPosition);
        return transform.localPosition;
    }

    // Start is called before the first frame update
    void Start()
    {       
        chocolateGround = GetComponent<Tilemap>();

        chocolateGround.origin = new Vector3Int(-7, 1, 0);
        chocolateGround.size = new Vector3Int(15, 10, 0);
        
        var bounds = chocolateGround.origin + chocolateGround.size;
       
        //This code only works when the brush is set on "Default Brush"!
        for (int y = chocolateGround.origin.y;        y < bounds.y;    y--)
        {
            for (int x = chocolateGround.origin.x;    x < bounds.x;    x++)
            {                
                var centerOfCell = getCenterOfCell();

                //create a prefab in memory!
                Instantiate(Prefab, centerOfCell, Quaternion.identity); 
            }
        }
    }
}

2

18.05.2020, 18:58

Natürlich, wenn ich es nach 1 Tag nicht peilen hier schreibe, verstehe ich die Lösung selber 1h später.. Aber dennoch, für alle in Zukunft die es sich ankucken werden, danke für die potenzielle Hilfe :D

David Scherfgen

Administrator

Beiträge: 10 248

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

18.05.2020, 19:38

Und was ist nun die Lösung?

4

19.05.2020, 13:51

Hallo David, ich depp habe iwie nicht gesehen, dass "y" sowohl eine Laufvariable als auch die TileY-Koordinate darstellt innerhalb des unity grids. Und da ich die ganze Zeit zwar aus Sicht der Tilemap richtig, "Y" dekrementiere, erzeuge ich aber aus logik sicht eine endlosschleife, da "Y" immer nur kleiner wird und die Überprüfung Y < bounds.Y IMMER wahr ist, und ich habe das irgendwie nicht gepeilt for some reason xD, habe also eine extra Lauf/Loop variable genommen, die "Y" in der For-Anweisungg ersetzt, und am ende der outer Loop dekrementiere ich "Y" selber.

Werbeanzeige