بسم الله الرحمن الرحیم
در دنیای سه بعدی یک وکتور 3 است که نشان می دهد جسم با چه سرعتی و در چه جهتی حرکت می کند .
مثلا وقتی می گوییم velocity یک ماشین => ( car_velocity = 3,0,0) است به این معنی است که این ماشین در جهت مثبت محور x با سرعت 3 در حال حرکت است که به زبان ساده می شود ماشین در حال حرکت به سمت راست با سرعت 3 است .
در جاهای زیادی velocity به کارتان خواهد امد مثلا فرض کنید میخواید اگر کارکتر بی حرکت بود انیمیشن ایدل اجرا شود در این صورت کافی است بگویید
if (player_Velocity == vector3.zero) idle_Animtion.play();
using UnityEngine; using System.Collections; // کد زیر ابجکت را با استفاده از //حرکت می دهدvelocity public class ExampleClass : MonoBehaviour { public Rigidbody rb; private float time = 0.0f; private bool isMoving = false; private bool isJumpPressed = false; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { isJumpPressed = Input.GetButtonDown("Jump"); } void FixedUpdate() { if (isJumpPressed) { //ابجکت با سرعت ده واحد در ثانیه به سمت بالا می رود rb.velocity = new Vector3(0, 10, 0); isMoving = true; Debug.Log("jump"); } if (isMoving) { // when the cube has moved for 10 seconds, report its position time = time + Time.fixedDeltaTime; if (time > 10.0f) { Debug.Log(gameObject.transform.position.y + " : " + time); time = 0.0f; } } } } https://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html
اما اگر از navmesha استفاده میکنید با استفاده از NavMeshAgent.velocity به آن دسترسی پیدا کنید.
محاسبه بالا به شما velocity را به نسبت World شما نشان میدهد. اما برای بدست اوردن velocity نبست به لوکال ابجکت از transform.InverseTransformDirection(WorldSpace_Vlocity); استفاده کنید
مثال :
// کد زیر را در اپدیت اجرا کنید // این کد سرعت حرکت ابجکت به جلو را بدون نیاز به فیزیک محاسبه کی کند.
Vector3 previous_frame = Vector3.zero; private void _velocity()
{
var current_frame = transform.localPosition;
var WorldSpace_velocity= (current_frame - previous_frame);
var Local_velocity = transform.InverseTransformDirection(WorldSpace_Vlocity);
print(Local_velocity.z / Time.deltaTime + "dif");
previous_frame = current_frame;
}