کاربرد velocity در یونیتی
يكشنبه, ۱ شهریور ۱۳۹۴، ۱۱:۴۰ ب.ظ
منبع :gameover.blog.ir
velocity
سرعت حرکت یا شتاب رو تعریف می کنه.سرعت دوربین+کامپوننت انیماتور+سیستم ذره ای پارتیکل(دود و جرقه و ....)+بدنه های فیزیکی جامد و سخت(rigid body)+کامپوننت character controller و .... .
اما در مورد سوالت که ناقص آوردیش و نگفتی a از چه نوعی هست.اما من می دونم و بهت یاد می دم:
a متغیری از نوع Rigidbody هست که بهتره به صورت public تعریف بشه و یک کامپوننت rigidbody رو بعد از add component به player می کشی می اندازی توی این متغیر a که تعریف کردی.
a.velocity=transform.forward باعث میشه که transform یعنی همین ابجکت جاری (player) به سمت جلو شتاب بگیره یا کمی به سمت جلو بره چون گفتی forward . مثلا اگه می گفتی up می رفت بالا می پرید یا .... البته اگه یک عددی رو هم درش ضرب کنیم این شتاب بیشتر بیشتر خواهد شد. مثالی می زنم تا کاملا درک کنید قضیه رو.
--
این مثال رو حتما برای یونیتی ورژن 5.1 (Final باشه و beta نباشه چون بتا آزمایشی هست.لینک دانلود یونیتی 5.1 رو هم گذاشتم از روی fileniko.com بگیرید که سالمترین لینک ها رو می ذاره)
بریم سر اصل مطلب.
مثال:
یک cube به عنوان player در وسط صحنه بذارید جایی که دوربین اصلی(main camera) بتونه اونو ببینه.
یک plane بذار زیر cube که مکعب نیفته پایین(به عنوان زمین)
به cube یک rigid body بده(Add component)
یک اسکریپت سیشارپ می سازیم به اسم حتما velocity(چون اسم کلاس داخل اسکریپت ما هم velocity هست باید همنام بذاریم که دلخواه است) :
سرعت حرکت یا شتاب رو تعریف می کنه.سرعت دوربین+کامپوننت انیماتور+سیستم ذره ای پارتیکل(دود و جرقه و ....)+بدنه های فیزیکی جامد و سخت(rigid body)+کامپوننت character controller و .... .
کلاس های مختلفی داره :
Camera.velocity
Get the world-space speed of the camera (Read Only).
Animator.velocity
Gets the avatar velocity for the last evaluated frame.
Particle.velocity
The velocity of the particle.
Rigidbody.velocity
The velocity vector of the rigidbody.
HingeJoint.velocity
The angular velocity of the joint in degrees per second.
Rigidbody2D.velocity
Linear velocity of the rigidbody.
NavMeshAgent.velocity
The current velocity of the NavMeshAgent component.
JointDriveMode.Velocity
Try to reach the specified target velocity.
NavMeshObstacle.velocity
Velocity at which the obstacle moves around the NavMesh.
CharacterController.velocity
The current relative velocity of the Character (see notes).
ParticleCollisionEvent.velocity
Incident velocity at the intersection point of the collision.
ParticleSystem.Particle.velocity
The velocity of the particle.
اما در مورد سوالت که ناقص آوردیش و نگفتی a از چه نوعی هست.اما من می دونم و بهت یاد می دم:
a متغیری از نوع Rigidbody هست که بهتره به صورت public تعریف بشه و یک کامپوننت rigidbody رو بعد از add component به player می کشی می اندازی توی این متغیر a که تعریف کردی.
a.velocity=transform.forward باعث میشه که transform یعنی همین ابجکت جاری (player) به سمت جلو شتاب بگیره یا کمی به سمت جلو بره چون گفتی forward . مثلا اگه می گفتی up می رفت بالا می پرید یا .... البته اگه یک عددی رو هم درش ضرب کنیم این شتاب بیشتر بیشتر خواهد شد. مثالی می زنم تا کاملا درک کنید قضیه رو.
--
این مثال رو حتما برای یونیتی ورژن 5.1 (Final باشه و beta نباشه چون بتا آزمایشی هست.لینک دانلود یونیتی 5.1 رو هم گذاشتم از روی fileniko.com بگیرید که سالمترین لینک ها رو می ذاره)
بریم سر اصل مطلب.
مثال:
یک cube به عنوان player در وسط صحنه بذارید جایی که دوربین اصلی(main camera) بتونه اونو ببینه.
یک plane بذار زیر cube که مکعب نیفته پایین(به عنوان زمین)
به cube یک rigid body بده(Add component)
یک اسکریپت سیشارپ می سازیم به اسم حتما velocity(چون اسم کلاس داخل اسکریپت ما هم velocity هست باید همنام بذاریم که دلخواه است) :
کد
به اسکریپت دقت کنید. متغیر rb (اسم معنی دار به معنی rigid body) از نوع public است. پس توی inspector در زیر شاخه ی این اسکریپت باید بتونیم بهش ورودی بدیم. پس کامپوننت Rigidbody که add component کردید رو بکشید بندازید توی این کادر.
حالا اجرا کنید و space بزنید. می بینید کاراکتر می پره به بالا.
کجای کد گفتم بپر بالا ؟ اینجا : rb.velocity = transform.up*10 گفتم با سرعت 10 بپر به بالا (up).
به جاش می تونستم مقدار new Vector3(0, 10, 0 رو بدم؟ بلی. چون Vector3 سه پارامتر می گیره x,y,z که من Y رو مقدار دادم پس با شتاپ 10 به بالا jump (پرش) کرد و x (چپ و راست در صورت مقدار مثبت یا منفی به این پارامتر) و z(جلو عقب در صورت مقدار مثبت یا منفی ) رو صفر 0 دادم که فقط به سمت بالا بپره نه جلو نه چپ و راست.
نکته مهم: از velocity بهتره برای حرکت به جلو استفاده نشه مخصوصا زمانی که rigidbody میذاریم ممکنه شتاب زیاد بشه و ابجکت درت حرکت نکنه. فقط برای jump بدک نیست
using UnityEngine; using System.Collections; public class velocity : MonoBehaviour { public Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } void FixedUpdate() { if (Input.GetButtonDown ("Jump") ) rb.velocity = transform.up*10;//new Vector3(0, 10, 0); } }اسکریپت رو بکشید و روی cube رها کنید.
به اسکریپت دقت کنید. متغیر rb (اسم معنی دار به معنی rigid body) از نوع public است. پس توی inspector در زیر شاخه ی این اسکریپت باید بتونیم بهش ورودی بدیم. پس کامپوننت Rigidbody که add component کردید رو بکشید بندازید توی این کادر.
حالا اجرا کنید و space بزنید. می بینید کاراکتر می پره به بالا.
کجای کد گفتم بپر بالا ؟ اینجا : rb.velocity = transform.up*10 گفتم با سرعت 10 بپر به بالا (up).
به جاش می تونستم مقدار new Vector3(0, 10, 0 رو بدم؟ بلی. چون Vector3 سه پارامتر می گیره x,y,z که من Y رو مقدار دادم پس با شتاپ 10 به بالا jump (پرش) کرد و x (چپ و راست در صورت مقدار مثبت یا منفی به این پارامتر) و z(جلو عقب در صورت مقدار مثبت یا منفی ) رو صفر 0 دادم که فقط به سمت بالا بپره نه جلو نه چپ و راست.
نکته مهم: از velocity بهتره برای حرکت به جلو استفاده نشه مخصوصا زمانی که rigidbody میذاریم ممکنه شتاب زیاد بشه و ابجکت درت حرکت نکنه. فقط برای jump بدک نیست
۹۴/۰۶/۰۱