সত্তা সিস্টেমগুলির সম্পর্কে আমি যে দুটি মূল সুবিধাটি ক্রমাগত প্রশংসিত শুনতে পাই তা হ'ল 1) জটিল উত্তরাধিকারের স্তরক্রমের সাথে জড়িত না হওয়ার কারণে নতুন ধরণের সত্তার সহজ নির্মাণ এবং 2) ক্যাশে দক্ষতা।
মনে রাখবেন যে (1) কেবলমাত্র ইএস / ইসিএস নয়, উপাদান-ভিত্তিক ডিজাইনের একটি সুবিধা । আপনি বিভিন্ন উপায়ে এমন উপাদানগুলি ব্যবহার করতে পারেন যার "সিস্টেম" অংশ নেই এবং তারা ঠিক কাজ করে (এবং প্রচুর পরিমাণে ইন্ডি এবং এএএ গেম এই জাতীয় আর্কিটেকচার ব্যবহার করে)।
স্ট্যান্ডার্ড ইউনিটি অবজেক্ট মডেল (ব্যবহার GameObject
এবংMonoBehaviour
অবজেক্টস) কোনও ইসিএস নয়, এটি উপাদান-ভিত্তিক নকশা। নতুন Unক্য ইসিএস বৈশিষ্ট্যটি অবশ্যই একটি আসল ইসিএস।
সিস্টেমে একাধিক উপাদান নিয়ে কাজ করতে সক্ষম হওয়া প্রয়োজন, অর্থাত রেন্ডারিং এবং ফিজিক্স সিস্টেম উভয়ই ট্রান্সফর্ম উপাদানটি অ্যাক্সেস করতে হবে।
কিছু ইসিএস তাদের উপাদান ধারকগুলি সত্তা আইডি অনুসারে বাছাই করে, যার অর্থ প্রতিটি গ্রুপের সংশ্লিষ্ট উপাদানগুলি একই ক্রমে থাকবে।
এর অর্থ হ'ল আপনি যদি গ্রাফিক্সের উপাদানগুলির তুলনায় রৈখিকভাবে পুনরাবৃত্তি করেন তবে আপনি এছাড়াও সুসংগত উপর সংশ্লিষ্ট উপাদান রুপান্তর iterating। আপনি হয়ত কিছু রূপান্তর এড়িয়ে যাচ্ছেন (যেহেতু আপনার পদার্থবিজ্ঞানের ট্রিগার ভলিউম থাকতে পারে যা আপনি সরবরাহ করেন নি বা যেমন) তবে আপনি যেহেতু সর্বদা স্মৃতিতে এগিয়ে চলে যাচ্ছেন (এবং বিশেষত বিশাল দূরত্ব নয়, সাধারণত) আপনি এখনও যাচ্ছেন দক্ষতা লাভ আছে।
এটি কীভাবে আপনার স্ট্রাকচার অফ অ্যারে (এসওএ) এইচপিসির প্রস্তাবিত পদ্ধতির সাথে মিল রয়েছে তা মিল। সিপিইউ এবং ক্যাশে একাধিক লিনিয়ার অ্যারে প্রায় একই সাথে মোকাবেলা করতে পারে পাশাপাশি এটি একটি একক লিনিয়ার অ্যারের সাথেও ডিল করতে পারে এবং এলোমেলো মেমরি অ্যাক্সেসের সাথে মোকাবিলা করতে পারে তার থেকে অনেক ভাল।
কিছু ইসিএস বাস্তবায়নে ব্যবহৃত অন্য কৌশল - ইউনিটি ইসিএস সহ - তাদের সংশ্লিষ্ট সত্তার আর্টটাইপের ভিত্তিতে উপাদানগুলি বরাদ্দ করা। অর্থাৎ অবিকল উপাদান (এর সেট দিয়ে সমস্ত সত্ত্বা PhysicsBody
, Transform
) বিভিন্ন উপাদান (যেমন সঙ্গে সংস্থাগুলো থেকে আলাদাভাবে বরাদ্দ করা হবে PhysicsBody
, Transform
, এবং Renderable
)।
এই জাতীয় ডিজাইনের সিস্টেমগুলি প্রথমে তাদের প্রয়োজনীয়তার সাথে মেলে এমন সমস্ত আর্কিটাইপগুলি (যা উপাদানগুলির প্রয়োজনীয় সেট রয়েছে) সন্ধান করে, আর্কিটাইপসের সেই তালিকাটি পুনরাবৃত্তি করে এবং প্রতিটি মিলিত আরকিটাইপের অভ্যন্তরে সঞ্চিত উপাদানগুলিকে পুনরাবৃত্তি করে কাজ করে। এটি একটি আর্কিটাইপের অভ্যন্তরে সম্পূর্ণরূপে রৈখিক এবং সত্য O (1) উপাদান অ্যাক্সেসের অনুমতি দেয় এবং সিস্টেমগুলিকে খুব কম ওভারহেডের সাথে সামঞ্জস্যপূর্ণ সত্তা খুঁজে পেতে দেয় (সম্ভাব্য কয়েক হাজার প্রতিষ্ঠানের সন্ধানের চেয়ে আরকিটাইপসের একটি ছোট তালিকা অনুসন্ধান করে)।
আপনার কাছে উপাদানগুলির জন্য অন্য উপাদানগুলিতে স্টোর পয়েন্টার, বা উপাদানগুলিতে পয়েন্টার সঞ্চয়কারী সত্তাগুলির কাছে পয়েন্টার থাকতে পারে।
একই উপাদানটিতে অন্যান্য উপাদানগুলিকে রেফারেন্সকারী উপাদানগুলির জন্য কোনও কিছু সঞ্চয় করার দরকার নেই। অন্যান্য সত্তায় উপাদানগুলি রেফারেন্স করতে কেবল সত্তা আইডি সংরক্ষণ করুন।
যদি কোনও উপাদানকে একক সত্তার জন্য একাধিকবার অস্তিত্বের অনুমতি দেওয়া হয় এবং আপনাকে কোনও নির্দিষ্ট উদাহরণ উল্লেখ করতে হয় তবে সেই সত্তার জন্য অন্য সত্তার আইডি এবং একটি উপাদান সূচক সংরক্ষণ করুন। অনেক ইসিএস বাস্তবায়ন এই কেসটিকে অনুমতি দেয় না, বিশেষত কারণ এটি এই ক্রিয়াকলাপগুলি কম দক্ষ করে তোলে।
আপনি নিশ্চিত করতে পারেন যে প্রতিটি উপাদান অ্যারে 'এন' বড়, যেখানে 'এন' সিস্টেমে জীবিত সত্তার সংখ্যা
হ্যান্ডলগুলি ব্যবহার করুন (যেমন সূচকগুলি + প্রজন্মের চিহ্নিতকারী) এবং পয়েন্টারগুলি নয় এবং তারপরে আপনি বস্তুর উল্লেখগুলি ভঙ্গ করার ভয় ছাড়াই অ্যারেগুলির আকার পরিবর্তন করতে পারেন।
আপনি std::deque
যদি কোনও কারণে পয়েন্টারগুলিকে অনুমতি দিতে চান বা যদি আপনার সমস্যাগুলি পরিমাপ করে থাকেন তবে আপনি অনেকগুলি সাধারণ প্রয়োগের সাথে একইভাবে "ছিঁড়ে অ্যারে" পদ্ধতির (অ্যারেগুলির একটি অ্যারে )ও ব্যবহার করতে পারেন though অ্যারে পুনরায় আকার দেওয়া কর্মক্ষমতা।
দ্বিতীয়ত, এটি সমস্তই ধরে নিচ্ছে যে সত্ত্বাগুলি প্রতিটি ফ্রেম / টিকের তালিকায় লাইনারি প্রক্রিয়াজাত হয় তবে বাস্তবে এটি প্রায়শই ঘটে না
এটি সত্তার উপর নির্ভর করে। হ্যাঁ, অনেকগুলি ব্যবহারের ক্ষেত্রে এটি সত্য নয়। প্রকৃতপক্ষে, এই কারণেই আমি উপাদান-ভিত্তিক নকশা (ভাল) এবং সত্তা-সিস্টেমের (সিবিডির একটি নির্দিষ্ট ফর্ম ) মধ্যে পার্থক্যকে দৃ strongly়তার সাথে চাপ দিয়েছি ।
আপনার কিছু উপাদান অবশ্যই রৈখিকভাবে প্রক্রিয়া করা সহজ হবে। এমনকি সাধারণত "ট্রি ভারী" ব্যবহারের ক্ষেত্রে আমরা অবশ্যই দৃ tight়ভাবে প্যাকযুক্ত অ্যারে ব্যবহার করে পারফরম্যান্স বৃদ্ধি পেয়েছি (বেশিরভাগ ক্ষেত্রে কয়েকশ 'এন এর সাথে জড়িত ক্ষেত্রে, সাধারণত খেলায় এআই এজেন্টদের মতো))
কিছু বিকাশকারী এটিও দেখতে পেয়েছেন যে ডেটা-ভিত্তিক লিনিয়ারলি-বরাদ্দ করা ডেটা স্ট্রাকচার ব্যবহারের কার্যকারিতা সুবিধাগুলি "স্মার্ট" ট্রি-ভিত্তিক স্ট্রাকচারগুলি ব্যবহারের কার্যকারিতা সুবিধার চেয়ে বেশি। এটি অবশ্যই গেম এবং নির্দিষ্ট ব্যবহারের ক্ষেত্রে নির্ভর করে।
বলুন যে আপনি কোনও সেক্টর / পোর্টাল রেন্ডারার বা অষ্ট্রি ব্যবহার করেন ক্লোসিং ক্লুলিং সম্পাদন করতে। আপনি সেক্টর / নোডের মধ্যে সত্তা স্বচ্ছলতার সাথে সঞ্চয় করতে সক্ষম হতে পারেন তবে আপনি এটি পছন্দ করেন বা না চান তার চারপাশে ঝাঁপিয়ে পড়তে যাচ্ছেন।
আপনি এখনও অবাক হবেন যে অ্যারে এখনও কতটা সহায়তা করে। আপনি "কোথাও" তুলনায় মেমরির একটি অনেক ছোট অঞ্চলে ঝাঁপিয়ে পড়ছেন এবং সমস্ত জাম্পিংয়ের সাথেও আপনি ক্যাশে থাকা কোনও কিছুতে শেষ হওয়ার সম্ভাবনা বেশি। নির্দিষ্ট আকারের বা তার চেয়ে কম গাছের গাছের সাহায্যে আপনি এমনকি পুরো জিনিসটিকে ক্যাশে যেতে পারেন এবং সেই গাছে কখনও ক্যাশে মিস করতে পারবেন না।
এখানে এমন গাছের কাঠামো রয়েছে যা শক্তভাবে প্যাকড অ্যারেগুলিতে বসবাসের জন্য নির্মিত হয়েছিল। উদাহরণস্বরূপ, আপনার অষ্টমীর সাহায্যে, আপনি একটি স্তূপের মতো কাঠামো ব্যবহার করতে পারেন (বাচ্চাদের আগে বাবা-মা, একে অপরের পাশে ভাই-বোন) এবং নিশ্চিত করে নিন যে আপনি যখন গাছটি "ড্রিল" করছেন তখনও আপনি সর্বদা অ্যারেতে এগিয়ে যাচ্ছেন যা সহায়তা করে সিপিইউ মেমরির অ্যাক্সেস / ক্যাশে লুকআপকে অনুকূলিত করে।
যা একটি গুরুত্বপূর্ণ পয়েন্ট। একটি x86 সিপিইউ একটি জটিল জন্তু। সিপিইউ কার্যকরভাবে আপনার মেশিন কোডে একটি মাইক্রোকোড অপটিমাইজার চালাচ্ছে, এটিকে ছোট মাইক্রোকোডে ভাঙ্গা এবং পুনরায় নির্দেশনা নির্দেশাবলী, মেমরি অ্যাক্সেস প্যাটার্নগুলি পূর্বাভাস দেওয়া ইত্যাদি Data সিপিইউ বা ক্যাশে কীভাবে কাজ করে।
তারপরে আপনার কাছে অন্যান্য সিস্টেম রয়েছে, যা অন্য কোনও ক্রমে সঞ্চিত সংস্থাগুলি পছন্দ করতে পারে।
আপনি এগুলি একাধিকবার সঞ্চয় করতে পারেন। একবার আপনি আপনার অ্যারেগুলি সর্বাধিক ন্যূনতম বিবরণে সরিয়ে ফেললে, আপনি সম্ভবত এই পদ্ধতির সাহায্যে মেমরি সংরক্ষণ করতে পারেন (যেহেতু আপনি আপনার 64৪-বিট পয়েন্টার সরিয়েছেন এবং ছোট সূচকগুলি ব্যবহার করতে পারেন)।
আপনি পৃথক অ্যারে রাখার পরিবর্তে আপনার সত্তা অ্যারে হস্তান্তর করতে পারেন তবে আপনি এখনও স্মৃতি নষ্ট করছেন
এটি ভাল ক্যাশে ব্যবহারের বিরোধী। যদি আপনি যা কিছু যত্নবান হন তা যদি রূপান্তর এবং গ্রাফিক্স ডেটা হয় তবে কেন যন্ত্রটি পদার্থবিজ্ঞান এবং এআই এবং ইনপুট এবং ডিবাগ ইত্যাদির জন্য অন্যান্য সমস্ত ডেটা টানতে সময় ব্যয় করবে?
এটি মূলত ইসিএস বনাম মনোলিথিক গেম অবজেক্টের পক্ষে করা পয়েন্ট (যদিও অন্য উপাদান-ভিত্তিক আর্কিটেকচারের সাথে তুলনা করার সময় সত্যিকারের জন্য প্রযোজ্য নয়)।
এটির মূল্যের জন্য, বেশিরভাগ "উত্পাদনের-গ্রেড" ইসিএস বাস্তবায়ন যার বিষয়ে আমি সচেতন আন্তঃবাহিত স্টোরেজটি ব্যবহার করি। আমি পূর্বে উল্লিখিত জনপ্রিয় আরকিটাইপ পদ্ধতির (উদাহরণ হিসাবে ইউনিটি ইসিএসে ব্যবহৃত) একটি আর্কিটাইপের সাথে যুক্ত উপাদানগুলির জন্য আন্তঃস্তৃত স্টোরেজটি ব্যবহার করার জন্য খুব স্পষ্টভাবে নির্মিত build
এআই অর্থহীন যদি এটি কোনও সত্তার রেন্ডারিংয়ের জন্য ব্যবহৃত ট্রান্সফর্ম বা অ্যানিমেশন অবস্থাকে প্রভাবিত করতে না পারে।
কেবল এআই দক্ষতার সাথে রূপান্তরিত ডেটা লাইনারিভাবে অ্যাক্সেস করতে পারে না তার অর্থ এই নয় যে অন্য কোনও সিস্টেম সেই ডেটা বিন্যাস অপ্টিমাইজেশন কার্যকরভাবে ব্যবহার করতে পারে না। গেম লজিক সিস্টেমগুলি অ্যাডহক ওয়ে গেম লজিক সিস্টেমগুলি সাধারণত জিনিসগুলি করে এমন কাজগুলি করা বন্ধ না করে ডেটা রূপান্তর করার জন্য আপনি একটি প্যাকযুক্ত অ্যারে ব্যবহার করতে পারেন।
আপনি কোড ক্যাশে ভুলে যাচ্ছেন । আপনি যখন ইসিএসের সিস্টেমের পদ্ধতির ব্যবহার করেন (আরও কিছু নিষ্পাপ উপাদান আর্কিটেকচারের বিপরীতে) আপনি গ্যারান্টি দিচ্ছেন যে আপনি কোডের একই ছোট লুপটি চালাচ্ছেন এবং ভার্চুয়াল ফাংশন টেবিলগুলির মাধ্যমে এলোমেলোভাবে একটি সংক্রমণের জন্য পিছনে পিছনে লাফিয়ে যাচ্ছেন নাUpdate
সর্বদা ছড়িয়ে থাকা ফাংশনগুলির আপনার বাইনারি সুতরাং এআই ক্ষেত্রে, আপনি সত্যিই আপনার সমস্ত বিভিন্ন এআই উপাদানগুলি রাখতে চান (কারণ অবশ্যই আপনার একাধিক রয়েছে যাতে আপনি আচরণ রচনা করতে পারেন!) সর্বোত্তম কোড ক্যাশে ব্যবহারের জন্য প্রতিটি তালিককে আলাদাভাবে প্রক্রিয়া করতে পারেন।
বিলম্বিত ইভেন্টের সারির সাথে (যেখানে কোনও সিস্টেম ইভেন্টের একটি তালিকা উত্পন্ন করে তবে সিস্টেমটি সমস্ত সত্তা প্রক্রিয়াজাতকরণ শেষ না হওয়া পর্যন্ত এগুলি প্রেরণ করে না) আপনি ইভেন্টগুলি রাখার সময় আপনার কোড ক্যাশে ভালভাবে ব্যবহার করা হয়েছে তা নিশ্চিত করতে পারেন।
এমন একটি পদ্ধতির ব্যবহার করে যেখানে প্রতিটি সিস্টেম জানে যে কোন ফ্রেমের জন্য কী ইভেন্টের সারি পড়তে হবে, আপনি এমনকি ইভেন্টগুলি পড়া দ্রুত করতে পারেন । বা বাইরে ছাড়াও কমপক্ষে দ্রুত।
মনে রাখবেন, পারফরম্যান্স পরম নয়। ভাল ডেটা-ওরিয়েন্টেড ডিজাইনের পারফরম্যান্স সুবিধাগুলি দেখা শুরু করতে আপনাকে প্রতি শেষ একক ক্যাশে মিসকে সরাতে হবে না।
ইসিএস আর্কিটেকচার এবং ডেটা-ওরিয়েন্টেড ডিজাইনের ধরণগুলির সাথে অনেক গেম সিস্টেম আরও ভাল কাজ করার বিষয়ে সক্রিয় গবেষণা রয়েছে। একইভাবে আমরা সাম্প্রতিক বছরগুলিতে সিমডের সাথে কিছু আশ্চর্যজনক জিনিস দেখেছি (যেমন জেএসএন পার্সারস), আমরা ইসিএস আর্কিটেকচারের সাথে আরও বেশি করে এমন জিনিস দেখছি যা ক্লাসিকাল গেম আর্কিটেকচারের কাছে স্বজ্ঞাত মনে হয় না তবে বেশ কয়েকটি সংখ্যক অফার দেয় সুবিধাগুলি (গতি, বহু-থ্রেডিং, পরীক্ষাযোগ্যতা ইত্যাদি)।
অথবা সম্ভবত একটি হাইব্রিড পদ্ধতির রয়েছে যা প্রত্যেকে ব্যবহার করছে তবে কেউই এর বিষয়ে কথা বলছে না
আমি অতীতে এই বিষয়টির পক্ষে পরামর্শ দিয়েছি, বিশেষত লোকেরা যারা ইসিএস আর্কিটেকচার সম্পর্কে সন্দিহান তাদের পক্ষে: পারফরম্যান্স সমালোচিত যেখানে উপাদানগুলির জন্য ভাল ডেটা-ওরিয়েন্টেড পন্থাগুলি ব্যবহার করুন। সরল আর্কিটেকচার ব্যবহার করুন যেখানে সরলতা উন্নয়নের সময়কে উন্নত করে। ইসিএস প্রস্তাবের মতো প্রতিটি একক উপাদানকে সংযোগের কঠোর ওভার-ডেফিনিশনে জুতো-শিং দেবেন না। আপনার উপাদান আর্কিটেকচারটি এমনভাবে বিকাশ করুন যাতে আপনি সহজেই ইসিএস-জাতীয় পন্থাগুলি ব্যবহার করতে পারেন যেখানে তারা বোধগম্য হয় এবং সরল উপাদান কাঠামো ব্যবহার করতে পারে যেখানে ইসিএস-মত পদ্ধতির কোনও অর্থ হয় না (বা গাছের কাঠামোর চেয়ে কম বোঝায় না, ইত্যাদি) ।
আমি ব্যক্তিগতভাবে নিজেই ইসিএসের সত্যিকারের শক্তিতে রূপান্তরিত হয়েছি। যদিও আমার পক্ষে, সিদ্ধান্ত নেওয়ার কারণটি ইসিএস সম্পর্কে খুব কমই উল্লেখ করা হয়েছিল: এটি অতীতে জড়িতভাবে যুক্ত যৌক্তিক-যুক্ত যৌক্তিক-ভিত্তিক নকশাগুলির তুলনায় গেম সিস্টেম এবং লজিকের জন্য প্রায় নগণ্য writing যেহেতু ইসিএস আর্কিটেকচারগুলি সিস্টেমগুলিতে সমস্ত যুক্তি যুক্ত করে, যা কেবলমাত্র উপাদানগুলি গ্রহণ করে এবং উপাদানগুলির আপডেটগুলি তৈরি করে, সিস্টেম আচরণের পরীক্ষা করার জন্য উপাদানগুলির একটি "মক" সেট তৈরি করা বেশ সহজ; কারণ বেশিরভাগ গেম লজিকগুলি কেবলমাত্র সিস্টেমের মধ্যেই বাস করা উচিত, এর কার্যকর অর্থ হ'ল আপনার সমস্ত সিস্টেম পরীক্ষা করা আপনার গেম যুক্তিকে মোটামুটি উচ্চ কোড কভারেজ সরবরাহ করবে। সিস্টেমগুলি আপনার চেয়ে অনেক কম জটিলতা বা পারফরম্যান্স প্রভাব সহ পরীক্ষার জন্য মক নির্ভরতা (যেমন জিপিইউ ইন্টারফেস) ব্যবহার করতে পারে '
একদিকে যেমন আপনি লক্ষ করতে পারেন যে অনেক লোক ইসিএস সম্পর্কে সত্যই এটি কী তা না বুঝেই কথা বলে। আমি ক্লাসিক ityক্যটিকে হতাশাজনক ফ্রিকোয়েন্সি সহ ইসিএস হিসাবে উল্লেখ করা দেখছি, চিত্রিত করে যে অনেক গেম ডেভেলপাররা "ইসিএস" এর সাথে "উপাদানগুলি" সমান করে এবং "সত্তা সিস্টেম" অংশটিকে সম্পূর্ণ উপেক্ষা করে। আপনি ইন্টারনেটে ইসিএসে প্রচুর ভালবাসার স্রোত দেখতে পেয়েছেন যখন লোকেরা একটি বিশাল অংশ সত্যিকারের ইসিএস নয়, কেবল উপাদান-ভিত্তিক ডিজাইনের পরামর্শ দিচ্ছে। এই সময়ে এটি তর্ক করা প্রায় অর্থহীন; ইসিএস এর মূল অর্থটি জেনেরিক পদে দূষিত হয়েছে এবং আপনি এটিও গ্রহণ করতে পারেন যে "ইসিএস" "ডেটা-ভিত্তিক ইসিএস" হিসাবে একই জিনিসটি বোঝায় না। : /