از این روش میخواستم برای پیش بینی مسیر توپ داخل یک بازی پنالتی استفاده کنم و میتونه در موارد مشابه که نیاز داشتید مقصد شی رو پیدا کنید بدردتون بخوره.
کد پیش رو برای انجین یونیتی و به زبان سی شارپ هست.
فرمول
فرمول به زبان خودمونی: موقعیت فعلی شی + شتابی که داره(مثلا 2 تا توی محور z و 0 تا توی x و y یعنی به سمت z داره مستقیم حرکت میکنه) ضربدر زمانی که مد نظر داریم تا پیشبینی شه مثلا دو ثانیه،یعنی ببینیم دو ثانیه دیگه کجا میره
r0+v * t r0 : موقعیت اولیه شی v:مقدار شتاب شتاب ثابت شی t:زمانی که قصد پیشبینی دارید ببینید شی در آن زمان کجاست،مثلا 2 ثانیه بعد
نمونه کد
نمونه کد برای انجین یونیتی به زبان سی شارپ، با این فرض که شی مورد نظر با کمک کامپوننت RigidBody فیزیک داره و با شتاب(Velocity) مشخصی در حال حرکته
using UnityEngine; public class FuturePositionPrediction : MonoBehaviour { public Vector3 velo; // The constant velocity vector public Vector3 currentPos; // The current position of the GameObject public float predictionTime; // The time in seconds for future position prediction private void Update() { // Calculate the future position Vector3 futurePosition = PredictFuturePosition(velo, currentPos, predictionTime); // Update the GameObject's position transform.position = futurePosition; } // Function to predict the future position Vector3 PredictFuturePosition(Vector3 velocity, Vector3 initialPosition, float time) { return initialPosition + velocity * time; } }
velo : متغیری که شتاب شی مورد نظر رو توی هر لحظه داخل خودش نگه میداره،میتونیم این رو از طریق کد آپدیت کنیم
currentPos : موقعیت فعلی شی مورد نظر
predictionTime : زمانی که میخواییم پیشبینی براش انجام بشه
این سه متغیر باید بصورت کد یا رفرنس استفاده بشن،مثلا شتاب میتونه از ریجیدبادی گیم آبجکت مورد نظر گرفته شه و همچنین موقعیت فعلیش از کامپوننت Transform اون گرفته بشه.
پایان.
اگر سوالی بود درخدمتم 🙂