একটি সত্তা সিস্টেমে সংঘর্ষ সনাক্তকরণ এবং প্রতিক্রিয়া


12

একটি ES সঙ্গে আরও মজা ...

বর্তমানে, আমার কয়েকটি সিস্টেম রয়েছে:

  • রেন্ডারার (রেন্ডারেবল অ্যাট্রিবিউট, ট্রান্সফর্ম অ্যাট্রিবিউট)
  • গতি (চলনযোগ্য বৈশিষ্ট্য, রূপান্তর বৈশিষ্ট্য, রেন্ডারেবল অ্যাট্রিবিউট [বাউন্ডিং বাক্সগুলির জন্য]])
  • ইনপুট (ইনপুট রিসিভার বৈশিষ্ট্য)
  • প্রভৃতি

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

যখন Motionকোনও সত্তা সরানো হয়, তখন রূপান্তরটি বৈধ হওয়া দরকার Collisionএবং আন্দোলনটি বাতিল বা অ্যাডজাস্ট করা (বাউন্স করা, কোনও দেয়ালে থামানো ইত্যাদি)।

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

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

আমিও একটি গতি ভেক্টর সংরক্ষণ পারে Movableগুণ, এবং Colliderসিস্টেম সমন্বয় Transformহিসাবে প্রয়োজন, কিন্তু যে মধ্যবর্তী কার্যকারিতা অনুরূপ জড়িত করব Motionএবং Collider, বা থেকে একটি কলব্যাক Colliderকরার Motionবাউন্স / প্রতিফলন, ইত্যাদি জন্য সংঘর্ষের অবস্থান এবং পৃষ্ঠ তথ্য সম্পর্কে কিছু তথ্য দিয়ে ।

এটি "বিশেষ কেস হ্যাক" শিরোনামে আসতে পারে তবে আমি এগুলি পরিচালনা করে এমন কিছুদের কাছ থেকে কিছুটা ইনপুট পেতে চাই যা এজন্য একটি টন এজ কোড কোড না তৈরি করে।

প্রশ্ন যখন মনে হয় যে তাদের একে অপরের জ্ঞান প্রয়োজন তখন গতি এবং সংঘর্ষের ব্যবস্থাগুলির মধ্যে আঁটসাঁট মিলন এড়ানো একটি ভাল উপায় কী?


1
প্রশ্নটা কি?
jcora

@ ব্যান, সংঘর্ষ সনাক্তকরণের যুক্তি যুক্ত করার জন্য, সংঘর্ষ + চালকে যতটা সম্ভব পৃথক করে রাখা এবং সিস্টেমের মধ্যে আন্তঃনির্ভরতা সর্বনিম্ন রাখার জন্য ভাল জায়গাটি কী? আমার পোস্টটি
দৌড়ানোর মতো

1
দুর্দান্ত, এখন আপনার প্রশ্নে সাহসী করে দিন । :)
jcora

উত্তর:


7

আপনি এটি overth سوچ করছি। আমার ইঞ্জিনে, যা একটি সত্তা-উপাদান সিস্টেমও ব্যবহার করে, প্রত্যেকের GameObjectএকটিতে পয়েন্টার থাকতে পারে ModuleCollision

গেমটি আপডেট হয়ে গেলে কী ঘটে:

  • দৃশ্য এটি ধারণ করে এমন সমস্ত অবজেক্টকে আপডেট করে। এটি Updateপ্রতিটি জন্য ফাংশন কল GameObject
  • ইনসাইড Updateফাংশন, প্রতিটি GameObject শুধুমাত্র তার গতি ও দিক, আপডেট না তার অবস্থান।
  • GameObjectModuleCollisionযদি এটি উপলব্ধ থাকে তবে তার বর্তমান অবস্থান, গতি এবং দিক আপলোড করে ।
  • দৃশ্য একটি ModuleCollisionভিত্তিতে সংঘর্ষের চেক করে ।
  • দৃশ্যের UpdatePostপ্রতিটি উপর ফাংশন কল GameObject। যদি অবজেক্টটির একটি সংঘর্ষের মডিউল থাকে তবে এটি সংঘর্ষের মডিউল থেকে আপডেট হওয়া অবস্থান, গতি এবং দিক আনবে। গতি এবং দিকনির্দেশ দিয়ে অবস্থান আপডেট করা হয়।
  • GameObjectতার অবস্থান এবং শিরোনাম থেকে একটি চূড়ান্ত 3x3 ম্যাট্রিক্স নির্মান।

হ্যাঁ, রাষ্ট্রটির কিছু সদৃশ রয়েছে, তবে তা ঠিক আছে। ModuleCollisionএটির সাথে সংঘর্ষের হ্যান্ডলিং করা সবচেয়ে ভাল উপায়, কারণ অন্যথায় GameObjectএটির কোনও ModuleCollisionহ্যান্ডেল রয়েছে কিনা তা দেখতে আপনাকে প্রত্যেককে পরীক্ষা করে দেখতে হবে ।


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

3

আমি এটি এইভাবে করব ...

তিনটি সিস্টেম আছে:

  1. আন্দোলন ব্যবস্থা
  2. ত্বরণ ব্যবস্থা
  3. সংঘর্ষের ব্যবস্থা

আন্দোলন ব্যবস্থা অবস্থানগুলিতে বেগ প্রয়োগ করে। ত্বরণ সিস্টেমটি বেগগুলিকে বল প্রয়োগ করে। সংঘর্ষের সিস্টেম সংঘর্ষগুলি সনাক্ত করে এবং বাহিনীটিকে সঠিক দিকগুলিতে প্রয়োগ করে বা আপনি যদি অশোধিত সংঘর্ষ চান তবে সরাসরি বেগকে পরিবর্তন করে।

উদাহরণস্বরূপ, আপনি atan2 ব্যবহার করে সংঘর্ষের মধ্যে কোণটি গণনা করতে পারেন , এবং তারপরে মৃতদেহগুলিকে সঠিক বাহিনী / বেগ প্রয়োগ করতে পারেন।

খুব প্রয়োজন হলে সংঘর্ষ সনাক্তকরণ সিস্টেমের বার্তা সম্প্রচার করুন।

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