কোনও সত্তা-উপাদান-সিস্টেম ইঞ্জিনে, আমি নির্ভরশীল সত্তাদের গ্রুপগুলির সাথে কীভাবে আচরণ করব?


47

কয়েকটি গেম ডিজাইনের ধরণগুলি পেরিয়ে যাওয়ার পরে, আমি আমার গেম ইঞ্জিনের জন্য সত্ত্বা-উপাদান-সিস্টেম (ইএস সিস্টেম) দিয়ে স্থির হয়েছি। আমি নিবন্ধগুলি (মূলত টি = মেশিন ) পড়েছি এবং কিছু উত্স কোড পর্যালোচনা করেছি এবং আমি মনে করি যে আমি শুরু করার জন্য যথেষ্ট পেয়েছি।

আমি লড়াই করছি কেবল একটি প্রাথমিক ধারণা। একে অপরের উপর নির্ভরশীল সত্তাদের গ্রুপগুলির সাথে আমি কীভাবে আচরণ করব?

আমাকে একটি উদাহরণ ব্যবহার করুন:

ধরুন আমি একটি স্ট্যান্ডার্ড ওভারহেড শ্যুটার করছি (মনে করি জেমস্টাউন ) এবং আমি একাধিক স্বতন্ত্র তবে সংযুক্ত অংশগুলি সহ "বস সত্তা" তৈরি করতে চাই। ব্রেক ডাউনটি দেখতে এর মতো কিছু হতে পারে:

  • শিপ বডি: মুভমেন্ট, রেন্ডারিং
  • কামান: অবস্থান (জাহাজের দেহের সাথে সম্পর্কিত লক), ট্র্যাকিং hero বীরের দিকে আগুন, অক্ষম হওয়া পর্যন্ত ক্ষয়ক্ষতি
  • মূল: অবস্থান (জাহাজের দেহের সাথে সম্পর্কিত লক), ট্র্যাকিং hero বীরের দিকে আগুন, অক্ষম হওয়া পর্যন্ত ক্ষয়ক্ষতি নেওয়া, জাহাজের গোষ্ঠীর অন্যান্য সমস্ত সত্তাকে অক্ষম করা (এর ... ধ্বংস করা)

আমার লক্ষ্য এমন কিছু হবে যা আমি প্রতিবার নতুন নতুন এলিমেন্ট তৈরি করতে চাইলে সাব-সিস্টেমটি পুনরায় লিখতে না পেরে একটি স্বতন্ত্র গেম উপাদান হিসাবে চিহ্নিত (এবং ম্যানিপুলেটেড) হবে।

আমি কীভাবে ইএস সিস্টেমে এই জাতীয় নকশা বাস্তবায়ন করব?

  1. আমি কি কোনও ধরণের পিতা-মাতা-সন্তানের সত্তা সম্পর্ক বাস্তবায়িত করি (সত্তারও সন্তান থাকতে পারে)? এটি এই পদ্ধতির বিপরীত বলে মনে হচ্ছে যে সত্তা খালি খালি ধারক এবং এটি আরও OOP বোধ করে।
  2. আমি কি তাদেরকে কোনও ধরণের সংযোগকারী উপাদান (বসসকম্পোনেন্ট) এবং সম্পর্কিত সিস্টেম (বোসসুবসিস্টেম) সহ পৃথক সত্ত্বা হিসাবে বাস্তবায়ন করব? আমি সাহায্য করতে পারি না তবে ভাবতে পারি যে এটি কার্যকর করা কঠিন কারণ যেহেতু উপাদানগুলি যোগাযোগকে একটি বড় ভালুক জাল বলে মনে হয়।
  3. আমি কি তাদের উপাদানগুলির (শিপ কম্পোনেন্ট, ক্যানন কম্পোনেন্টস, কোর কম্পোনেন্ট) সংগ্রহ সহ একটি সত্ত্বা হিসাবে এগুলি প্রয়োগ করব? এটি একটিকে ইএস সিস্টেমের অভিপ্রায়টি (যা উপাদানগুলি ভারী ওজন সত্তার মতো দেখতে খুব বেশি লাগে) বলে মনে হয়, তবে আমি এটি জানি তাই আমি বুঝতে পেরেছিলাম যে এটি সেখানে রেখে দেব।
  4. আমি উল্লেখ করেছি এমন কিছু হিসাবে আমি কি সেগুলি বাস্তবায়ন করব?

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

অতিরিক্ত creditণের জন্য, একই ডিজাইনের কথা চিন্তা করুন তবে, "বস সত্তা" প্রত্যেকেই একটি মূল সংস্থা, প্রধান মূল এবং 3 "বস সত্ত্বা" দিয়ে তৈরি একটি বৃহত্তর "বিগবস সত্তা" এর সাথে সংযুক্ত ছিল। এটি আমাকে কমপক্ষে 3 টি মাত্রার (পিতামহ-পিতামাতা-সন্তানের) জন্য একটি সমাধান দেখতে দেয় ... যা আমার পক্ষে যথেষ্ট পরিমাণে হওয়া উচিত।


2
এটি কেবল কোনও সত্তার সাথে যুক্ত বিভিন্ন জাল উপাদান, জাহাজ- এবং বস সত্ত্বার সাথে সংযুক্ত কামান-জাল, ওভার-এনজিনিয়ার না। বিটিডব্লিউ একটি সত্তা উপাদান সিস্টেম ওও!
মাইক সেমদার

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

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

@ মাইকসেমদার আমি আমার মন্তব্যগুলি পরিষ্কার করেছি এবং তাদের চ্যাটে সরিয়ে
মাইকেলহাউস

1
ঠিক তাই আমি বুঝলাম @ মাইকসেমদার, ইএস সিস্টেমে আপনার রেফারেন্সিং, কোনও সত্তার একই ধরণের একাধিক উপাদান থাকতে পারে এবং সেই উপাদানগুলির জন্য সাবসিস্টেমকে এই সত্যটি মোকাবেলা করতে হবে? সুতরাং কোনও সত্তার একাধিক রেন্ডার উপাদান থাকতে পারে এবং সেই উপাদানগুলির ডেটা এবং উপ-সিস্টেমগুলি কীভাবে সেগুলি যথাযথভাবে রেন্ডার করবেন তা নির্ধারণ করতে পারে? এর ফলে অল্প সত্তা, সম্ভাব্য কম উপাদান তবে কিছুটা গভীরতর সাবসিস্টেম যুক্তি যুক্ত হবে, সঠিক?
জন ড্যানিয়েলস

উত্তর:


41

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

আমি বর্তমানে TargetEntityআমার গেমের একটি উপাদান ব্যবহার করি যা টুয়ারেট ট্র্যাকিংয়ের জন্য ব্যবহৃত হয় এবং যখন গলবিনরা কোনও সংস্থান গ্রহণ করে। এটি লক্ষ্য সত্তার অবস্থান পরীক্ষা করতে এবং সেই অনুসারে এর আচরণ পরিবর্তন করতে পারে। যে সত্তাগুলির কোনও অবস্থান নেই সেগুলি কখনই লক্ষ্য হিসাবে যুক্ত করা হয় না, সুতরাং সেখানে কোনও উদ্বেগ নেই। যাইহোক, যখন গভীরতার সাথে আরও বেশি হয়ে উঠবেন, যেমন পিতামাতা বা শিশু সত্তার স্বাস্থ্য, ieldাল, বিদ্যুতের সংরক্ষণাগার বা যা যা যা যা যা যা যা যা যা যা যা যা যা যা যাਰੇ করা হয় যাচাই করার জন্য আপনাকে অবশ্যই পিতামাতা বা সন্তানের সত্তা সম্পর্কিত উপাদান রয়েছে কিনা তা নিশ্চিত করতে হবে।

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

আমি এই বিষয়টিতে এখানে আরও একটি আলোচনা পেয়েছি । এতে ব্যবহারকারীরা একই ধরণের একাধিক উপাদানকে একটি সত্তায় যুক্ত করার বিষয়ে আলোচনা করছেন (যা আমার কাছে খারাপ ধারণা বলে মনে হচ্ছে)। এটি একটি দরকারী কথোপকথনের মতো বলে মনে হচ্ছে, যদিও আমি পুরো আলোচনাটি পড়েছি না।


এখানে অনেক ভাল তথ্য। আপনি সমাধানটি ভালভাবে ব্যাখ্যা করেছেন, আমাকে একটি উদাহরণ খেলুন এবং সম্ভবত আরও 1 বা 2 টি প্রশ্নের উত্তর দিয়েছিলেন যা আমাকে পরবর্তী সময়ে ফিরে আসতে হবে। লিঙ্কযুক্ত আলোচনাটিও আগ্রহজনক বলে মনে হয়, বিশেষত যখন আমি আরও কঠোর প্রয়োগের দিকে যেতে শুরু করি। ধন্যবাদ @ বাইট 56!
জন ড্যানিয়েলস

জন সমস্যা নেই! অবশ্যই ইসি সিস্টেম প্রয়োগের বিভিন্ন উপায় রয়েছে। এই উত্তরের জন্য যে সিস্টেমটি আমার মনে ছিল তা হ'ল আমি এই উত্তরে বর্ণিত । আপনার খেলার জন্য শুভকামনা!
মাইকেলহাউস

আপনার পদ্ধতির সর্বাধিক নমনীয় এবং এটিকে জেনারালিস্ট গেম ইঞ্জিনে ব্যবহার করা ভাল sound
কোয়েট

7

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

রেন্ডারিং সিস্টেম (বা যাই হোক না কেন) এরপরে উপাদানগুলির সাথে সত্তাকে ধরে ফেলে: অবস্থান, সংযুক্তি ইত্যাদি, এবং যথাযথ স্তরক্রমকে গঠন করে।


এটি theকমত্যের উত্তর বলে মনে হচ্ছে। পরের বারে আমি লোকদের চাবানোর জন্য আরও বাস্তবায়নের বিশদ দেব। ধন্যবাদ @ স্পিড!
জন ড্যানিয়েলস

4

আপনি যদি কোনও আইডি দ্বারা প্রতিনিধিত্ব করে কোনও সত্তা রাখতে চান, তবে সত্তাগুলির সংমিশ্রণটি একটি বিশেষ উপাদানটির মাধ্যমে করা যেতে পারে। আপনি এটিকে কমপোজিট কম্পোনেন্ট বলতে পারেন এবং এতে শিশু সত্ত্বা আইডিগুলির একটি তালিকা রয়েছে এবং সেই তালিকা থেকে শিশুদের যুক্ত / সরানোর জন্য ইন্টারফেস রয়েছে।

স্পষ্টতই কোনও উপাদান যা অবস্থান ইত্যাদির উপর নির্ভর করে সত্তাকে সঠিকভাবে স্থাপন করার জন্য এটির সাথে কাজ করতে হবে। কীভাবে এটি বাস্তবায়ন করা যায় আপনি বর্তমানে অবস্থান নির্ধারণ কীভাবে করবেন তার উপর কিছুটা নির্ভর করবে।

যাইহোক, কোনও "খাঁটি ইএস তত্ত্ব" নেই - উপাদানগুলির বাইরে সত্ত্বা তৈরি করা একটি জনপ্রিয় পদ্ধতির তবে সঠিক পদ্ধতিটি এখনও কোনওভাবেই মানসম্মত নয়।


হ্যাঁ, আমার কোনও নকশা আলোচনায় "খাঁটি" শব্দটি ব্যবহার না করা শিখানো উচিত ... এরকম কোনও জিনিস নেই। কনপোজিট কম্পোনেন্ট রুটটি এখানে conকমত্য বলে মনে হচ্ছে। ধন্যবাদ কাইলোটান!
জন ড্যানিয়েলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.