Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

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 382

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