حرکت اجسام در یونیتی

در یونیتی دستورات زیادی برای حرکت اجسام تعبیه شده است که کاربر با توجه به نیاز خود می تواند از آنها استفاده نماید. به برخی از ساده ترین و در عین حال کاربردی ترین دستورات در این بخش اشاره خواهد شد. اگر بخواهیم ساده ترین روش حرکت در یونیتی را بیان نماییم می توان به پارامتر position از کامپوننت transform اشاره کرد. به طور مثال دستور زیر آبجکت مورد نظر را با سرعت Speed حرکت می دهد:

;GO.transform.position += transform.forward*speed

پارامتر position یک مقدار Vector3 بوده و می توان آن را جهت تعیین موقعیت دقیق یک آبجکت استفاده کرد. مثلاً طبق دستور زیر [ سی_شارپ]

;GO.transform.position= new Vector3(x,y,z)

   با فرض اینکه پارامترهای xyz هر کدام مقدار مورد نظر از موقعیت جدید آبجکت باشد، دستور فوق آبجکت را در موقعیت داده شده قرار می دهد. با استفاده از دستور Translate نیز می توان یک آبجکت را حرکت داد. این دستور یک مقدار Vector3 [بردار سه بعدی به منظور مشخص شدن طول و جهت حرکت] دریافت کرده و آبجکت را طبق آن حرکت می دهد. مثلاً دستور زیر آبجکت GO را با سرعت [یا به طول] speed و در جهت forward (روبرو) حرکت می دهد (دقیقاً مانند دستور اول):

;GO.transform.Translate(transform.forward*speed)

دستورات بیان شده برای حرکت (تغییر موقعیت) یک آبجکت، تاکنون از هیچ قانون فیزیکی (مثل شتاب) برای حرکت اجسام بهره نمی بردند، یعنی در واقع اگر دستورات بیان شده را در توابع Update استفاده نماییم،  آبجکت مورد نظر با یک سرعت ثابت حرکت می کند، در صورتی که بخواهیم برای حرکت آبجکت از قوانین فیزیک استفاده نماییم، می توان از  کامپوننت Rigidbody استفاده کرد. این  کامپوننت معرف همگان هست بنابراین از تکرار مطالب پرهیز خواهد شد. با استفاده از این  کامپوننت در صورتی که بخواهیم آبجکت مورد نظر با شتاب حرکت کند (مانند پرتاپ شدن تیر یا حرکت یک خودرو) می توانیم از دو دستور velocity و AddForce این کامپوننت استفاده کرد.

یادآوری:

دستور velocity یک پارامتر از  کامپوننت Rigidbody می باشد که در مقابل خود یک مقدار Vector3 [شامل طول و جهت وارد شدن حرکت با شتاب] دریافت می کند. دستور حرکت یک آبجکت [با شتاب] با سرعت speed و در جهت روبرو با استفاده از پارامتر velocity می تواند مانند زیر باشد:

;GO.GetComponent<Rigidbody> ().velocity=transform.forward*speed

همچنین دستور دیگری نیز توسط این کامپوننت پشتیبانی می شود، AddForce است. این تابع یک نیرو در جهت داده شده در پارامتر اولش به  آبجکت مورد نظر وارد می کند و زمانی که وارد شدن نیرو ممتد باشد مانند این است که آبجکت مورد نظر در حال حرکت است.

;GO.GetComponent<Rigidbody> ().AddForce(transform.forward*speed)

دستور فوق نیز یک نیرو در جهت روبرو به  آبجکت مورد  نظر به میزان speed وارد می کند. این دستور برای حرکت آبجکت هایی مثل Sphare بسیار مناسب و کاربردی است.

در تمامی دستورات بیان شده در آموزش های اخیر منظور از GO همان GameObject مورد نظر است که قصد حرکت دادن آن را داریم.

منبع: کانال UnityLearning @