از این روش میخواستم برای پیش بینی مسیر توپ داخل یک بازی پنالتی استفاده کنم و میتونه در موارد مشابه که نیاز داشتید مقصد شی رو پیدا کنید بدردتون بخوره.
کد پیش رو برای انجین یونیتی و به زبان سی شارپ هست.
فرمول
فرمول به زبان خودمونی: موقعیت فعلی شی + شتابی که داره(مثلا 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 اون گرفته بشه.
پایان.
اگر سوالی بود درخدمتم 🙂
