আমি কীভাবে ইউনিটগুলির শত্রু "সচেতনতা" প্রয়োগ করব?


12

আমি আরটিএস / টিডি হাইব্রিড প্রোটোটাইপ গেমটি বিকাশের জন্য ইউনিটি 3 ডি ব্যবহার করছি। ইউনিট এবং তাদের শত্রুদের মধ্যে "সচেতনতার" জন্য সর্বোত্তম পদ্ধতির কী? প্রতিটি ইউনিট প্রতিটি শত্রুর দূরত্ব পরীক্ষা করে সীমার মধ্যে থাকলে জড়িত থাকা কি বুদ্ধিমান?

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

এখানে সেরা অনুশীলন কি?


আমার যুক্ত করা উচিত যে ইউনিট / শত্রু গণনা সুপ্রিম কমান্ডারের স্কেল হতে চলেছে
ফিল

উত্তর:


10

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

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

প্রতিটি ফ্রেমের প্রয়োজনীয় পদক্ষেপ:

  1. শত্রুদের সরান
  2. নতুন শত্রু অবস্থানের জন্য BVH পুনর্নির্মাণ / আপডেট করুন
  3. ইউনিটগুলি সরান এবং গোলক-গাছের বিরুদ্ধে পরীক্ষা করুন।

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


3
+1 এই পদ্ধতির সহজ হবে যদিও এতে কিছু ত্রুটি রয়েছে। ওপি এটি প্রয়োগ করতে পারে এবং পরে অষ্টকের মতো কিছু বাস্তবায়ন করতে পারে। এছাড়াও, বেশিরভাগ আরটিএসে, ইউনিটগুলি কিছুটা বিলম্বের সাথে প্রতিক্রিয়া জানায়। প্রকৃতপক্ষে, গেমগুলির বেশিরভাগ এআই প্রতি সেকেন্ডে 10-30 ফ্রেম গণনা করা হয় যেখানে প্রতি সেকেন্ডে 30-60 ফ্রেমে গেমটি চলতে পারে (সংখ্যাগুলি অবশ্যই, আনুমানিক))
সামুরসা

আপনাকে ধন্যবাদ, আমাকে ঠিক আরও এক ধাপ এগিয়ে নিয়ে যাওয়ার দরকার ছিল এটি। আমি বিভিএইচ এবং এটি ইউনিটিতে কীভাবে প্রয়োগ করব তা সন্ধান করব। খুব শিক্ষামূলক এবং তথ্যমূলক পোস্ট! +1
ফিলি

ওহ এবং আপনি আরটিএসে থাকলে সুপ্রিম কমান্ডারটি পরীক্ষা করে দেখুন। এটি ক্রিস টেলারের সমস্ত খেলা যেমন সত্যই দুর্দান্ত একটি খেলা all
ফিল

7

বিভিএইচ বাস্তবায়ন করার দরকার নেই, যেহেতু ইউনিটির সংঘর্ষের ইঞ্জিনটি ইতিমধ্যে আপনার জন্য এটি করে।

প্রতিটি ইউনিটের সাথে কেবল একটি বৃহত বাউন্ডিং-গোলক ট্রিগার সংযুক্ত করুন (এর ব্যাপ্তি উপস্থাপন করে) এবং প্রতিটি ইউনিটের সীমার মধ্যে শত্রুরা কী রয়েছে তার উপর নজর রাখার জন্য OnCollisionEnter()এবং OnCollisionExit()কলব্যাকগুলি পরিচালনা করুন ।

নোট করুন যে ক্ষেত্রে আপনি আগ্রহী সেই ক্ষেত্রে হ'ল যখন অন্য ইউনিট গোলকের সাথে সংঘর্ষ হয়, যখন অন্য ইউনিটের গোলকটি গোলকের সাথে সংঘর্ষ হয় not


1
আমি মনে করি এটি গ্রহণিত উত্তরের ঠিক কম উপরে উঠতে হবে। গৃহীত উত্তর অধ্যয়নের জন্য ভাল তবে এই উত্তরটি শীর্ষে থাকা উচিত কারণ এটি সবচেয়ে ব্যবহারিক উপায়।
ভ্যারাকিলিক্স

আমি বিশ্বাস করি তুমি বোঝাতে চাইছ OnTriggerEnter()আর তাই OnTriggerExit()না?
স্মার্ট

1

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

এটি সবচেয়ে কার্যকর পদ্ধতি হতে পারে, বিশেষত যদি আপনি যুদ্ধের কুয়াশা বা প্যাথফাইন্ডিংয়ের মতো প্রভাব মানচিত্রের সাথে অন্য কিছু করার পরিকল্পনা করেন।

আমি ধারণার ব্যাখ্যা দিয়েছিলাম এমন একটি ভিডিও: https://www.youtube.com/watch?v=MEd6XV2Pecw

এবং এখানে একটি বাস্তবায়ন রয়েছে: https://www.youtube.com/watch?v=y_ewoxlZlgc

আমি গ্রিড টাইলের ইউনিট সংগ্রহ শুরুতে না শুরু করার প্রস্তাব দিই - তবে পরিবর্তে কেবল যখন সংগ্রহের প্রয়োজন হয়।

বিকল্প হিসাবে, আপনি যদি জানেন যে কোনও টাইলের ক্ষেত্রে এক্স ইউনিটের বেশি কখনও থাকবে না তবে আপনি এক্স দৈর্ঘ্যের একটি অ্যারে ব্যবহার করতে পারেন।

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