প্লেয়ার অবজেক্টগুলির সাথে লেনদেন করার সময় আমার কখন বেগ বনাম অ্যাডফোরস ব্যবহার করা উচিত?


18

Twoক্য কাঠামোর এই দুটি পদ্ধতি সম্পর্কে আমি বিভ্রান্ত। উভয়ই প্লেয়ারটিকে বস্তু সরানো, থামানো, দিকনির্দেশ পরিবর্তন ইত্যাদি তৈরি করে etc.



@ বাইট 56 উভয় প্রশ্নই বিভিন্ন বিষয়ে জিজ্ঞাসা করছে
রবার্ট

1
ভিন্ন, তবে সম্পর্কিত। সে কারণেই তারা কেবল লিঙ্কযুক্ত এবং সদৃশ নয়। ডানদিকে সংযুক্ত কলামে এটি প্রদর্শিত হবে Show
মাইকেলহাউস

উত্তর:


13

আপনি velocityঅবিচ্ছিন্ন হারে বস্তুর স্থানান্তর করতে (উদাহরণস্বরূপ বুলেট) এবং AddForce()গতিবিধি যুক্ত করতে (উদাহরণস্বরূপ স্পেসশিপ থ্রাস্টার) ব্যবহার করতে চাইবেন । এছাড়াও লক্ষ করুন যে দুটি "প্রকারের" চলাচল রয়েছে; বল এবং প্ররোচনা। কোনও স্পেসশিপ থ্রাস্টারের জন্য আপনি প্রবণতাটি ব্যবহার করবেন।


4
আপনি কেন স্পেসশিপ থ্রাস্টারের আবেগকে পছন্দ করবেন তা বর্ণনা করতে পারেন? আপনি যদি অস্ত্রের প্রভাবের মতো জিনিসের কারণে গতিবেগে তাত্ক্ষণিক পরিবর্তনের পরিবর্তে সময়ের সাথে ধীরে ধীরে ত্বরণ প্রয়োগ করেন তবে এটি আসলে একটি অ-আদর্শ ফিট হতে পারে। একটি সময় উইন্ডোতে প্রয়োগ করা আপনি সাধারণত বল (বা ত্বরণ যদি আপনি ভরকে ফ্যাক্টর হতে না চান) চাইবেন সাথে সাথে তাত্ক্ষণিকভাবে আপনি
আবেগটি

@ ডিএমজিগ্ররি হ্যাঁ, এটি আপনি যে ধরণের শক্তি যোগ করতে চান তার উপর নির্ভর করে। স্পেসশিপ থ্রাস্টারের আমার উদাহরণে, যা শক্তির ক্ষণিকের ফেটে আসে তবে প্ররোচনাটি সঠিক পছন্দ।
ট্রোজানফো

2
আপনার দৃষ্টিভঙ্গির জেটের সংক্ষিপ্ত গুলি বা প্রধান ইঞ্জিনের অবিচ্ছিন্ন জ্বলন ("থ্রাস্টার" কিছুটা সময় বিজ্ঞান-বিজ্ঞানে কিছুটা সাধারণভাবে ব্যবহৃত হয়) তা অবিলম্বে পরিষ্কার হয়ে যায়নি, তাই আমি ভেবেছিলাম আমার স্পষ্ট করা উচিত যাতে কেউ চেষ্টা না করে একটি রকেট বুস্টার জন্য আবেগ ব্যবহার। ;)
ডিএমগ্রিগরি

নিবন্ধন করুন আমার স্পেস টেকের পরিভাষা মূলত চলচ্চিত্রের উপর ভিত্তি করে :)
ট্রোজানফো

@ ট্রোজানফোয়ে কেএসপি খেলুন ঠিক এখনের মতো.
ব্যবহারকারী 253751

21

যদিও ইতিমধ্যে স্বীকৃত উত্তর রয়েছে, তবে আমি মনে করি coveringেকে রাখার মতো কিছু অতিরিক্ত বিশদ রয়েছে।

বেগ ব্যবহার

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

  • যদি একাধিক উত্স / স্ক্রিপ্টগুলি সরাসরি (যেমন। body.velocity = foo) সেট করে একই রিজিডোবিল্ডের গতি পরিবর্তন করার চেষ্টা করে , তবে যে কোনও একটি শেষ জয়টি চালায় এবং অন্যগুলির শূন্য প্রভাব থাকে। এটি আপডেট বাগের ক্রম হতে পারে, বিশেষত সত্তা প্রতিষ্ঠানগুলি আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে পড়ে যায় (কারণ মহাকর্ষের কারণে নিম্নমুখী ত্বরণ এটি জমা হওয়ার আগেই ওভাররাইড হয়ে যায়)

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

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

অ্যাডফোরস এবং বন্ধুরা

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

অ্যাডফোর্স thingsচ্ছিক ফোর্সমোড প্যারামিটার নির্দিষ্ট করে চারটি স্বাদে আসে যা বিভিন্ন জিনিসগুলির জন্য দরকারী:

ForceMode       |   Use
-----------------------------------------------------------------------
Force (default) |   Accelerate an object over 1 time step, based on its mass.
                |   Units: Newtons = kg * m/s^2
                |
Acceleration    |   Accelerate an object over 1 time step, ignoring its mass. (like gravity)
                |   Units: m/s^2
                |
Impulse         |   Instantaneously propel an object, based on its mass
                |   Units: N * s = kg * m/s
                |
VelocityChange  |   Instantaneously propel an object, ignoring its mass
                |   (like body.velocity = foo, except multiple scripts can stack)
                |   Units:  m/s

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

যদি আপনি গতিতে আকস্মিক, তীব্র পরিবর্তনের মডেলিং করেন, যেমন বুলেট চালানো, বিস্ফোরণ থেকে সরে যাওয়া, বা কোনও বাধা ঘুরিয়ে দেওয়ার মতো, তবে আপনি সম্ভবত ইমপুলস বা ভেলোসিটি চেঞ্জ চান।

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

public static void AccelerateTo(this Rigidbody body, Vector3 targetVelocity, float maxAccel)
{
    Vector3 deltaV = targetVelocity - body.velocity;
    Vector3 accel = deltaV/Time.deltaTime;

    if(accel.sqrMagnitude > maxAccel * maxAccel)
        accel = accel.normalized * maxAccel;

    body.AddForce(accel, ForceMode.Acceleration);
}

আমি এই সমস্ত "সহায়ক ফাংশন" বলার কারণটি হ'ল প্রযুক্তিগতভাবে আপনি এখানে একই প্রান্তটি অর্জন করতে পারেন:

 body.velocity += suitablyCalculatedDeltaV;

( আমি মনে করি । এটি সম্ভব ইউনিটির ফিজএক্স / বক্স 2 ডি-ভিত্তিক পদার্থবিজ্ঞান পৃথকভাবে অ্যাডফোর্সের মাধ্যমে বাফার পরিবর্তনগুলি সলভ করে, তবে এর সুস্পষ্ট ফলাফল আমি দেখিনি)

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


6

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

আমি যখন অ্যাগ্রি পাখিগুলিতে অ্যাডফোরস ব্যবহার করি তখন আমি ব্যবহার করতাম,

_birdRigidbody.AddForce(new Vector2(5,5));

যখন আমি বেগ ব্যবহার করি তখন আমি ট্রাজেক্টোরি ব্যবহার করে পরিচালনা করব would

x = v*t*Cos(theta) y = v*t*Sin(theta) - 0.5 * g * t *t

বা এই জাতীয় কিছু।

কার রেসিং গেমটিতে থাকাকালীন আপনাকে সর্বদা গতি নিয়ন্ত্রণ করতে হবে, অ্যাংরি পাখি যেমন শ্যুট এবং সমস্ত কিছুর মতো নয়। সুতরাং যে পরিস্থিতিতে হ্যান্ডেল velocityতুলনায় আরও দরকারী AddForce

আশা করি বুঝতে পেরেছো. কমপক্ষে কিছুটা হলেও।


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

0

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

উভয় ক্ষেত্রেই এটি অ্যাডফোর্স বা বেগের ফাংশন হোক না কেন আমরা তাদের ব্যাখ্যা করার জন্য শব্দ শব্দটি ব্যবহার করতে যাচ্ছি।

যখন আমরা রিজিডোডি.বেসটি ব্যবহার করি, তখন সেই ক্ষেত্রে আমরা আমাদের বস্তুতে বল যোগ করছি তবে এই শক্তি কেবল তখনই অবজেক্টটিকে সরিয়ে ফেলবে যতক্ষণ না আমরা শক্তি প্রয়োগ না করা অবধি।

উদাহরণ স্বরূপ

বডি.বেলসিটি = নতুন ভেক্টর 3 (0,0,5);

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

বডি.বেলসিটি = নতুন ভেক্টর 3 (0,0,200);

এবং যদি আপনি মানটিকে 200 এ পরিবর্তন করতে চান এবং তারপরে ডাব্লু প্রেসকে সংরক্ষণ করার পরে গাড়িটি 200 শুরু করে 200 গতিবেগে শুরু করবে যা বাস্তব বিশ্বে সম্ভব নয়।

এখন যদি আপনি রিজিডবডি.এডিডফোর্স সম্পর্কে কথা বলেন

আমাদের গাড়ী উদাহরণ চালিয়ে। যদি আপনি গাড়ীতে 200 জোর যোগ করেন

body.addforce (0,0,200);

আমরা ডাব্লু টিপলে গাড়ি 200 গতিতে চলতে শুরু করবে না তবে এটি ধীর গতি থেকে শুরু হয়ে তার গতি বাড়িয়ে ড্র্যাগের মান অনুসারে থামবে।

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

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

(সূত্র)


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