soheil moonesi
soheil moonesi
خواندن ۴ دقیقه·۹ ماه پیش

Unity Mover Project

خوب اینجا دوست دارم یه توضیحی در مورد این پروژه بدم

این یه عکس از نتیجه نهایی بازی هستش. توی این بازی قراره که اون مکعبی که گوشه سمت راست هستش رو برسونیم به اون مربع بنفشه که گوشه بالایی هستش و توی مسیرمون یه سری مانع طراحی کردیم که هر کدوم یه جوری حرکت میکنن یا ثابت هستند و وقتی که بهشون میخوریم رنگشون به رنگ قرمز تغییر میکنه.

حالا بیایم راجع به کد ها صحبت کنیم. میخوایم اسکریپتی بنویسیم که وقتی به یه آبجکتی اضافه اش کردیم بعد از چند ثانیه اون آبجکت از روی آسمون ظاهر بشه و بیوفته روی زمین.

اینجا serialized field معنیش این هستش که میتونیم توی inspector یونیتی مقدارش رو ببینیم و تغییرش بدیم. time to wait همون زمانی که میخوایم اون آبجکت بعد از شروع بازی بگذره و بعد از آسمون بیوفته.

خوب توی خط بعدی میایم و cache میکنیم. برای این که بخوایم کامپوننت هایی که میخوایم استفاده کنیم رو یک بار تعریف کنیم و در جاهای مختلف برنامه ازشون استفاده کنیم نیاز به یه ظرف و یه متغییر داریم، اینجا اومدیم برای MeshRenderer و rigidbody دو تا متغییر از نوع خودشون تعریف کردیم.

توی خط بعدی اومدم یه متد تعریف کردم که این کد هایی که پایین تر نوشتم رو بزارم داخلش برای این که مرتب تر بشه ولی یادم رفته همینجوری خالی مونده .

خوب میرسیم به start اگر یادتون باشه start فقط یک بار در شروع برنامه اجرا میشه و تمام.

حالا میایم از اون متغییر هایی که بالاتر تعریفشون کردیم استفاده میکنیم و اون کامپوننت هایی که لازم داریم با GetComponent میگیریم و میریزیم داخل متغییرهاشون که بعدا بتونیم راحت ازشون استفاده کنیم.

حالا renderer.enable = false یعنی چی؟ برای این که اون آبجکت هایی که تو آسمون هستند قبل از اون چند ثانیه مخفی باشن اومدیم از این قابلیت استفاده کردیم و مخفیشون کردیم

حالا rigidbody.gravity =false یعنی چی؟ خوب میخوایم قبل از اون چند ثانیه این اجسام همونطوری توی آسمون باقی بمونند . طبیعتا برای این کار باید جاذبه رو خاموش کنیم که با این کد همین کار رو کردیم.

حالا همونطوری که یادتونه update توی هر فریم اجرا میشه.

اینجا اومدیم if گذاشتیم و گفتیم که بعد از Time.time که میشه همون تایمی که داره طی میشه بزرگتر بود از اون تایمی که ما تعیین کردیم برای رها شدن اجسام بیاد اون قسمت از کد رو اجرا کنه.

بعد هم اومدیم اون چیزی هایی که در خط های بالا غیر فعالشون کرده بودیم رو فعال میکنیم.

ادامه :

خوب اینجا یه نکته ی مهم داره دقت کنید وقتی که داریم ورودی horizontal , vertical رو میگیریم چه شکلی میشه :

به این شکل در میاد.

حالا ممکنه بگید که vertical میشه عمودی ولی اینجا به شکل محور آبی و قرمز که روی زمینه دقت کنید و این
vertical ارتفاع عمودی نیست. اینجا D میشه horizontal و W میشه vertical.

حالا ممکنه بگید ، چرا توی zValue گذاشتی ؟ برای جوابش وقتی که شما به عکس اول این مطلب نگاه کنید میبینید که ما محور های X و Z رو برای حرکت کردن انتخاب کردیم و محور Y که اینجا به عنوان ارتفاع هستش رو freeze کردیم.

خوب حالا میرسیم به قسمت input خوب یونتی از کجا میفهمه که این کلید هایی که میزنیم هر کدوم روی کدوم یکی از این ها تاثیر میزاره یعنی روی vertical یا horiziontal ؟

خوب برای فهمیدنش باید برید توی قسمت edit بعد project manager بعد میرسید به همچین صفحه ای :

خوب اینجا خودش از قبل تعریف شده براش و اگر خواستید هم تغییرش بدید از همین جا تغییرش بدید.

همونطوری که میبینید برای horizontal از کلید های left , right و a , d استفاده میشه.

خوب از time.deltaTime ها برای همسان سازی زمان اجرا استفاده در سیستم ها استفاده کردیم.

حالا میرسیم به objectHit حالا داستانش چیه؟ ما اومدیم به همه اجسامی که توی صفحه درست کردیم این اسکریپت رو اضافه کردیم. خوب حالا این قضیه چی کار میکنه ؟ این باعث میشه که وقتی که player یا همون مکعب نارنجی که خودمون داریم کنترلش میکنیم به هر چیزی که خورد رنگش قرمز رنگ بشه.

چطوری؟ اینطوری که اومدیم از متد از قبل تعریف شده unity به اسم onCollistionEnter استفاده کردیم. این متد یه پارامتر میگیره و اون هم اینه که چی بهش برخورد کرده ، اطلاعات اون جسمی که بهش برخورد کرده رو میگیره ، حالا ما هم اومدیم از اون اطلاعات استفاده کردیم و گفتیم که اگر اون چیزی که با تو برخورد کرده تگش Player بود رنگت قرمز میشه و تمام.

حالا خوب ممکنه بگید تگ؟ تگ چیه ؟

خوب برای این که بتونیم اجسام که درست کردیم رو راحت تر بهشون دسترسی پیدا کنیم میایم از تگ استفاده میکنیم ، اینطوری:

همونطوری که توی عکس های قبل تر دیدید فولدر بندی کردم و ساختار دادن به پروژه خیلی مهمه پس حواستون بهش باشه.

خوب نکته ی دیگه ای که اینجا هست اینه که برای این که یک جسمی رو بتونیم ثابت نگه داریم چه به لحاظ position و چه به لحاظ rotation میتونیم به کامپوننت rigidbody بریم و بعد اونجا توی قسمت constraints بریم و freez اشون کنیم.

سعی کردم مواردی رو که یاد گرفتم رو اینجا به اشتراک بزارم ، تمام این ها پروژه های course هستش که دارم میبینم



کدunity
C# enthusiast
شاید از این پست‌ها خوشتان بیاید