উড়ে যাওয়ার সময় নতুন অবজেক্টটি ইনস্ট্যান্ট করার পরিবর্তে কেন আমি সর্বদা অবজেক্ট পুল তৈরি এবং ব্যবহার বিবেচনা করব?


25

আমি এই প্যাটার্নটি সম্পর্কে বেশ কয়েকবার পড়েছি (সেরা-অনুশীলনের দিক থেকে):

মেমরি বরাদ্দ : ফ্লাইতে নতুন অবজেক্টটি ইনস্ট্যান্ট করার পরিবর্তে সর্বদা অবজেক্ট পুল তৈরি এবং ব্যবহারের কথা বিবেচনা করুন। এটি কম মেমরি খণ্ডিত করতে এবং আবর্জনা সংগ্রহকারীকে কম কাজ করতে সহায়তা করবে।

তবে, আসলে এটির অর্থ কী তা আমি জানি না। আমি কীভাবে এটি বাস্তবায়ন করতে পারি?

উদাহরণস্বরূপ, আমি কি ইউনিটির পদ্ধতি GameObjectব্যবহার করে ইনস্ট্যান্ট করতে পারি Instantiate?

Instantiate(prefab, new Vector3(2.0F, 0, 0), Quaternion.identity);

এই ব্যবহার নিরুৎসাহিত হয়? এর অর্থ আর কী হতে পারে?


গুগলে প্রথম লিঙ্ক;) একতা3
d.com/fr/learn/tutorials/topics/scriptting/object-

ধন্যবাদ হেলিয়াম আমি প্রদত্ত ভিডিওটি দেখতে পাইনি (খুব বড়) তবে পাঠ্যটি সত্যই আমাকে বুঝতে সাহায্য করে "তাত্ক্ষণিকভাবে ধ্বংস করার কাজটি অদক্ষ এবং আপনার প্রকল্পগুলি ধীর করতে পারে"
মুহাম্মদ ফয়জান খান

1
মনে রাখবেন যে এই পরামর্শটি সাধারণ থাকলেও এটি প্রতিটি গেমের জন্য চূড়ান্ত প্রয়োজনীয়তা নয়। বিশেষত যদি আপনি একটি ছোট / শর্ট ডেস্কটপ গেম, জ্যাম জমা, বা প্রোটোটাইপ তৈরি করে থাকেন তবে পুলিং বাস্তবায়নের জন্য আপনার উপায়ের বাইরে চলে যাওয়ার দরকার নেই। আমার ভিজিয়ে রাখা পরীক্ষায় ityক্য আমাদের প্রচুর ক্রেডিট দেওয়ার চেয়ে আরও বড় স্পোং এবং ধ্বংসকে ধারণ করে। ;) তবে আপনি যদি এমন একটি দীর্ঘ গেম তৈরি করছেন যেখানে আপনি আবর্জনা স্তুপ করতে চান না এবং পরে যখন সংগ্রহ করা হয় তখন কোনও স্টাটার তৈরি করতে না পারেন, বা যদি আপনি এমন কোনও মোবাইল প্ল্যাটফর্মকে লক্ষ্য করছেন যেখানে কোনও পারফরম্যান্সের প্রভাব আরও তীব্রভাবে অনুভূত হয়।
ডিএমগ্রিগরি

ধন্যবাদ @ ডিএমজি গ্রেগরি আপনি ঠিক বলেছেন। আপনার ইনপুটটি সর্বদা মূল্যবান small ছোট গেমগুলিতে অবজেক্ট পুলিংয়ের বিষয়ে আমাদের চিন্তা করা উচিত নয় কারণ কোডিংয়ে অতিরিক্ত কাজ করা দরকার।
মুহাম্মদ ফয়জান খান

1
এটি একটি খুব সাধারণ প্যাটার্ন, তবে এটি নিয়মটি দিয়ে মেজাজকে নিশ্চিত করুন: "প্রথমে প্রোফাইল, তারপরে অনুকূলিতকরণ"। বিষয়গুলির পক্ষে উপযুক্ত নয় এমন বিষয়গুলিকে অপ্টিমাইজ করা সহজ।
কর্ট অ্যামোন - মোনিকা

উত্তর:


41

আপনি যদি একই প্রিফাবের অনেকগুলি উদাহরণ ইনস্ট্যান্ট করার পরিকল্পনা করে থাকেন তবে অবশ্যই অবজেক্ট পুলিং ব্যবহার করার কথা ভাবা উচিত। কলিং ইউনিটির ইনস্ট্যান্টিয়াট ফাংশন আপনার পক্ষে করানো সর্বাধিক কর পদ্ধতি is

অবজেক্ট পুলিং যখন আপনি প্রিফাবগুলি ব্যবহারের আগে ইনস্ট্যান্ট করেন ate এগুলি তাত্ক্ষণিকভাবে অবিলম্বে নিষ্ক্রিয় করা হয় এবং কেবল যখন তাদের প্রয়োজন হয় তখন তা পুনরায় সক্রিয় করা হয়। যদিও এটি মেমরির ব্যবহার বাড়ায়, এটি গেমপ্লে চলাকালীন সিপিইউ ওভারহেড ইনস্ট্যানটিটিংয়ের এড়িয়ে চলে।

উদাহরণস্বরূপ, আমি বর্তমানে একটি বুলেট হেল গেম নিয়ে কাজ করছি যার জন্য রানটাইমের সময় কয়েকশো গুলি লাগানো দরকার। আমি প্রথমে অবজেক্ট পুলিং ছাড়াই গেমটি তৈরি করার চেষ্টা করেছি তবে এটি একটি বিপর্যয় (2 fps এর চেয়ে কম) হয়ে গেছে। গেমটি শুরুর আগে আমি 500 টি বুলেট পুল করি এবং গেমটি অবাক করে দিয়ে দ্রুত (200 fps) চালায়।

এমন পরিস্থিতি রয়েছে যেখানে অবজেক্ট পুলিং ব্যবহার করা যায় না। উদাহরণস্বরূপ, আপনার যদি এমন একটি গেম থাকে যেখানে প্লেয়ার ইনপুট প্রিফাবটি কী তৈরি করে তা নির্ধারণ করে, তবে আপনার কাছে সাধারণ ইনস্ট্যানিয়েট কল ব্যবহার করা ছাড়া আর কোনও উপায় নেই। অবজেক্ট পুলিং কেবল তখনই সম্ভব যখন আপনি সময়ের আগে কী কী কী জিনিসগুলির প্রয়োজন হবে তা জানেন।

সেবাস্তিয়ান লেগের ইউটিউব টিউটোরিয়ালটি অবজেক্ট পুলিং সম্পর্কে শেখার জন্য একটি দুর্দান্ত উত্স: https://youtu.be/LhqP3EghQ-Q


"তাত্ক্ষণিকভাবে এবং ধ্বংস করার কাজটি অদক্ষ এবং আপনার প্রকল্পগুলি ধীর করতে পারে"। এই কারন? সুতরাং এর অর্থ হ'ল আমাদের আরও কিছুটা কোড করতে হবে (যেমন ডিএকটিভকে সক্রিয় করতে, বা বুলেটের অবস্থান আবার সেট করা যাতে আমরা আবার গুলি
মুহাম্মদ ফয়জান খান

12
এটি বরাদ্দ এবং আবর্জনা সংগ্রহ বারবার তাত্পর্য এবং ধ্বংস ব্যয় প্রধান অবদানকারী হিসাবে উল্লেখযোগ্য হতে পারে। পর্যাপ্ত আবর্জনা তৈরি করুন এবং শেষ পর্যন্ত পুরো গেমটি আবর্জনা সংগ্রহকারীকে এটি সরিয়ে দেওয়ার জন্য অপেক্ষা করতে হবে। ;)
ডিএমগ্রিগরি

3
@ কর্সিকা এটি একটি 80 এর যুগের অনুকূলতা হবে optim ইউনিটি কেবল প্রিফাবগুলিকে প্রশ্নযুক্ত নিষ্ক্রিয় করতে পারে, যার ফলে এটির সিস্টেমগুলি এড়িয়ে চলে।
কংগসবঙ্গাস

2
"উদাহরণস্বরূপ, আপনার যদি এমন একটি গেম থাকে যেখানে প্লেয়ার ইনপুট হ'ল প্রিফ্যাবটি কী তৈরি করে তা নির্ধারণ করে, তবে আপনার কাছে সাধারণ ইনস্ট্যানিয়েট কল ব্যবহার করা ছাড়া উপায় নেই have" - আসলে তা না. আপনার স্টার্টআপে (বা দৃশ্যের বোঝা) পছন্দসই আকারে বরাদ্দ থাকা বিভিন্ন প্রিফাবগুলির জন্য সহজেই একাধিক অবজেক্ট পুল থাকতে পারে। বা, যদি কেউ এটি তৈরি করতে চায়, তবে একাধিক প্রিফাব প্রকারের স্টোর এমন একটি অবজেক্ট পুলও কাজ করতে পারে।
ইথান বিয়ারলাইন

1
@ ডিএমজি গ্রেগরী একটি সাধারণ জিসি পরিবেশে, ডি-বরাদ্দ বেশিরভাগ ব্যয় হয়; সাধারণ নন-জিসি পরিবেশে বরাদ্দ সর্বাধিক ব্যয়। অবজেক্ট পুলিং উভয়ের পক্ষে দুর্দান্ত কাজ করে, তারা বেশিরভাগ অংশের জন্য একই মুদ্রার কেবল দুটি দিক। চরম ক্ষেত্রে, পুরানো গেমসটি গ-গ-এ থেকে সমস্ত বরাদ্দ "বরাদ্দ" দিয়ে লেখা হত - গেমটি চলাকালীন খুব কম বা কোনও স্মৃতি ডি / বরাদ্দ ছিল না। আপনি সত্যিই এমন কিছু ব্যবহার করেননি যা কোনওভাবে "পুল করা" ছিল না। যেহেতু ইউনিটি প্রচুর রিয়েল-টাইম "মেটাডেটা" ব্যবহার করে, পুলিং বেশ খানিকটা সহায়তা করতে পারে - যদিও এটি প্রয়োগ করাও জটিলতর হতে পারে।
লুয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.