आपकी रैम आपकी सीमा है ।
इन स्पेक्स के साथ सिस्टम पर निम्नलिखित परीक्षण किए गए थे:
- इंटेल i5-6600
- 16 जीबी रैम
- NVIDIA GeForce GTX 1070
- विंडो 7 होम प्रीमियम
यहां एक स्क्रिप्ट है जिसे मैंने चलाया था जो एक टाइल (32x32 पिक्सल) के साथ भरकर एक टिलेमैप बढ़ता है। विधि Grow()
वर्तमान नक्शे में एक और कॉलम और दूसरी पंक्ति जोड़ता है। विधि को प्रत्येक अद्यतन 100 बार कहा जाता है।
public class TileTest : MonoBehaviour {
public Tile tile;
private Tilemap tilemap;
public int currentSize;
void Start () {
tilemap = GetComponent<Tilemap>;
Grow();
}
void Update() {
for (var i = 0; i < 100; i++) {
Grow();
}
Debug.Log(currentSize);
}
private void Grow() {
for (int x = 0; x < currentSize; x++) {
tilemap.SetTile(new Vector3Int(x, currentSize, 0), tile);
}
for (int y = 0; y < currentSize; y++) {
tilemap.SetTile(new Vector3Int(currentSize, y, 0), tile);
}
tilemap.SetTile(new Vector3Int(currentSize, currentSize, 0), tile);
currentSize++;
}
}
कुछ मिनटों के बाद, मेरा कंप्यूटर स्मृति से बाहर चला गया और एकता दुर्घटनाग्रस्त हो गई। उस समय यह 8400x8400 (70 मिलियन) टाइल्स पर था और Unity.exe कार्य प्रबंधक के अनुसार 11 जीबी रैम से थोड़ा अधिक खपत कर रहा था।
ठीक है, लेकिन विरल नक्शे के बारे में क्या ?
यहाँ एक अलग लिपि दी गई है, जिसमें 100 टाइलों की वृद्धि में x और y निर्देशांक में एक एकल टाइल रखी गई है:
public class TileTest : MonoBehaviour {
public Tile tile;
private Tilemap tilemap;
public int currentSize;
void Start () {
tilemap = GetComponent<Tilemap>();
}
void Update() {
tilemap.SetTile(new Vector3Int(currentSize, currentSize, 0), tile);
currentSize+= 100;
}
}
Unity.exe की स्मृति पदचिह्न वास्तव में बहुत कम बढ़ गई है, जो संकेत देता है कि खाली टाइलसेट कोशिकाओं को लगभग कोई रैम की आवश्यकता नहीं है। हालांकि, FPS गिरते रहे जैसे कि टाइलसेट बढ़ रहा था। इसने 60 एफपीएस को 30000x30000 पर, 30 एफपीएस को 60000x60000 और 15 एफपीएस को 90000x90000 पर टक्कर दी। एफपीएस उस कम रहा जब मैंने टेस्ट-गेम चल रहा था, जब मैंने स्क्रिप्ट को हटा दिया। तो यह मंदी टिलमैप को बदलने से नहीं थी। यह बस इसे प्रदान करने से था। इसलिए जब आप एक बहुत बड़ा ओपन वर्ल्ड गेम बनाना चाहते हैं, तो आपको कई छोटे टिलमैप्स का उपयोग करना होगा, जिन्हें आप रनटाइम पर बनाते और नष्ट करते हैं।
निष्कर्ष: विशाल लेकिन ज्यादातर खाली तिलमप में अधिक रैम का उपयोग नहीं किया जाता है, लेकिन वे एक रेंडरिंग टोंटी हैं , यहां तक कि जब यह कैमरा व्यूपोर्ट में नहीं होता है।
मैंने तब इस लिपि के साथ प्रयोग किया जो एक दिए गए आकार के साथ तिलमिलापन पैदा करती है:
public class TileTest : MonoBehaviour {
public Tile tile;
public int xSize;
public int ySize;
void Start () {
Tilemap tilemap = GetComponent<Tilemap>();
for (int x = 0; x < xSize; x++) {
for (int y = 0; y < ySize; y++) {
tilemap.SetTile(new Vector3Int(x, y, 0), tile);
}
}
}
}
मैंने इस स्क्रिप्ट का उपयोग 8192x8192 मानचित्र बनाने के लिए किया था। इसमें कुछ मिनट लगे, लेकिन जब स्क्रिप्ट खत्म हो गई, तो यह स्थिर 95 एफपीएस पर चला गया।
निष्कर्ष: लाखों टाइल वाले नक्शे संभव हैं, कम से कम गेमिंग पीसी पर ।