সমষ্টি হিসাবে সত্তা তৈরি করা


10

আমি সম্প্রতি সম্পর্কে জিজ্ঞাসা কিভাবে তাদের আচরণ থেকে পৃথক সত্ত্বা এবং প্রধান উত্তর এই প্রবন্ধে লিঙ্ক: http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

এখানে লিখিত চূড়ান্ত ধারণাটি হ'ল: নিখরচায়তা হিসাবে ওবজেট করুন।

আমি ভাবছি যে আমি কীভাবে সি # ব্যবহার করে খাঁটি সমষ্টি হিসাবে গেম সত্তা তৈরি করতে যাব। এটি কীভাবে কার্যকর হতে পারে সে ধারণাটি আমি এখনও উপলব্ধি করতে পারি নি। (সম্ভবত সত্তাটি কোনও নির্দিষ্ট ইন্টারফেস বা বেস ধরণের প্রয়োগকারী বস্তুর একটি অ্যারে?)

আমার বর্তমান চিন্তাভাবনাটি এখনও প্রতিটি সত্তা টাইপের জন্য একটি কংক্রিট শ্রেণি জড়িত যা এরপরে প্রাসঙ্গিক ইন্টারফেসগুলি প্রয়োগ করে (অপসারণযোগ্য, আইকোলেক্টেবল, ইস্পেকিয়েবল ইত্যাদি)।

সেই সত্তার জন্য কোনও কংক্রিটের ধরণ না রেখে আমি কীভাবে খাঁটিভাবে একক হিসাবে সত্তা তৈরির বিষয়ে যেতে পারি?


আপনি যদি এখনও আগ্রহী হন তবে আমি আপনাকে সি # তে আমার ছোট সত্তা সিস্টেমটি পাঠাতে পারি। এটি আশ্চর্যজনক নয় , তবে এটি কার্যকর।
কমিউনিস্ট হাঁস

উত্তর:


6

সেই সংযুক্ত নিবন্ধে পশ্চিমের দ্বারা বর্ণিত "খাঁটি সমষ্টি" পদ্ধতির সম্পূর্ণরূপে একটি "সত্তা" অবজেক্টকে বঞ্চিত করা হয়েছে। স্মৃতিতে চারপাশে ভাসমান উপাদান রয়েছে, তবে এগুলি কেবল অন্তর্নিহিত সম্পর্কগুলির সাথেই বেঁধে দেওয়া হয়েছে all

এটি করার একটি উপায় হ'ল তথাকথিত আউটবোর্ড পদ্ধতির । এই জাতীয় সিস্টেমে, উপাদানগুলি সিস্টেমগুলি দ্বারা পরিচালিত হয় যা সেগুলি পরিচালনা করে বা অন্যথায় নিয়ন্ত্রণ করে (আমি এখানে "ম্যানেজ" শব্দটি ব্যবহার করি, তবে আপনি এটি গ্রহণ করার দরকার নেই এটি বোঝাতে চাইছি না যে আমি আপনাকে * ব্যবস্থাপক শ্রেণীর একগুচ্ছ রাখার পরামর্শ দিচ্ছি) উপাদান প্রকারের)। উদাহরণস্বরূপ, আপনার পদার্থবিজ্ঞান সিস্টেমটি সিমুলেশন বিশ্বে প্রতিটি অনমনীয় শরীরের প্রতিনিধিত্ব করে এমন একগুচ্ছ জিনিস ধরে রাখতে পারে এবং পদার্থবিজ্ঞানের উপাদান হিসাবে এই জিনিসগুলি প্রকাশ করতে পারে। উপাদানগুলি হ'ল প্রশ্নযুক্ত সাবসিস্টেম দ্বারা পরিচালিত প্রকৃত বস্তু হতে পারে, বা প্রয়োজন অনুসারে সেগুলি objects বস্তুর জন্য প্রক্সি হতে পারে।

এই জাতীয় সিস্টেমে "সত্তা" শ্রেণীর যে উপাদানগুলির সমন্বয় রয়েছে সেগুলি সম্পর্কিত রেফারেন্সের সংগ্রহ করার প্রয়োজন হয় না; পরিবর্তে একটি "সত্তা" তৈরি এবং ধ্বংস সম্পর্কিত একটি বিজ্ঞপ্তি উত্থাপিত হয় এবং প্রতিটি উপ-সিস্টেম যা উপাদানগুলি পরিচালনা করে তা তৈরি / ধ্বংস হওয়া সত্তার বিবরণ (যা সাধারণত কিছু ডেটা থেকে লোড করা হয়) দেখে এবং এটি নির্ধারণ করে যে এর জন্য কোনও উপাদান প্রয়োজনীয় কিনা।

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

উপাদানগুলি ভিত্তিক গেম অবজেক্ট সিস্টেমগুলি প্রয়োগ করার জন্য বেশ কয়েকটি ভাল উপায় রয়েছে; আপনি যদি আপনার সিস্টেমের বাইরে প্রয়োজনীয় প্রয়োজনীয়তা সম্পর্কে দৃ idea় ধারণা পেয়ে থাকেন তবে এটি সত্যই সত্যই সহায়তা করে - ইউনিটির মতো জনপ্রিয় কাঠামো উদাহরণগুলির জন্য কী করে তা আপনি দেখতে পারেন। নিজের জন্য কঠোর প্রয়োজনীয়তা নির্ধারণ না করে আপনি সিস্টেমটিকে বাস্তবে না তৈরি করে নিখুঁতভাবে "ডিজাইনিং" করার সমস্যায় পড়তে পারেন, নিখুঁত বাস্তবায়নের জন্য নিরর্থক চেষ্টা করে। যে কোনও কারণে আমি উপাদান উপাদানগুলির সাথে এটি অনেক কিছু দেখেছি।


3

Ityক্যটি যেভাবে কাজ করে তা হ'ল সমস্ত স্ক্রিপ্টগুলি (আপনার ক্ষেত্রে, গেম কোড যা এক ধরণের গেম অবজেক্টের সাথে নির্দিষ্ট) একটি বেস ক্লাস থেকে উদ্ভূত হয় MonoBehaviour, যা নিজেই আপনার ক্ষেত্রে-থেকে-কেস Componentক্লাস থেকে উদ্ভূত হয় । আপনি গেমঅজেক্ট ক্লাসটি কখনও সম্পাদনা করেন না (এবং কোডের কোডে অ্যাক্সেসও পাবেন না)।

গেম অবজেক্টটি সেই সমস্ত Componentগুলি রাখার দায়িত্বে রয়েছে । এটি অবশ্যই তাদের উপর প্রাসঙ্গিক ফাংশনগুলি কল করার দায়িত্বে রয়েছে (যেমন Update)। ইউনিটি কোন ফাংশনগুলি কল করতে হবে তা নির্ধারণ করতে প্রতিবিম্বটি ব্যবহার করে ( এই পৃষ্ঠায় "ওভাররিডেবল ফাংশন" বিভাগটি দেখুন ) তবে আপনি সম্ভবত তাদের ভার্চুয়াল করতে চাইবেন।

সুতরাং আপনি যে mechanক্যে ব্যবহার করেন এমন একটি প্রক্রিয়া টাইপ অনুসারে আপনার বর্তমান গেম অবজেক্টে (বা এর শিশুদের) উপাদান পাচ্ছে। এমন কিছু সহায়ক বৈশিষ্ট্য রয়েছে যা কিছু সাধারণ জিনিস গুটিয়ে রাখে। উদাহরণস্বরূপ, আপনি যদি গেমের অবজেক্টের Transformউপাদান (গেম অবজেক্টের অবস্থান / রোটেশন / স্কেল নিয়ন্ত্রণ করতে) অ্যাক্সেস করতে চান তবে আপনাকে সাধারণত কিছু করার দরকার হয় this.GetComponent<Transform>().positionতবে তারা এটিকে কোনও সহায়ক this.transform.positionকলের মধ্যে আবদ্ধ করে । আর একটি সাধারণ প্যাটার্নটি বর্তমান গেমের অবজেক্টের Rendererউপাদান অ্যাক্সেস করছে । সুতরাং আপনি যদি অন্য স্ক্রিপ্ট থেকে বর্তমান গেমের অবজেক্টের উপাদান পরিবর্তন করার মতো কিছু করতে চান তবে আপনি এর মতো কিছু করতে পারেন this.renderer.material = someOtherMaterialএবং আপনার গেমের অবজেক্ট যথাযথভাবে আপডেট হয়।

ইউনিটিতে এটির কাজ করার একটি উপায় হ'ল তাদের সম্পাদকটি এমনভাবে সেট আপ করা হয়েছে যাতে আপনি আপনার দৃশ্যে গেম অবজেক্ট তৈরি করতে পারেন যা ইতিমধ্যে উপাদানগুলি হুক আপ করে। ইউনিটির ক্ষেত্রে, সমস্ত গেমের অবজেক্টগুলির একটি Transformউপাদান রয়েছে তবে এতে অন্তর্নির্মিত প্রকারগুলিও থাকতে পারে AudioListenerবা Rendererযা আপনার প্রত্যাশা মতো করে। অথবা আপনি নিজের উপাদানগুলি যুক্ত করতে পারেন যা যা করা তা আপনি চান তা করুন। সম্পাদক আপনার উপাদানগুলিতে পাবলিক / সিরিয়ালাইজযোগ্য ক্ষেত্রগুলিও প্রকাশ করে যাতে আপনি একই বেসিক কোডটি ব্যবহার করতে চান তবে চারপাশে কয়েকটি ম্যাজিক সংখ্যা পরিবর্তন করতে আপনাকে আলাদা স্ক্রিপ্ট তৈরি করতে হবে না।

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


0

আমি টি-মেশিন ব্লগ থেকে অ্যাডামের দৃষ্টিভঙ্গির আরও নিকটবর্তী একটি পদ্ধতির পছন্দ করি। উপাদানগুলি কেবল ডেটা হওয়া উচিত এবং সিস্টেমগুলি তাদের সাথে সমস্ত কাজ করে।

সি # তে ইএস প্রয়োগের একটি উদাহরণ দেখুন: https://github.com/t ्यानuxlich/artemis_CSharp

এবং এটি ব্যবহার করে একটি উদাহরণস্বরূপ গেম (এক্সএনএ 4): https://github.com/tilersuxlich/starwarrior_CSharp

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.