কনস্ট্যান্ট টাইম সহ গাইডেড মিসাইল


9

আমি খেলোয়াড় এবং ক্ষেপণাস্ত্র নিয়ে একটি গেম তৈরি করছি।

আমি পি 1 থেকে পি 2 পর্যন্ত একটি ক্ষেপণাস্ত্র নিক্ষেপ করতে চাই। ক্ষেপণাস্ত্রটি সর্বদা পি 2 এ পৌঁছাতে ঠিক পাঁচ সেকেন্ড সময় নেয়। ক্ষেপণাস্ত্রটির পি 2ও ট্র্যাক করা উচিত। পি 2 যদি আরও দূরে সরে যায় তবে সময়সীমাবদ্ধতা মেটাতে ক্ষেপণাস্ত্রটির গতি অবশ্যই বাড়ানো উচিত। যদি পি 2 বাম দিকে সরায় তবে ক্ষেপণাস্ত্রটি অবশ্যই বাম দিকে সরে যেতে হবে (এবং গতিও পরিবর্তন করতে হবে)। পি 2 যদি পি 1 এর কাছাকাছি চলে যায়, তবে মিসাইলটি ধীর হতে হবে।

এটা কি সম্ভব? এটি সম্পাদন করার সর্বোত্তম উপায় কোনটি?

আমার কাছে বর্তমানে ভেক্টর 2 ডি ক্লাস নেই (এটি আসলে কোনও গেম নয়, তবে উপমাটি ভাল কাজ করে), তাই যদি সম্ভব হয় তবে আমি এমন একটি সমাধান চাই যার প্রয়োজন নেই।

সম্পাদনা: এটি আসলে কোনও ক্ষেপণাস্ত্র নয়। :)

ধন্যবাদ!


1
(কেউ "এটি আসলে কোনও খেলা নয়" এর মাধ্যমে যোগ্যতর ক্ষেপণাস্ত্রের গাইডেন্স সম্পর্কে জিজ্ঞাসা করে আমি কিছুটা ভয় পেয়েছি তবে ...) ক্ষেপণাস্ত্রের ট্রাজেক্টোরির আকারে আপনার কোনও বাধা আছে কি? এটি সর্বদা তার বর্তমান অবস্থান এবং প্লেয়ার 2 এর মধ্যে কোনও সরল রেখা অনুসরণ করতে পারে? এটির টার্নিং ব্যাসার্ধ বা ত্বরণের কোনও সীমা আছে? এটা কি বাধা এড়ানোর প্রয়োজন? এছাড়াও, আপনি ভেক্টর 2 ডি উল্লেখ করেছেন - এটি কেবল 2D- তে আপনার প্রয়োজন বলে ধরে নেওয়া নিরাপদ? আপনি সমস্ত ভেক্টর গণিতকে উপাদান হিসাবে করতে পারেন, তবে একটি সহজ ভেক্টর গণিত শ্রেণীর তুলনায় এটি লেখার পক্ষে জটিল, তাই আমি এর বিপরীতে পছন্দটি বুঝতে পারি না understand
ডিএমগ্রিগরি

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

পথ সীমাবদ্ধ করা উচিত নয়। একমাত্র নিয়ম হ'ল: ক) "ক্ষেপণাস্ত্র" এর লক্ষ্য সর্বদা সর্বদা পদক্ষেপ নেওয়া উচিত। খ) "মিসাইল" সর্বদা সেখানে যেতে 5 সেকেন্ড সময় নেয়। ভেক্টর 2 ডি ক্লাস লিখতে সমস্যা নেই is আমার কাছে কেবল একটি কাজ নেই (এবং গণিত আমার সেরা বিষয় নয়)। যদি এটি আরও সহজ করে তোলে তবে আমি এটি যুক্ত করতে পারি।
পিটার

এটি করার সহজ উপায় হেরমাইটের স্প্লাইন ব্যবহার করা এবং প্যারামেট্রিক মানটি লিপ করা।
স্টিভেন শ্রুন

উত্তর:


11

সম্পাদনাটি আশ্বাস দেয়। :)

ঠিক আছে, এখানে একটি সরল আপডেট লুপ ...

ধরে নেওয়া হচ্ছে আমরা যখন ক্ষেপণাস্ত্রটি চালিত করি remainingFlightTime = 5fতখন আমরা শুরু করি ...

void UpdateMissile(float deltaTime)
{
   remainingFlightTime -= deltaTime;

   // At the end of the trajectory, snap to target & explode.
   // The math will put us there anyway, but this saves
   // on fancy logic related to overshooting. ;)
   if(remainingFlightTime <= 0f)
   {
      myX = targetX;
      myY = targetY;
      MissileImpact();
      return;
   }

   // Compute straight-line velocity that will take us
   // to the target in exactly the time remaining.
   velocityX = (targetX - myX)/remainingFlightTime;
   velocityY = (targetY - myY)/remainingFlightTime;

   // Integrate the velocity into the position.
   myX += velocityX * deltaTime;
   myY += velocityY * deltaTime;
}

1
এই পদ্ধতিটি "মিসাইল "টিকে তার লঞ্চ পয়েন্ট, মিড-ফ্লাইটের চারদিকে ঘোরে বলে মনে হয় না। +1
জন

0

অবস্থানটি কেন প্রকাশিত হবে না এবং পরিবর্তনের সাথে সাথে লক্ষ্য গন্তব্যটি আপডেট করবে না?

আপনার কীভাবে লিটারিং কাজ করে তা দেখতে হবে তবে এটি দেখতে এরকম কিছু দেখাবে:

public position startMarker;
public float duration = 5.0f;
private float startTime;
void Launch() {
    startTime = Time.time;
}
void Update() {
    float distCovered = (Time.time - startTime) / duration;
    missile.position = Vector3.Lerp(startMarker.position, target.position, distCovered);
}

লিপ্পিংয়ের মাধ্যমে আপনি মূলত কোনও নির্দিষ্ট সময়ের মধ্যে কোনও অবজেক্টের অবস্থান পরিবর্তন করছেন যাতে আপনি বলতে পারেন যে আপনি এ থেকে বি পর্যন্ত 50% পথ এবং অবজেক্টটি সেখানে স্থাপন করা হবে। লিર્পিং সরাসরি তাই আপনি সর্বদা লক্ষ্যটির দিকে এগিয়ে যাবেন (আপনি যেমন মন্তব্য করতে চান)।


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