নির্দিষ্ট প্রসঙ্গে কিছু বস্তুর সাথে সংঘর্ষকে উপেক্ষা করুন


14

আমি ইউনিটিতে গাড়ি নিয়ে একটি রেসিং গেম তৈরি করছি। গাড়িটির বুস্ট / নাইট্রো পাওয়ারআপ রয়েছে। উত্সাহ দেওয়ার সময়, জম্বিগুলির সাথে সংঘর্ষের সময় আমি বিচ্যুত হতে চাই না, তবে প্রাচীরের সাথে সংঘর্ষের সময় আমি বিচ্যুত হতে চাই না।

অন্যদিকে, আমি জম্বিগুলির সাথে সংঘর্ষকে অগ্রাহ্য করতে চাই না, কারণ আমি এখনও তাদের প্রভাবগুলিতে আঘাত করতে চাই।

আমি কীভাবে এটি পরিচালনা করব? মূলত, আমি যা চাই তা নির্দিষ্ট জিনিসগুলির সাথে সংঘর্ষের সময় গাড়িটি ঘোরানো না।

উত্তর:


7

রানটাইমের সময় আপনার স্তরগুলি ম্যানিপুলেট করার বিষয়টি বিবেচনা করুন।

সম্পূর্ণ স্তরগুলির সাথে নির্দিষ্ট কিছু সামগ্রীর জন্য সংঘর্ষ সক্ষম / অক্ষম করা

পদার্থবিজ্ঞান.আগনোরকলিশন এবং ফিজিক্স.আইগনরলায়ারক্লিজেশন আপনাকে যথাক্রমে দুটি সংঘর্ষকারী এবং দুটি স্তরের মধ্যে সংঘর্ষকে অক্ষম করতে দেয়।

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

আমাদের প্রকল্পে আমরা যেভাবে এটি সম্পাদন করেছি তা হ'ল "অকার্যকর" নামের একটি স্তর তৈরি করা। অকার্যকর কিছুতেই সংঘর্ষ হয় না।

এখন আপনি কোনও স্তরটির সংঘর্ষটিকে সাময়িকভাবে তার স্তরটিকে "অকার্যকর" এ সেট করে অক্ষম করতে পারবেন এবং তার পুরাতন স্তরটি পুনরুদ্ধার করে পুনরায় সক্ষম করতে পারবেন।

এখানে সংক্ষেপ:

int oldLayer = -1;
int voidLayer;

void Start()
{
    voidLayer = LayerMask.NameToLayer("Void");
}

void DisableCollider(Collider col)
{
    oldLayer = col.gameObject.layer;
    col.gameObject.layer = voidLayer;
}

void EnableCollider(Collider col)
{
    col.gameObject.layer = oldLayer;
}

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

এখন আপনার নির্দিষ্ট পরিস্থিতি

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

এমনকি আপনি এগুলিকে এমন একটি স্তরে স্যুইচ করতে পারেন যা কেবল গাড়ির সাথে সংঘর্ষে না।

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

নিজেকে জিজ্ঞাসা করতে হবে:

  • আমি কি আমার গাড়িটি নিয়ে চারদিকে দৌড়াদৌড়ি করতে সক্ষম হতে চাই, বা তাদের কেবল মৃত্যুর অ্যানিমেশন বাজানো উচিত?

  • গাড়িটির গতিবেগ এবং কৌণিক বেগটি জম্বিগুলিকে আঘাত করে ক্ষুদ্র উপায়ে প্রভাবিত হয় কিনা সে সম্পর্কে আমি কি যত্ন করব?


1

ফিজিক্সকে কল করুন the গাড়িটি বাড়ানো শুরু করার সাথে সাথে প্লেয়ারের প্লেয়ারটিও অবিবাহিত করে সমস্ত জম্বিগুলিতে কল করুন gn এটি ইউনিটি প্লেয়ার এবং জম্বিগুলির মধ্যে যে কোনও সংঘর্ষের বিষয়ে প্রতিক্রিয়া দেখাবে না তার কারণ ঘটবে। গাড়িটি বাড়ানো শেষ হলে, Physics.IgnoreCollisionপ্রতিটি জম্বিটির জন্য আবার কল করুন , এটি প্লেয়ার অবজেক্টটি পাস করে falseআবার সংঘর্ষ-প্রতিক্রিয়া দেখা দেওয়ার জন্য।


তবে এর অর্থ হ'ল তারা আর কোনও কিছুর সাথে সংঘর্ষ করবে না।
পল মানতা

আমি আরও কিছু গবেষণা করব। কেবলমাত্র আমি ভাবতে পারি: সম্ভবত আপনি অনকোলিজইনটার থেকে মিথ্যা ফিরিয়ে সংঘর্ষটি উপেক্ষা করতে পারবেন?
ওয়্যাকিদেব

@ ওয়াকিডেভ এটি ঘটনা নয়।
রাইস ভ্যান ডার ওয়েয়ার্ডেন

@ পল আমি আমার উত্তর সম্পাদনা করেছি।
ওয়্যাকিদেব

0

আমি অনুমান করছি আপনি বস্তুর নাম চেক করতে পারেন, বা বস্তুর শ্রেণিতে একটি নামের মান যুক্ত করতে পারেন কিনা তা পরীক্ষা করে দেখুন?

bool boosting = false; //need a trigger in the game to set this to true.

function OnCollisionEnter(theCollision : Collision)
{   
    if (boosting == true)
    {
        if(theCollision.gameObject.name == "Zombie")
        {
              Debug.Log("Zombie hit during boost");              
        }
        else if(theCollision.gameObject.name == "Wall")
        {
              Debug.Log("Wall hit during boost");            
        }
    }
    else 
    {
        if(theCollision.gameObject.name == "Zombie")
        {
              Debug.Log("Zombie hit not in boost");              
        }
        else if(theCollision.gameObject.name == "Wall")
        {
              Debug.Log("Wall hit not in boost");                
        }
    }
}

তারপরে আরও একটি পরিবর্তনশীল রয়েছে যা আপনি বুস্টিংয়ের জন্য পরীক্ষা করতে এবং এটিতে চেকগুলিতে যুক্ত করতে পারেন।

সম্পাদনা: এতে এই পরিবর্তনশীল যুক্ত হয়েছে।


সংঘর্ষের বিষয়ে কীভাবে তাকে জানানো হবে তা তিনি জানেন; তিনি কেবল চান না যে ফলস্বরূপ কোনও পদক্ষেপ নেওয়া হোক। তিনি নির্দিষ্ট ক্ষেত্রে অন্তর্নির্মিত সংঘর্ষের প্রতিক্রিয়াটি অক্ষম করতে চান।
ওয়্যাকিদেব

সংঘর্ষের সূত্রপাত যখন বন্ধুত্বের মধ্যে যায় তখনই যা ঘটে? আমি এর আগে একতা ব্যবহার করি নি তাই আমি জানি না তবে কোকোস 2 ডি তে, এবং এক্সএনএ এটির মতো হয়ে গেছে।
লুইস

প্রকৃতপক্ষে, ityক্য ফিজিকএক্সের মাধ্যমে সংঘর্ষগুলি নিজেই পরিচালনা করে। অনকোলিজেন্টার কেবল একটি বিজ্ঞপ্তি পদ্ধতি; এটি প্রকৃত সংঘর্ষের প্রতিক্রিয়াটি পরিচালনা করার জন্য ডিজাইন করা হয়নি।
ওয়্যাকিদেব

0

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


0

এখানে দুটি শ্রেণির উত্তর রয়েছে:

  1. সংঘর্ষগুলি উপেক্ষা করা বা অক্ষম করা
    • এই সমাধানগুলি সমস্যার সমাধান করবে না, তিনি আঘাত করতে গিয়ে জম্বিগুলি উড়ন্ত যেতে চান।
  2. পরিবর্তনশীল ভর:
    • এটি একটি ভাল পদ্ধতির। সেই অনুযায়ী জড়তাকেও পরিবর্তন করতে ভুলবেন না।
      • উত্সাহ দেওয়ার সময় আপনি বিকল্পভাবে গাড়ি গণ এবং জড়তা পরিবর্তন করতে পারেন (উত্সাহ দেওয়ার সময় আমরা কোনও গাড়ীতে সমস্ত নন-কাইনমেটিক বস্তুর প্রভাব হ্রাস করতে এটি করি)
      • এটি রাস্তা বা দেয়াল ধরে নেওয়া উচিত নয় যেগুলি গতিময় are

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


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

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