আপনার র্যাম আপনার সীমা ।
নিম্নলিখিত পরীক্ষাগুলি এই স্পেসগুলি সহ একটি সিস্টেমে করা হয়েছিল:
- ইন্টেল i5-6600
- 16 জিবি র্যাম
- এনভিআইডিএ জিফোরস জিটিএক্স 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++;
}
}
কয়েক মিনিটের পরে, আমার কম্পিউটারের স্মৃতি শেষ হয়ে গেল এবং .ক্য ক্র্যাশ হয়ে গেছে। এই মুহুর্তে এটি ছিল ৮০০০০x৮০০ (million০ মিলিয়ন) টাইল এবং ইউনিটি ডটকম টাস্ক ম্যানেজারের মতে 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;
}
}
ইউনিটি ডটকমের মেমরির পদচিহ্নগুলি খুব সামান্য বেড়েছে, যা খালি টাইলসেট কোষগুলির প্রায় কোনও র্যামের প্রয়োজন নেই বলে ইঙ্গিত দেয়। তবে, টাইলসেট বাড়ার সাথে সাথে এফপিএস হ্রাস পেতে থাকে। এটি 30000x30000 এ 60 Fps, 60000x60000 এ 30 Fps এবং 90000x90000 এ 15 Fps হিট করেছে। টেপ-গেমটি চলাকালীন আমি স্ক্রিপ্টটি সরিয়ে ফেললে এফপিএস কম ছিল। সুতরাং এই মন্দাটি টাইলম্যাপ পরিবর্তন করে নয়। এটি কেবল রেন্ডারিং থেকেই হয়েছিল। সুতরাং আপনি যখন একটি সত্যই বিশাল ওপেন ওয়ার্ল্ড গেম তৈরি করতে চান তখন আপনাকে রানটাইমের সময় তৈরি এবং ধ্বংস করার জন্য একাধিক ছোট টাইলম্যাপ ব্যবহার করতে হতে পারে।
উপসংহার: বিশাল তবে বেশিরভাগ খালি টাইলম্যাপগুলি খুব বেশি র্যাম ব্যবহার করে না, তবে এগুলির বেশিরভাগ ক্যামেরা ভিউপোর্টে না থাকলেও এগুলি একটি রেন্ডারিং বাধা ।
আমি তখন এই স্ক্রিপ্টটি পরীক্ষা করেছিলাম যা প্রদত্ত আকারের সাথে টাইলম্যাপ তৈরি করে:
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 Fps এ।
উপসংহার: কয়েক মিলিয়ন টাইলস সহ মানচিত্রগুলি বোধগম্য, কমপক্ষে গেমিং পিসিতে ।