আরটিএস গেম ইউনিট কাঠামো


18

আমি একাধিকবার মুভিটো এবং অ্যাটাক ক্রিয়াকলাপের মতো স্টাফ না করে বিভিন্ন ইউনিট তৈরির উপায় চাই

আমি এটি যেভাবে দেখছি, 2 উপায় আছে এটি করতে পারি।

  1. পতাকা সহ একটি একক জেনেরিক ইউনিট শ্রেণি যা এটি কী করতে পারে / কী করতে পারে তা নির্দিষ্ট করে (তারপরে একটি স্ট্যাটিক অ্যারেতে উদাহরণ তৈরি করে এবং প্রয়োজনে সেগুলি ধরবে)
  2. ইউনিট-নির্দিষ্ট ক্রিয়াকলাপগুলির (অ্যাটাক, হারভেস্ট, পেট্রোল) জন্য বিমূর্ত পদ্ধতি সহ বিমূর্ত ইউনিট শ্রেণি , যা ইউনিট প্রকৃতপক্ষে কিছুই কাটতে না পারলেও , সকলকে সাবক্লাসে প্রয়োগ করা দরকার ।

এটি করার প্রথম উপায়টি সবচেয়ে সহজ বলে মনে হচ্ছে তবে বেশিরভাগ ইউনিট ব্যবহারের জন্য অব্যবহৃত প্রচুর কোডটি শেষ হব।

দ্বিতীয় উপায় কাজ করতে পারে। তবে যদি আমি সিদ্ধান্ত নিই যে দুটি পৃথক একক যা সংস্থান সংগ্রহ করতে পারে তবে আমার কাছে দুটি ভিন্ন শ্রেণিতে হুবহু একই কোড থাকবে যা এটি করার সঠিক উপায় বলে মনে হয় না।

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

আমি যদি অস্পষ্ট (অত্যন্ত প্রশংসনীয়) বা আমি ঠিক কী খুঁজছি সে সম্পর্কে আপনার আরও তথ্যের প্রয়োজন হয় তবে কেবল একটি মন্তব্যে আমাকে জিজ্ঞাসা করুন।

উত্তর:


25

একটি সাধারণ পদ্ধতির একটি উপাদান-ভিত্তিক পদ্ধতির অংশ থাকে যেখানে বেস-ক্লাস "ইউনিট" সবেমাত্র সমস্ত ইউনিটগুলির মধ্যে থাকা সর্বাধিক মৌলিক দিকগুলি প্রয়োগ করে, যখন প্রতিটি ইউনিটে তারপরে একাধিক উপাদান-অবজেক্টের একটি তালিকা থাকে যা এটি কী করতে পারে তা বলে এবং এটা কিভাবে এটি।

উদাহরণস্বরূপ, একটি ট্যাংক উপাদান থাকতে পারে Mobile, Destructible, Attacker, একটি অচল শুধুমাত্র চূড়া Destructible, Attackerএবং ফসল কাটার Mobile, Destructible, Harvester। এই ক্লাসগুলি তখন এই আচরণগুলি বাস্তবায়নের জন্য প্রয়োজনীয় সমস্ত কোড অন্তর্ভুক্ত করবে। উপাদানগুলির মধ্যে ইন্টারঅ্যাকশনগুলি (যা Attackerকেবল যা তা ক্ষতি Destructibleকরতে পারে) উপাদানটি পরীক্ষা করে অন্য ইউনিটের প্রয়োজনীয় উপাদান রয়েছে কিনা তা প্রয়োগ করা যেতে পারে এবং তারপরে সরাসরি সেই উপাদানটির সাথে ইন্টারেক্ট করে।

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

Ityক্য আপনাকে এমন একটি স্থাপত্যে সমর্থন করে, কারণ ইতিমধ্যে পুরো ইঞ্জিন উপাদান-ভিত্তিক component সুতরাং এর মতো গেম-লজিক্যাল উপাদানগুলি স্ক্রিপ্টগুলির আকারে যুক্ত করা যায়।


সুতরাং unityক্যে, আমি কি তখন প্রয়োজনীয় উপাদানগুলি অক্ষম করে সক্ষম করব ?.
ড্যানিয়েল হলস্ট

@ ড্যানিয়েলহলস্ট না, আপনি প্রয়োজন হিসাবে এগুলি যুক্ত করে মুছে ফেলবেন। আপনি এটি ইউনিটির সম্পাদক বা স্ক্রিপ্ট ব্যবহার করে gameObject.AddComponentএবং করতে পারেন gameObject.RemoveComponent
ফিলিপ

আহ ঠিক আছে, তবে "মুভিটো" ক্রিয়া / আদেশের জন্য বলুন। অর্ডারটি করা হলে ইউনিট কীভাবে জানতে পারবে ?, এবং আমি কীভাবে আদেশগুলি সারি করবো?
ড্যানিয়েল হলস্ট

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

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

4

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


এটি বাস্তবায়ন করা কি অত্যন্ত কঠিন হবে?
ড্যানিয়েল হলস্ট

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

1
@ ড্যানিয়েল আমি আপনার প্রশ্নের Unityপতাকাটি লক্ষ্য করেছি । ইউনিটির মধ্যে ইতিমধ্যে একটি অন্তর্নির্মিত উপাদান ব্যবস্থা রয়েছে এবং উত্তরাধিকারের তুলনায় দৃ strongly়তার সাথে রচনাটি সমর্থন করে । একটি সহজ পদ্ধতি MonoBehaviourহ'ল আপনার প্রতিটি ক্রিয়া ধরণের জন্য একটি তৈরি করা , তারপরে প্রতিটি ইউনিট প্রকারের সাথে এটি সম্পাদন করতে সক্ষম ক্রিয়াকলাপগুলির সাথে সংযুক্ত করুন (ক্ষতির মূল্য এবং ব্যয়ের মতো প্রতি-টাইপের বিশদ সহ ক্রিয়াকলাপগুলি অনুকূলিতকরণ)। এটি আপনার ইউনিট তৈরির ডেটা-চালিত রাখে, যাতে আপনি সহজেই অনেকগুলি কাস্টম ইউনিটের প্রকার তৈরি করতে পারেন।
ডিএমগ্রিগরি

@ ড্যানিয়েলহলস্ট এটি আপনার "অত্যন্ত কঠিন" সংজ্ঞাটির উপর নির্ভর করে। আমার উত্তর কীভাবে এটি প্রয়োগ করা যেতে পারে সে সম্পর্কে আরও বিশদে যায়।
ফিলিপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.