بخش پنجم آموزش یونیتی متوسطه (ساخت بازی شوتر اول شخص)
فهرست مطالب
آخرین به روزرسانی در 21/10/2022
در بخش پنجم از آموزش یونیتی متوسطه ، قصد آموزش ساخت بازی شوتر اول شخص (FPS) را در یونیتی داریم.
ما در بخش قبلی به آموزش رابط کاربری یونیتی پرداختیم و مباحث پیشرفته تری را در قالب رابط کاربری ارائه دادیم.
در این بخش قصد شروع یک پروژه ی متفاوت تر و همچنین متداول تر را در بین گیمرها داریم.
و میخواهیم مباحث پیشرفته تری را در قالب این پروژه ی شوتر اول شخص ارائه دهیم.
پیش نیاز این آموزش تسلط به مبحث اسکریپت نویسی در سی شارپ می باشد.
پیش نیاز دوم این دوره ی آموزشی تسلط و درک مفاهیم اولیه ی زبان برنامه نویسی C# می باشد.
مقدمه
ما قبلا در مقاله ی دوربین بازی توضیحاتی را در رابطه با زوایای دوربین بازی و چندم شخص ها داده ایم.
اما به طور کلی و خلاصه بازیهایی که حول بخشهای اکشن شلیک تفنگ متمرکز میشوند، به عنوان تیرانداز اول شخص (FPS) یا سوم شخص (TPS) تعریف میشوند.
در این آموزش، یاد خواهید گرفت که UFPS چیست و چگونه از آن برای ایجاد یک بازی Unity FPS اولیه استفاده کنید.
پس از این آموزش، شما مباحث زیر را خواهید آموخت :
- استفاده از اسکریپت های اساسی UFPS برای حرکت دادن بازیکن و شلیک اسلحه
- کار با اجزای vp_FP
- افزودن سوراخ های گلوله پس از شلیک یک سطح
- اضافه کردن یک پلیر با حرکت استاندارد FPS به یک صحنه
- اضافه کردن یک تفنگ جدید و پیکربندی برخی از آپشن ها
- اضافه کردن یک تفنگ تک تیرانداز (که بهتر از هر اسلحه جدید قدیمی است) با زوم و هدف گیری متقابل
(لازم به ذکر است برای این پروژه به لایسنس UFPS: Ultimate FPS توسط Opsive نیاز دارید که میتوانید آن را در فروشگاه Unity Asset دریافت کنید.
این آموزش با استفاده از UFPS نسخه 1.7 نوشته شده است.)
شروع کار
UFPS یک پلاگین Unity است که شامل منطق اصلی برای قدرت بخشیدن به یک بازی معمولی FPS است.
بهجای نوشتن اسکریپتهای پر زحمت برای هر سناریو، میتوانید اسکریپتهای از پیش بارگذاریشده را برای انجام فعالیتهای معمولی مانند:
- تجهیز اسلحه
- متحرک سازی و شلیک اسلحه
- مدیریت مهمات و موجودی
- حرکت پلیر
- مدیریت پرسپکتیو دوربین
- ردیابی دوربین
- مدیریت events ، مانند ضربه خوردن با تفنگ ray
- مدیریت سطوح، به عنوان مثال، شیب های لغزنده
- Ragdoll و فیزیک گرانش
(لازم به ذکر است هیچ بازی بزرگی در یک مرحله ساخته نشده است و نیاز می باشد که برای این بازی نیز شما در ابتدا هسته ی کار یعنی ، گیم پلی را ساخته و سپس به توسعه ی گرافیک و گیم دیزاین بازی بپردازید.)
پروژه ی مورد نیاز را برای این آموزش دانلود کنید :
پروژه را در Unity باز کنید و روی صحنه Main در پروژه دوبار کلیک کنید تا صحنه بازی بارگذاری شود.
پس از یافتن UFPS در فروشگاه Unity Asset، به بخش دانلودها رفته و روی دکمه دانلود کلیک کنید.
وقتی تمام شد، روی دکمه Import کلیک کنید، منتظر بمانید تا محتویات پکیج نمایش داده شود و سپس روی OK کلیک کنید.
این یک پکیج بزرگ و حجیم است پس صبور باشید.
پس از تکمیل عملیات Import ، ممکن است اخطارها یا ارورهاییس دریافت کنید.
اینها از UFPS هستند و می توان آنها را نادیده گرفت.
از منوی File گزینه Save Scenes را انتخاب کنید تا کارتان ذخیره شود.
روی دکمه Play کلیک کنید و پروژه ی جدید را خواهید دید.
مفاهیم مهم
قبل از وارد شدن به بطن کار لازم است یک سری مفاهیم مهم و پایه را بدانید.
FP components
FP نشان میدهد که یک کامپوننت ، متعلق به خانوادهای از اسکریپتها است که آبجکت تیراندازی اولشخص واقعی را مدیریت میکنند.(بازیکن)
این کامپوننت ها همیشه با vp_FP شروع می شوند.
یکی از مهمترین آنها اسکریپت vp_FPController است که هنگام ایجاد آبجکت پلیر روی آن قرار میگیرد.
States
States می تواند یک مفهوم گیج کننده باشد. در بسیاری از مؤلفههای vp_FP، بخشی به نام State پیدا خواهید کرد. در اینجا نمونه ای از ظاهر آن است:
برخی از اسکریپتهای vp_FP دارای یک بخش track هستند که مقادیری را که متغیرهای local باید برای وضعیت آن کامپوننت در یک زمان معین باشند، ردیابی میکند.
اینطور فکر کنید : وقتی بزرگنمایی میکنید و از تیراندازی تفنگ تک تیرانداز استفاده میکنید، در حالت “Zoom” قرار میگیرید؛ مقادیر از پیش تعیین شده برای آن حالت با تغییر موقعیت و چرخش تفنگ را بالا میبرند و در مرکز قرار میدهند.
هنگامی که زوم می کنید، حرکت سلاح را نیز متحرک می کند.
Events
یک رویداد سیگنالی بین آبجکت ها است که نشان می دهد اتفاق مهمی رخ داده است و ممکن است آبجکت های دیگر نیاز به واکنش داشته باشند.
به عنوان مثال، زمانی که به چیزی ضربه می زند.
بخش “getting hit (دریافت ضربه)” event است.
سایر آبجکت ها بر اساس نحوه تنظیم بازی خود واکنش نشان می دهند.
راه اندازی Player Prefab
SimplePlayer را در نوار browser’s search تایپ کنید و سپس Prefab ، SimplePlayer را به صحنه مقابل یکی از اهداف بکشید.
SimplePlayer GameObject را در Hierarchy انتخاب کنید و موقعیت آن را روی (X = -26.6، Y = 1.3، Z = -21.3) و Rotation را روی (X = 0، Y = 0، Z = 0) قرار دهید.
دوربین GameObject را از Hierarchy حذف کنید.
شما به آن نیاز ندارید زیرا دوربین در SimplePlayer به شما دید اول شخص می دهد.
play and voila را فشار دهید، شما یک بازی FPS دارید و در حال پلی آن هستید.
برای قفل کردن cursor روی صفحه، به محض روشن کردن یا بزرگنمایی، پلی را فشار دهید.
Escape را فشار دهید تا کنترل cursor را دوباره به دست آورید.
از کلیدهای WASD برای راه رفتن استفاده کنید و دکمه سمت چپ ماوس را برای شلیک گلوله و دکمه سمت راست ماوس را برای بزرگنمایی فشار دهید ؛ می توانید در حین بزرگنمایی شلیک کنید. همچنین می توانید Shift را برای دویدن و Space را برای پریدن فشار دهید.
ممکن است تعجب کنید اگر بدانید که لازم نیست برای زمانی که بازیکن اسلحه را حرکت می دهد یا شلیک می کند انیمیشن بسازید.
حرکتی که می بینید با فیزیک انجام می شود. UFPS خود این کار را انجام می دهد.
UFPS شما را با یک گلوله شروع می کند، اما پروژه استارتر شامل یک تفنگ ساچمه ای و یک تفنگ تک تیرانداز پیش ساخته است.
به زودی هر دو را به کار خواهید برد و تنظیمات UFPS را برای کامل کردن انیمیشن ها ویرایش خواهید کرد.
اگرچه شما نیازی به متحرک سازی حرکت اسلحه ندارید، اما برای انیمیشن های دستی باید اینکار را بکنید.
این آموزش نه انیمیشن های دستی را پوشش می دهد و نه UFPS آنها را برای شما انجام می دهد.
با این حال، هنگام ساختن یک FPS برای انتشار، باید آنها را در نظر بگیرید.
در نهایت، شما می توانید انیمیشن های پیچیده را با مدل های تفنگ اضافه کنید. (در این صورت، باید دست را به مدل اضافه کنید.)
افزودن سوراخ اسلحه
شما می توانید صدای تفنگ و تماشای پرتاب گلوله ها را بشنوید ؛ حتی یک افکت شعله ور جالب در جلوی تفنگ وجود دارد.
UFPS این کار را برای شما انجام می دهد، که یکی از ویژگی هایی است که اضافه کردن و پیکربندی تفنگ های جدید را آسان می کند.
سعی کنید به چیزی شلیک کنید و متوجه می شوید که چه چیزی کم است.
آیا آن تفنگ تیراندازی خالی است؟ چرا هیچ سوراخ گلوله ای پس از شلیک وجود ندارد؟
هر زمان که به چیزی شلیک می کنید، باید اثری از خود بگذارد.
در نمای Hierarchy ، روی فلش کشویی سمت چپ Environment GameObject کلیک کنید و Wall GameObjects فرزند را انتخاب کنید.
در Inspector، روی Add Component کلیک کنید و vp_SurfaceIdentifier را در قسمت search تایپ کنید.
روی vp_SurfaceIdentifier تنها اسکریپت موجود ، کلیک کنید تا آن را اضافه کنید.
روی نقطه سمت راست قسمت Surface Type کلیک کنید.
در منوی باز شده، روی تب Assets کلیک کرده و Metal را انتخاب کنید.
Ground GameObject را در Hierachy انتخاب کنید و مراحل بالا را تکرار کنید، اما برای مرحله آخر Wood را انتخاب کنید.
اهداف به یک wood surface identifier نیاز دارند، بنابراین روی فلش کشویی کنار Target و BackTarget GameObjects در Hierarchy کلیک کنید تا با شود ؛ و سپس فرزندان آنها را انتخاب کنید و کامپوننت اسکریپت vp_SurfaceIdentifier را اضافه کنید.
همچنین نوع سطح را روی Wood قرار دهید.
روی Play کلیک کنید و سعی کنید به هدف، دیوارها و زمین شلیک کنید.
اکنون تغییر را متوجه خواهید شد.
چگونه خشاب UFPS کار می کند
SimplePlayer GameObject را در Hierachy گسترش دهید و سپس FPSCamera GameObject را گسترش دهید. 1Pistol GameObject را انتخاب کنید.
عدد 1 در جلوی نام سلاح نشان دهنده عددی است که بازیکن باید برای پر کردن آن خشاب در طول بازی فشار دهد.
وقتی اسلحههای جدیدی اضافه میکنید، فقط تعداد آنها را افزایش میدهید و UFPS به طور خودکار تعویض سلاح را انجام میدهد.
1Pistol GameObject چندین کامپوننت مهم دارد:
AudioSource باعث می شود که اسلحه در هنگام شلیک اصطلاحا ” bang ” بزند.
vp_FPWeapon این GameObject را به عنوان یک سلاح در چارچوب UFPS شناسایی می کند و جنبه های مربوط به خود سلاح را کنترل می کند.
vp_FPWeaponShooter جلوه هایی مانند muzzle flash ، خشاب و گلوله را کنترل می کند.
vp_FPWeaponReloader صداها و انیمیشن های مربوط به reloading را کنترل می کند.
نکته : مهمات و تعویض آنها از محدوده این آموزش خارج است، اما آنها چیزی هستند که هنگام ساخت بازی خود باید به آن فکر کنید.
همچنین، بخشهای زیادی برای این مؤلفههای vp_FP وجود دارد و دایکومنت ها UFPS آنها را به طور کامل پوشش میدهد.
vp_FPWeapon
بخش Position Springs را در مؤلفه vp_FPWeapon Script در Inspector باز کنید.
این کامپوننت موقعیت اسلحه را بر روی صفحه تنظیم می کند، که بر اساس state تغییر می کند ، به عنوان مثال، زمانی که اسلحه برای بزرگنمایی حرکت می کند. Offset جایی است که اسلحه روی صفحه قرار می گیرد.
روی Play کلیک کنید و با بازی کردن با مقادیر Offset، تفنگ را به اطراف حرکت دهید.
به هر حال، زمانی که در حالت بازی هستید، مقادیر واقعی بازی را به هم نخواهید زد.
دستکاری تنظیمات در حالت بازی یک راه خوب برای آزمایش و رفع اشکال است.
اما مطمئن شوید که در حالت پلی نیستید وقتی که واقعاً میخواهید تنظیمات را تغییر دهید.
به راحتی می توانید درگیر چالش ها و تغییر دادن تنظیمات آنها شوید و فراموش کنید که هنوز در حالت بازی هستید.
برای یافتن Spring2 Stiffn و Spring2 Damp کمی به پایینتر در کامپوننت نگاه کنید ؛ اینها تنظیمات recoil تفنگ هستند.
Spring2 Stiffn الاستیک است، یا اینکه چگونه تفنگ پس از شلیک به موقعیت اصلی خود باز می گردد.
Spring2 Damp سرعتی است که لرزش ( bounce wears ) از بین می رود.
روی Play کلیک کنید و sliders را برای Spring2 Stiffn و Spring2 Damp حرکت دهید تا احساسی نسبت به کاری که انجام می دهند داشته باشید.
درست کردن این انیمیشنها ممکن است به آزمون و خطا نیاز داشته باشد، بنابراین اگر اولین تلاشهایتان باعث شد اسلحه مانند چوب پوگو پرش شود، احساس بدی نداشته باشید و به آزمون و خطاهای بیشتری بپردازید.
اکنون که خود را با Position آشنا کرده اید، وقت آن است که روی Rotation تمرکز کنید.
بخش RotationSprings را در vp_FPWeapon در Inspector باز کنید.
به مقادیر Offset نگاه کنید، که همان چیزی است که در بخش PositionSprings مشاهده کردید.
تفاوت این است که این مقادیر چرخش تفنگ را کنترل می کنند.
روی Play کلیک کنید و مقادیر Offset را به هم بزنید تا متوجه ی کاری که انجام می دهد بشوید.
حالا به این فکر کنید که وقتی آن گلوله را شلیک می کنید چگونه به نظر می رسد.
UFPS با درون یابی بین مقادیر state ، انیمیشن را در لحظه ایجاد می کند.
تنها کاری که باید انجام دهید این است که مقادیر مختلف state را در مؤلفه vp_FPWeapon تنظیم کنید ؛ بدون نیاز به وارد کردن و تنظیم انیمیشن برای این افکت. وقتی تفنگ تک تیرانداز و تفنگ ساچمه ای را اضافه کنید، تجربه عملی در این زمینه خواهید داشت.
بازی را متوقف کنید.
بخش State ها را در vp_FPWeapon در Inspector باز کنید و نگاهی به حالت های از قبل موجود و فایل های داده مرتبط با آنها بیندازید.
فایل های داده ردیابی می کنند که وقتی state تغییر می کند چه مقادیری باید در vp_FPWeapon تغییر کند.
برای مثال، نگاهی به حالت Zoom بیندازید.
روی WeaponPistolZoom دوبار کلیک کنید و به فایل اسکریپت نگاهی بیندازید ؛ در code editor پیشفرض شما برای Unity باز میشود.
باید یک فایل داده ساده با موارد زیر باشد:
ComponentType vp_FPWeapon
ShakeSpeed 0.05
ShakeAmplitude 0.5 0 0
PositionOffset 0 -0.197 0.17
RotationOffset 0.4917541 0.015994 0
PositionSpringStiffness 0.055
PositionSpringDamping 0.45
RotationSpringStiffness 0.025
RotationSpringDamping 0.35
RenderingFieldOfView 20
RenderingZoomDamping 0.2
BobAmplitude 0.5 0.4 0.2 0.005
BobRate 0.8 -0.4 0.4 0.4
BobInputVelocityScale 15
PositionWalkSlide 0.2 0.5 0.2
LookDownActive false
اینها تغییراتی هستند که باید هنگام ورود vp_FPWeapon به حالت Zoom رخ دهند.
این ممکن است کمی ترسناک به نظر برسد، اما در واقع بسیار آسان است ؛ می توانید اسلحه را در حین بازی قرار دهید و سپس یک state file را از آنجا ذخیره کنید.
vp_FPWeaponShooter
قسمت Projectile را در زیر vp_FPWeaponShooter در Inspector گسترش دهید.
این بخش شلیک تفنگ را کنترل می کند.
نرخ شلیک در واقع مدت زمان شلیک انیمیشن اسلحه است.
Tap Firing به بازیکن اجازه می دهد بدون منتظر ماندن تا پایان انیمیشن آتش شلیک کند؛ انیمیشن آتش را resets می کند.
Prefab گلوله است.
به خاطر داشته باشید که گلولهها اسکریپت مخصوص به خود را تحت vp_BulletFX دارند و میتوانید در دایکیومنت ها درباره آن اطلاعات بیشتری کسب کنید.
بخش Muzzle Flash را باز کنید.
شما می توانید art prefab و همچنین scale و position آن را پیکربندی کنید تا هر بار که بازیکن سلاح را شلیک می کند، به افکت فلاش عالی برسید.
بخش Shell را باز کنید تا تنظیماتی را مشاهده کنید که کنترل می کند وقتی Shell از تفنگ بیرون می زند چه اتفاقی می افتد.
در نهایت بخش Sound را باز کنید.
در اینجا تنظیمات صدایی را که اسلحه هنگام شلیک اسلحه با و بدون مهمات ایجاد می کند، پیکربندی می کنید.
شما همچنین متوجه یک بخش States در اینجا نیز خواهید شد.
این شبیه به بخش state برای vp_FPWeapon است.
اگر کنجکاو هستید که چگونه این کار را انجام می دهد، می توانید به سورس کد نگاه کنید، که شامل مبحث پیشرفته بازتاب است ؛ که خارج از این آموزش می باشد.
افزودن شات گان
اینبار نوبت اسلحه ی شات گان در آموزش ساخت بازی شوتر اول شخص می باشد.
حتما در بازی های شوتینگ با اسحله ی شات گان آشنا هستید.
اسلحه ای که دشمنان شما را در فاصله ای نزدیک پودر خواهد کرد.
این اسلحه یکی از قدرتمندترین اسلحه ها در بازی های شوتینگ می باشد.
برای اینکه بتوانید روی UFPS متمرکز بمانید، فقط مدل تفنگ را اضافه میکنید.
در Project browser ، 2Shotgun را تایپ کنید و پیش ساخته 2Shotgun را زیر 1Pistol GameObject در Hierachy بکشید.
ممکن است متوجه شوید که vp_WeaponShooter هیچ گزینه ای ندارد و دلیل آن غیرفعال بودن prefab است.
active box را روی 2Shotgun GameObject تغییر دهید.
ممکن است فکر کنید فقط می توانید روی play کلیک کنید و سپس 2 را فشار دهید و تفنگ ساچمه ای را دانلود کنید.
پیش ساخته SimplePlayer فقط برای اسلحه پیکربندی شده است.
برای اینکه برای سلاح های جدید کار کند، باید یک special component اضافه کنید.
روی SimplePlayer GameObject در Hierachy کلیک کنید و سپس روی Add Component در Inspector کلیک کنید.
vp_FPWeaponHandler را تایپ کرده و اسکریپت را انتخاب کنید.
این کامپوننتی است که امکان تعویض سلاح را فراهم می کند.
مقدار Start Weapon را روی 1 قرار دهید تا آن را روی اسلحه تنظیم کنید.
حالا وقتی روی Play کلیک کنید و سپس 2 را فشار دهید، اسلحه خود را با شات گان عوض می کنید.
یک چیزی مشکل دارد ؛ شما آن اسلحه را در موقعیت نسبتاً بدی قرار داده اید.
با انتخاب پیش ساخته 2Shotgun در Hierachy، کامپوننت PositionSprings vp_FPWeapon را در Inspector باز کنید و Offset را روی
(X = -0.04, Y = -0.46, Z = 4.89) تنظیم کنید.
کامپوننت RotationSprings را باز کرده و مقدار افست را روی (X = -1.09, Y = -93.3, z = 2.5) قرار دهید.
ساختار اسلحه ی شات گان به صورتی است باید مجموعه ای از گلوله ها را شلیک کند ، نه شلیک به صورت تکی مانند تپانچه.
برای اینکار ، Projectile را در vp_FPWeaponShooter باز کنید و Count را روی 10 و Spread را روی 2 قرار دهید.
MuzzleFlash را باز کنید و prefab را روی MuzzleFlashShotgun قرار دهید.
Position را روی (X = -0.08, Y = -0.24, Z = 8.88) ) قرار دهید و Scale را روی (X = 1, Y = 1, Z = 1) قرار دهید.
اگر میخواهید خودتان متوجه ی این مقادیر بشوید، کافی است Position ، MuzzleFlash را در حین بازی ویرایش کنید و پس از توقف بازی، Position را بهروزرسانی کنید ؛ muzzle flash روشن میماند تا بتوانید دقیقاً آن را قرار دهید.
قسمت Sound را باز کنید و Fire را روی ShotgunFire قرار دهید.
روی Play کلیک کنید سپس 2 را فشار دهید و چند سوراخ به هدف اضافه کنید.
زوم یک حالت ویژه است که از قبل برای RMB (دکمه سمت راست ماوس) در UFPS پیکربندی شده است.
پس از کلیک کردن، حالت بزرگنمایی را برای تمام کامپوننت هایی که برای شنیدن این تغییر تنظیم شده اند، تنظیم می کند.
می توانید حالت های بزرگنمایی سفارشی را اضافه کنید. برای تجهیز شاتگان، روی Play کلیک کنید و 2 را فشار دهید.
مقادیر Position Springs و Rotation Springs Offset را برای vp_FPWeapon تغییر دهید تا دوربین به پایین بشکه نگاه کند.
روی دکمه Save در پایین vp_FPWeapon کلیک کنید، نام فایل ShotgunZoom را بگذارید و دوباره روی Save کلیک کنید.
اکنون شما زوم را در اختیار دارید، اما شات گان نمی داند چگونه از آن استفاده کند.
بازی را متوقف کنید و روی 2Shotgun GameObject در Hierachy کلیک کنید.
vp_FPWeapon را در Inspector باز کنید و سپس کامپوننت States را باز کنید.
ShotgunZoom را به قسمت Zoom بکشید.
UFPS مقادیر شروع و پایان را می گیرد و سپس یک انیمیشن ایجاد می کند.
روی Play and Zoom with shotgun کلیک کنید تا به جایی که برای حالت زوم آن را ذخیره کرده اید متحرک می شود.
اضافه کردن یک تفنگ تک تیرانداز (Sniper)
این یکی از جذاب ترین بخش ها در آموزش ساخت بازی شوتر اول شخص می باشد.
هر بازی FPS خوب با مجموعه ای از سلاح ها همراه است تا بازیکن بتواند در موقعیت های مختلف دشمنان را از بین ببرد.
برای مواقعی که می خواهید دشمنان خود را از فاصله ی دور از بین ببرید هیچ اسلحه ای بهتر از یک تک تیرانداز نیست.
3Sniper را در Project browser search تایپ کنید و پیش ساخته 3Sniper را زیر 2Shotgun GameObject در Hierachy بکشید.
در Inspector، اسکریپت های vp_FPWeapon و vp_WeaponShooter را همانطور که قبلا انجام داده اید اضافه کنید.
با رفتن به Project browser و باز کردن پوشه ی Assets و سپس پوشه Prefabs، مدل تفنگ تک تیرانداز را به قسمت Rendering vp_FPWeapon اضافه کنید.
روی 3Sniper GameObject در Hierarchy کلیک کنید و سپس کامپوننت vp_FPWeapon را در Inspector باز کنید.
قسمت Rendering را باز کنید تا فیلد 1st Person Weapon (Prefab) نمایش داده شود.
در نهایت m24 Prefab را از Project browser به قسمت 1st Person Weapon (Prefab) بکشید.
زیر vp_FPWeapon، Position Springs را روی (X = 1.4, Y = -0.81, Z = 4.88) و Rotation Springs را روی (X = -2.7, Y = 79.62, Z = -5.01) قرار دهید.
قسمت Sound را در vp_FPWeaponShooter باز کنید و Fire را روی SniperShot قرار دهید.
اسلحه اکنون در وضعیت عملکردی قرار دارد.
روی Play کلیک کنید و 3 را فشار دهید تا خودتان نتیجه ی کار را ببینید.
مشکلی که هم اکنون وجود دارد این است که وقتی بزرگنمایی میکنید هیچ نقطهای وجود ندارد؛ افزودن بزرگنمایی دامنه (scope zoom) یک مورد عالی برای ایجاد states در حین بازی است.
وقت آن رسیده است که یک کامپوننت Sniper اضافه کنید که به بزرگنمایی کمک می کند.
این یک اسکریپت ویژه است که برای کار کردن باید به player events گوش دهد.
پوشه Scripts را باز کنید، در هر جایی کلیک راست کنید و از منوی پاپ آپ برای ایجاد یک اسکریپت C# جدید به نام Sniper استفاده کنید.
برای باز کردن آن دوبار کلیک کنید و محتوای آن را با کد زیر جایگزین کنید:
using UnityEngine;
using System.Collections;
public class Sniper : MonoBehaviour
{
//1
public vp_FPPlayerEventHandler playerEventHandler;
public Camera mainCamera;
private bool isZooming = false;
private bool hasZoomed = false;
//2
void Update()
{
if (playerEventHandler.Zoom.Active && !isZooming)
{
isZooming = true;
StartCoroutine("ZoomSniper");
}
else if (!playerEventHandler.Zoom.Active)
{
isZooming = false;
hasZoomed = false;
GetComponent().WeaponModel.SetActive(true);
}
if (hasZoomed)
{
mainCamera.fieldOfView = 6;
}
}
//3
IEnumerator ZoomSniper()
{
yield return new WaitForSeconds(0.40f);
GetComponent().WeaponModel.SetActive(false);
hasZoomed = true;
- این متغیرها ، رفرنس های به PlayerEventHandler و دوربین را پیگیری می کنند.
Booleans پرچم هایی هستند که وضعیت بزرگنمایی را دنبال می کنند. - این بخش بررسی می کند که آیا حالت بزرگنمایی فعال است یا خیر.
وقتی تفنگ زوم میشود، میدان دید را روی 6 تنظیم میکند که همان چیزی است که باعث زوم میشود. - این برنامه زمانی را دنبال می کند که انیمیشن زوم کامل می شود ؛ در این مورد بعد از 0.4 ثانیه ، مدل سلاح را پنهان می کند.
این مقدار کمی زمان برای پلیر ایجاد می کند تا قبل از انتقال به جلوه scope به پایین نگاه کند.
فایل را ذخیره کرده و به Unity برگردید. اسکریپت Sniper را به 3Sniper GameObject بکشید.
پیش ساخته SimplePlayer را روی PlayerEventHandler در کامپوننت Sniper بکشید.
سپس FPSCamera را روی قسمت Main Camera در کامپوننت Sniper بکشید.
در Hierarchy ، یک UI GameObject را خواهید یافت که با بافت SniperZoom تنظیم شده است.
به پوشه Scripts بروید و اسکریپت C# جدید دیگری ایجاد کنید.
نام آن را GameUI بگذارید. UI GameObject
را در Hierachy انتخاب کنید و سپس اسکریپت GameUI را از Project browser به Inspector بکشید.
اسکریپت GameUI را باز کنید و کد زیر را جایگزین کنید:
using UnityEngine;
using UnityEngine.UI;
public class GameUI : MonoBehaviour
{
public GameObject sniperZoom;
public vp_PlayerEventHandler playerEventHandler;
public void ShowSniperZoom()
{
sniperZoom.SetActive(true);
sniperZoom.GetComponent().enabled = true;
}
public void HideSniperZoom()
{
sniperZoom.SetActive(false);
sniperZoom.GetComponent().enabled = false;
}
}
اینها متدهای public هستند که از آنها برای نشان دادن و پنهان کردن تکسچر محدوده تیرانداز استفاده میکنید.
آنها به scope texture و event handler اشاره دارند.
اسکریپت Sniper پس از پیکربندی برای انجام این کار، اینها را فراخوانی می کند.
اسکریپت را ذخیره کرده و به Unity برگردید.
UI GameObject را در Hierarchy باز کنید. SniperZoom را به قسمت SniperZoom در Inspector بکشید سپس SimplePlayer را به قسمت PlayerEventHandler بکشید.
اسکریپت Sniper را باز کنید. این متغیر را به بالای آن اضافه کنید:
public GameUI gameUI;
اکنون اسکریپت یک رفرنس به GameUI خواهد داشت.
زیر عبارت else if (!playerEventHandler.Zoom.Active)، موارد زیر را اضافه کنید:
gameUI.HideSniperZoom();
قبل از تغییر :
else if (!playerEventHandler.Zoom.Active)
{
isZooming = false;
hasZoomed = false;
GetComponent().WeaponModel.SetActive(true);
}
بعد از تغییر :
else if (!playerEventHandler.Zoom.Active)
{
gameUI.HideSniperZoom();
isZooming = false;
hasZoomed = false;
GetComponent().WeaponModel.SetActive(true);
اکنون تکسچر زوم تک تیرانداز در حالت خارج از بزرگنمایی پنهان می شود.
در زیر
GetComponent<vp_FPWeapon>().WeaponModel.SetActive(false);
:موارد زیر را اضافه کنید
gameUI.ShowSniperZoom();
قبل از تغییر باید داشته باشید :
IEnumerator ZoomSniper()
{
yield return new WaitForSeconds(0.40f);
GetComponent().WeaponModel.SetActive(false);
hasZoomed = true;
}
بعد از تغییر :
IEnumerator ZoomSniper()
{
yield return new WaitForSeconds(0.40f);
GetComponent().WeaponModel.SetActive(false);
gameUI.ShowSniperZoom();
hasZoomed = true;
}
این خط scope texture تک تیرانداز را زمانی که تفنگ تک تیرانداز در حال زوم است نشان می دهد.
ذخیره کنید و به Unity برگردید.
3Sniper GameObject را انتخاب کنید و سپس UI GameObject را به قسمت GameUI بکشید.
همه اینها برای مخفی کردن اسلحه و نشان دادن محدوده تک تیرانداز هنگام زوم کردن بازیکن بود.
با کلیک کردن روی Play، فشار دادن 3 برای تجهیز تک تیرانداز و فشار دادن RMB برای بزرگنمایی، آن را برای پلی کردن آزمایشی ، آماده کنید.
کار می کند اما یک حالت ابتدایی دارد.
میتوانید با تنظیم آن بهگونهای که پلیر هنگام بزرگنمایی، دامنه را بهطور اجمالی مشاهده کند، آن را بهتر کنید.
روی Play کلیک کنید و 3 را فشار دهید تا تفنگ تک تیرانداز را تجهیز کنید.
Position Springs و Rotation Springs را برای 3Sniper باز کنید و با مقادیر position offset و rotation offset تا زمانی که محدوده جلوی دوربین قرار گیرد، آن را تغییر دهید.
روی دکمه Save در پایین کامپوننت vp_FPWeapon کلیک کنید.
نام فایل را SniperZoom بگذارید سپس دوباره روی Save کلیک کنید.
شما حال تنظیم وضعیت تفنگ تک تیرانداز را در هنگام بزرگنمایی به پایان رسانده اید.
در این حالت، اسلحه را به سمت بالا و جلوی دوربین حرکت دادید تا به نظر برسد که بازیکن به پایینتر از محدوده نگاه میکند، و SniperZoom جایی است که state را ذخیره کردهاید.
توجه: اگر در تنظیم یا ذخیره تنظیمات خود با مشکل مواجه هستید، ادامه دهید و این فایل SniperZoom را دانلود کنید.
از این لحظه، تنظیمات state را دارید اما هنوز باید state مورد نیاز را ایجاد کنید.
3Sniper را انتخاب کنید و vp_FPWeapon را باز کنید و سپس بخش State را باز کنید.
روی دکمه Add State کلیک کنید و در قسمت New State، کلمه Untitled را با Zoom جایگزین کنید.
فایل SniperZoom.txt را از پوشه Assets به قسمت Text Asset کامپوننت vp_FPWeapon 3Sniper بکشید.
روی Play کلیک کنید و روی دورترین هدف تمرکز کنید ، ممکن است لازم باشد به اطراف بچرخید. RMB
را فشار دهید تا زوم کنید و سپس شلیک کنید.
کار ما تمام شد و نتیجه بسیار قابل توجه است.
مهرشاد شادان مهر
مدرس سئو ، طراح سایت ، انیماتور
قهرمان زندگی شما در چند سال آینده ی شما می باشد