В фотошопе не вариант - эти объекты раскидываются рэндомно.
Что я хочу получить - составной спрайт, собранный случайным образом из базовых декораций. Спрайт разбит на 9 областей (3 по вертикали и 3 по горизонтали), в каждой области находится декорация.
Сейчас это реализовано как 9 спрайтов, объединённых пустым родительским объектом, но я понимаю, что это плохое решение.
Пытаюсь собрать текстуру програмно, но она получается как мешанина белых и прозрачных участков.
Вот скрипт, подскажите, пожалуйста, в чём может быть проблема?
Используется csharp
GameObject decor = new GameObject ();//объект, к которому будем цеплять спрайт с итоговой текстурой
decor.AddComponent<SpriteRenderer> ();
Texture2D newTexture = new Texture2D (256, 256);
int decCount = 3;//количество декораций по каждой оси
for (int i = 0; i < decCount; i++)
{
for (int j = 0; j < decCount; j++)
{
int random = Random.Range (0, avalibleObstacles.Count);
string prefabName = avalibleObstacles [random].prefabName;
GameObject newDec = Resources.Load("GlobalMapPrefabs/Decorations/MiniDecorations/" + prefabName) as GameObject;
Texture2D newDecTexture = newDec.GetComponent<SpriteRenderer> ().sprite.texture;
int xShift = Mathf.RoundToInt (newTexture.width / decCount) * i + Random.Range (0, Mathf.RoundToInt (newTexture.width / decCount));
int yShift = Mathf.RoundToInt (newTexture.height / decCount) * j + Random.Range (0, Mathf.RoundToInt (newTexture.height / decCount));
for (int x = 0; x < newDecTexture.width; x++)
{
for (int y = 0; y < newDecTexture.height; y++)
{
newTexture.SetPixel (x + xShift, y + yShift, newDecTexture.GetPixel (x, y));
}
}
}
}
decor.GetComponent<SpriteRenderer> ().sprite = Sprite.Create (newTexture, new Rect (0, 0, 256, 256), new Vector2 (0, 0));