მოკლედ მაქვს ბევრი spawn point - როლებსაც while-ში ჩასმული foreach-ით ჩამოვუვლი და თითოეულ პოინტზე 50/50%-ზეა შანსი რომ ან დასპაუნდეს მტერი ან არა, foreach-ის ბოლოში რომ ჩავა თუ დასასპაუნებელი მტრების გეგმა არ შესრულდა - while- კიდევ უშვებს foreach-ზე და ეს მანამ მეორდება სანამ არ შეივსება დასასპაუნებელი მტრების გეგმა - ხოდა აი აქ მიჩნდება პრობლემა - როცა მეორე-მესამე კრუგზე მიდის foreach - უკვე დასპაუნებულ პოინტებზე შანსია რომ კიდევ დაასპაუნოს მტრები.
ერთი ამოხსნის გზა ვნახე რომ სპაუნპოინტებისგან array გავაკეთო და მერე ლოკალური ლისტი გავაკეთო ფუნქციაში რომელიც ამოაკლებს უკვე დასპაუნებული ადგილების ინდექსებს მაგრამ ამაში ის პრობლემაა რომ 200-300 spawnpoint-ის ჩამატება სათითაოდ, ხელით მომიწევს ამ array-ში. რამე სხვა გზა თუ იცით, ძალიან დამეხმარებით.
ეს ახლანდელი კოდი for-ით ვცადე და while-ის საჭიროება მოვიშორე მაგრამ ეს array-ში ხელით ჩამატება ისევ პრობლემაა:
» სპოილერის ნახვისთვის დააწკაპუნეთ აქ «
void GenerateEvents()
{
if (eventCount!=0 || eventCount<0)
{
maxAllowedEvents = eventCount;
}
else
{
maxAllowedEvents = 1;
}
List<Transform> freeSpawnPoints = new List<Transform>(spawns);
for (int i = 0; i < maxAllowedEvents; i++)
{
if (freeSpawnPoints.Count <= 0)
{
return;
}
int index = Random.Range(0, freeSpawnPoints.Count);
Transform pos = freeSpawnPoints[index];
Vector3 spawningPosition = pos.position;
freeSpawnPoints.RemoveAt(index);
GameObject spawnedAnomaly = Instantiate(eventIconPrefab, spawningPosition, Quaternion.identity) as GameObject;
spawnedAnomaly.transform.parent = spawns[index];
Debug.Log("EventCreated");
}
}
This post has been edited by That_Dude_With_Guitar on 9 Mar 2018, 18:17