Така че се чудех дали има начин да "преопаковам" спрайтовете, за да бъдат тема. Получих 1 изображение с всички сценични спрайтове, от които се нуждая, и всъщност се чудех дали мога да ги запазя в това 1 изображение и след това да имам "връзки" или нещо подобно към отделен пакет. Мислех да направя клас "Тема" и след това да създам екземпляри от това, за да съответстват на моите теми, с променливи, твърдо кодирани да съответстват. Но не мога да повярвам, че няма по-добър начин. Надявам се, че съм обяснил това достатъчно добре ^^
Sprite Pack за теми за стаи при генериране на нива. Unity3D
comment
Може да работи, за да заредите изображението (resources.loadall) и да сортирате спрайтовете в различни контейнери (напр. списъци) по префикс в името. Това поне ще избегне твърдото кодиране на всички единични спрайтове.
- person Gunnar B.   schedule 04.12.2014
comment
Или създавате публични масиви/списъци и плъзгате спрайтовете в тях в инспектора.
- person Gunnar B.   schedule 04.12.2014
comment
FTR, ако използвате 2dToolkit, това е автоматично - това е една от причините хората все още да го използват толкова много, въпреки че Unity вече има 2D.
- person Fattie   schedule 24.03.2016
Отговори (1)
В крайна сметка направих това за тези, които се интересуват, и изглежда, че работи. Въпреки че това ме кара да кодирам текстурите в кода, търсех начин да го направя в структурата на редактора/папката.
ThemePack t = new ThemePack(Room.Theme.Medbay);
t.walls.Add(sprites[6]);
t.floors.Add(sprites[32]);
t.floors.Add(sprites[66]);
t.floors.Add(sprites[67]);
t.floors.Add(sprites[68]);
t.floors.Add(sprites[69]);
using UnityEngine;
using System.Collections;
public class SpriteCollection {
private Sprite[] sprites;
private string[] names;
public Sprite this[int i] {
get {
return sprites[i];
}
}
public SpriteCollection(string spritesheet) {
sprites = Resources.LoadAll<Sprite>(spritesheet);
names = new string[sprites.Length];
for(int i = 0; i < names.Length; i++) {
names[i] = sprites[i].name;
}
}
public Sprite GetSprite(string name) {
return sprites[System.Array.IndexOf(names, name)];
}
}
using UnityEngine;
using System.Collections.Generic;
using Level;
public class ThemePack {
public List<Sprite> walls;
public List<Sprite> floors;
public Room.Theme name {get; set;} //Could use a string instead, but this is an enum already existing.
private ThemePack() {
}
public ThemePack(Room.Theme n, List<Sprite> w, List<Sprite> f) {
name = n;
walls = w;
floors = f;
}
public ThemePack (Room.Theme n) : this(n, new List<Sprite>(), new List<Sprite>()) {
}
public Sprite GetRandomWall() {
return walls[Random.Range(0, walls.Count - 1)];
}
public Sprite GetRandomFloor() {
return floors[Random.Range(0, floors.Count - 1)];
}
}
person
Jomik
schedule
04.12.2014