কীভাবে কোনও উপাদান-ভিত্তিক গেমের সংঘর্ষটি সঠিকভাবে পরিচালনা করবেন?


11

উপাদানগুলির চারপাশে ডিজাইন করা কোনও খেলায় সংঘর্ষের সঠিকভাবে পরিচালনা করার জন্য আমার মাথাটি মোড়ানো করার চেষ্টা করছেন।

আমি দেখতে পাচ্ছি অনেকগুলি উদাহরণে PhysicsComponentএর সৃজনাত্মক উপাদানগুলির তালিকায় কিছু প্রকারের যোগ হয়েছে তবে প্রকৃত বাস্তবায়ন আমাকে বিভ্রান্ত করছে।

এটি কাজ করার জন্য, তার PhysicsComponentচারপাশের বিশ্বে অ্যাক্সেসের প্রয়োজন হবে। এটি আমার কাছে স্বজ্ঞাত জ্ঞান করে না। কোনও উপাদান কেবল তার ধারক (সত্তা) নয়, তার ধারকটির ধারক (বিশ্ব) সম্পর্কে অবগত হওয়া উচিত নয়?

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

আমার প্রশ্নটি প্রথমত, এটি ভাল নকশা কিনা এবং দ্বিতীয়ত, কোন সত্তাগুলির সংঘর্ষ হতে পারে তা নির্ধারণ করার উপায়। আমি মনে করি কঠিন সত্তা একটি খালি IRigidBody ইন্টারফেস বাস্তবায়ন করতে পারে যাতে স্তরটি তালিকার কোন সত্তাকে সংঘর্ষের জন্য সমর্থন করতে পারে তা নির্ধারণ করতে পারে। কিন্তু এটি কি উপাদানটির নকশা ভঙ্গ করছে?

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

তৃতীয়ত, যখন তারা উভয় সত্তাকে সংঘর্ষে লিপ্ত হয় তখন কোনওভাবে অবহিত করা উচিত এবং আমি কীভাবে এটি সম্পাদন করতে পারি তা সম্পর্কে নিশ্চিত নই।

ধরা যাক যে উভয় সত্তাতেই হেলথ কম্পোনেন্ট রয়েছে এবং যখন এগুলির উভয় সংঘর্ষ ঘটে তখন তাদের স্বাস্থ্য কিছুটা স্বেচ্ছাচারিত মূল্যের দ্বারা হ্রাস পাবে, ৫. আমি মনে করি যে এটি দুটি সত্তার মধ্যে সংঘর্ষ শনাক্ত করার সময় এটি পরিচালনা করার দৃশ্যের দায়িত্ব হবে?

কিন্তু তাহলে দৃশ্যটি কি খুব বেশি দায়বদ্ধ? আমি সম্ভবত এটি হাতছাড়া হয়ে যাওয়া এবং অযৌক্তিক হয়ে উঠতে দেখেছি যখন দৃশ্যটি অনেক কিছুর জন্য সত্তা সত্তা (?) এর অ্যাক্সেস না করে responsible

সম্পাদনা করুন: আরও বিশদ সহ প্রশ্ন আপডেট হয়েছে।


4
এই উত্তরটি লিঙ্ক করতে উপযুক্ত বলে মনে হচ্ছে: গেমদেব.স্ট্যাকেক্সেঞ্জার
অ্যান্ড্রু রাসেল

অ্যান্ড্রুয়ের লিঙ্কিত উত্তর, জেমসের উত্তর, এবং নিক উইগগিলের উত্তরগুলি +1 এর প্রাপ্য। উপাত্ত এবং পদ্ধতি উভয়ই একটি সাধারণ শ্রেণীর চেয়ে উপাদান হিসাবে ডেটা হিসাবে বেশি ভাবেন (এমন নয় যে তাদের কোনও পদ্ধতি থাকবে না, তবে তাদের খুব বেশি দায়িত্ব দেওয়া উচিত নয়)। একটি ভাল উপাদান কাঠামোর উদাহরণের জন্য আর্টেমিস উপাদান উপাদানটি দেখুন ( পাইমাস্টার.২০১০ / ২০১ ./entity-comp घटक-artemis )।
michael.bartnett

উত্তর:


5

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

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

আমি মনে করি আপনি সঠিক পথে আছেন এবং কেবল 'হ্যাঁ, এটি ঠিক শোনাচ্ছে' এর আরও বেশি দরকার তাই হ্যাঁ, এটি ঠিক শোনাচ্ছে।

আশাকরি এটা সাহায্য করবে!


3

সাধারণত গেম ইঞ্জিন সত্ত্বার মধ্যে সংঘর্ষ সনাক্ত করতে একটি তৃতীয় পক্ষের গ্রন্থাগার ব্যবহার করে। সেই দৃশ্যে পদার্থবিজ্ঞান রয়েছে এমন একটি সত্ত্বাকে "পদার্থবিজ্ঞান" বিশ্বে তৈরি বা নিবন্ধন করুন। এবং যখনই এটি দুটি সত্তার (এ এবং বি) মধ্যে একটি সংঘর্ষ সনাক্ত করে, এটি সাধারণত সত্তা এটিকে কলব্যাক বলত যে এটি সত্তা বিয়ের সাথে সংঘর্ষে পড়েছে এবং সত্তা বিয়ের জন্য একই, এটি জানিয়ে দিয়েছিল যে এটি সত্তা এটির সাথে সংঘর্ষ করেছে।

2 ডি এর জন্য একটি বিখ্যাত ফিজিক্যাল লাইব্রেরিটি বক্স 2 ডি। এছাড়াও এটি চিপমুনকের দিকে একবার নজর দেওয়া উচিত। 3 ডি-র জন্য, বুলেটটি বিনামূল্যে (সম্ভবত আপনি সবচেয়ে ভাল মুক্ত এটি খুঁজে পেতে পারেন)। হাভোক এবং ফিজএক্স প্রচুর ট্রিপল এ গেমসে ব্যবহৃত হওয়ার জন্য বিখ্যাত।


2

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

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


2

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

আমি বক্স 2 ডি ব্যবহার করছি যেখানে আপনি এমন একটি "সংঘর্ষ-শ্রোতা" সংযুক্ত করতে পারেন যা সংঘর্ষের দ্বারা জানানো হবে। যেহেতু আমি আমার "কলাইডার কম্পোনেন্ট" তে বডিস ব্যবহারকারী-উপাত্তে একটি পয়েন্টার যুক্ত করেছি, তাই আমি আমার দুটি কলাইডার কম্পোনেন্টগুলি পেতে পারি যা সংঘর্ষের অংশ ছিল।

সুতরাং সংঘর্ষের সময় যে জিনিসটি ঘটে তা হ'ল: সংঘর্ষের অংশ ছিল এমন কলাইডার কম্পোনেন্টগুলি তাদের মালিক-বস্তুর (গেম-সত্তা) একটি বার্তা প্রেরণ করবে যা পরিবর্তে সেই বার্তাটি তার সমস্ত উপাদানগুলিতে সম্প্রচার করবে।

প্রতিটি উপাদান তখন সেই বার্তায় প্রতিক্রিয়া জানাতে পারে, সুতরাং আপনার "স্বাস্থ্য-উপাদান" স্বাস্থ্য ইত্যাদি থেকে 5 টি পয়েন্ট মুছে ফেলতে পারে so


+1: আমি খুব অনুরূপ পন্থা ব্যবহার করছি। সংঘর্ষিত সংস্থাগুলির উপর নির্ভর করে ক্ষতির পরিমাণ আপনি কীভাবে নির্ধারণ করবেন?
ডেন

@ আমি যে সংঘর্ষ হয়েছে তার অনুসারে আমি বিভিন্ন বার্তা (বা বার্তা ডেটা) প্রেরণ করি। এটি আমার পক্ষে ঠিক কাজ করে, কারণ হ্যান্ডেল করার মতো আমার কাছে অনেক বেশি কেস নেই।
বামমজ্যাক

0

একটি সংঘর্ষের সিস্টেম তৈরি করুন যা সংঘর্ষ "বিশ্ব" জানে। তারপরে আপনার সংঘর্ষের উপাদানটিতে সংঘর্ষের সিস্টেমটিকে বলুন যে বিন্দু এ থেকে বি তে একটি রশ্মি ফেলুন এবং এটি সংঘর্ষিত হয়েছে কিনা তা প্রতিক্রিয়া জানান।

শুভকামনা। আমি সংঘর্ষের সিস্টেমটিকে গেম ইঞ্জিনের অন্যতম ক্লান্তিকর অংশ বলে মনে করি।

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