آموزش ویدئویی بازی‌سازی با Unity - جلسه چهار: حرکت دوربین
1398/02/14 14:53 , میلاد صاحب نظر

آموزش ویدئویی بازی‌سازی با Unity - جلسه چهار: حرکت دوربین

در این قسمت در مورد چگونگی حرکت دوربین و تعقیب کردن شیء توسط دوربین صحبت خواهیم کرد. انواع روش‌های حرکت دادن دوربین بررسی خواهند شد. با ما همراه باشید!

مقدمه: آشنایی با موتور بازی‌سازی Unity قسمت سوم: حرکات قسمت ششم: GAMEPLAY قسمت نهم: تغییر مراحل و انیمیشن
قسمت اول: اصول اولیه Unity قسمت چهارم: دوربین دنبال‌گر قسمت هفتم: امتیاز‌دهی (SCORE) و UI قسمت دهم: پایان بازی
قسمت دوم: برنامه‌نویسی در Unity قسمت پنجم: برخورد قسمت هشتم: Game Over  

 در قسمت قبلی به طور کامل چگونگی حرکت دادن بازیکن را مورد بررسی قرار دادیم و با موفقیت بازیکنمان را با کد نویسی به حرکت درآوردیم. اما دوربین همچنان ثابت باقی ماند و حرکت نکرد.

در این قسمت چگونگی حرکت دادن دوربین را مورد بررسی قرار می‌دهیم و حالات اول شخص و سوم شخص را به طور کامل آموزش می‌دهیم.

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

  1. تعقیب بازیکن از طریق ارث‌بری یا parenting (حالت سوم شخص)
  2. تعقیب بازیکن از طریق تعقیب موقعیت مکانی بازیکن (حالت اول و سوم شخص)

در ادامه به بررسی این دو روش خواهیم پرداخت.

  1. تعقیب بازیکن از طریق ارث بری یا parenting (حالت سوم شخص)

این روش خیلی ساده و بدون دردسر است. Uunity به ما اجازه می‌دهد تا اشیاء را به صورت تو در تو به کار ببریم. برای این منظور فقط کافی است در محیط Unity شیء Main camera را بگیرید و به درون شیء بازیکن (در ویدئو شیء player است) drag کنید. 

حالا main camera به شیء player متصل شده است یا به عبارت دیگر از آن ارث‌بری می‌کند. پس main camera الان فرزند player است. 

در این حالت دوربین در موقعیت مناسب سوم شخص پشت شیء قرار گرفته است ولی این روش اصلا مناسب نیست، چون شیء هر حرکتی بکند، دوربین هم همان حرکت را انجام خواهد داد. مثلا اگر شیء بچرخد، دوربین هم می‌چرخد. اگر به فرض شیء در حال سقوط و چرخش باشد، دوربین هم می‌چرخد و این باعث گیج شدن کاربر می‌شود.

بنابراین اگر بخواهیم حالت سوم شخص داشته باشیم، باید از روش دوم حرکت دوربین استفاده کنیم.

  1. تعقیب بازیکن از طریق تعقیب موقعیت مکانی بازیکن (حالت اول و سوم شخص)

برای اینکه دوربین بتواند موقعیت مکانی بازیکن را تعقیب کند، باید ابتدا موقعیت مکانی بازیکن را به دست آوریم و آن را به دوربین ارسال کنیم تا دوربین آن را دنبال کند.

برای این منظور به یک اسکریپت جدید برای شیء main camera نیاز داریم. بنابراین همانطور که در قسمت‌های قبلی گفته شد، main camera را انتخاب کرده و با کلیک کردن روی Add Component  یک اسکریپت جدید ایجاد می‌کنیم و روی آن دبل کلیک می‌کنیم تا وارد ویژوال استودیو شویم.

هدف ما این است که دوربین در هر فریم، موقعیت مکانی بازیکن را دنبال کند. بنابراین کدی که می‌نویسیم باید درن متد update قرار بگیرد. 

از طرف دیگر، برای اینکه بتوانیم موقعیت مکانی دوربین را با موقعیت مکانی بازیکن منطبق کنیم، به یک رفرنس به سمت بازیکن نیاز داریم.

همانطور که قبلا هم گفتیم، برای ساختن رفرنس به یک متغیر نیاز داریم. 

این متغیر باید رفرنسی به سمت موقعیت مکانی بازیکن باشد، که همانطور که اطلاع دارید، وظیفه مشخص کردن موقعیت مکانی، چرخیدن و غیره در Unity بر عهده یک Component به نام Transform است. 

بنابراین متغیرمان را به این شکل تعریف می‌کنیم:

;Public Transform Player

حالا کدهایی که در ویژوال استودیو نوشتید را save کنید و برگردید به Unity. در قسمت Componentها و در زیر اسکریپت جدیدی که ایجاد کردید باید یک جایگاه خالی با نام Player (متغیری که در ویژوال ایجاد کردید) مشاهده کنید.

حالا برای اینکه بتوانید موقعیت مکانی بازیکنتان را به دست آورید (چون این متغیر تعریف شده به سمت Transform رفرنس می‌کند)، کافی است شیء player را بگیرید و به داخل این جایگاه خالی drag کنید. 

با این کار، در هر جای کد که از Player استفاده کنید، در واقع به شیء player در فضای Unity اشاره می‌کنید. 

در نتیجه، شما لینک یا ارتباطی بین Transform شیء player و اسکریپت جدیدی که ایجاد کردید (یعنی در واقع شیء main camera) به وجود آوردید. برای به دست آوردن موقعیت بازیکن در ویژوال استودیو از کد Player.position استفاده می‌کنیم.

بنابراین کدی که در متد update می‌نویسیم به این شکل است:

;transform.position

این کد در واقع موقعیت دوربین  را به ما می‌دهد.  

نکته: اگر دقت کنید در تعریف متغیر نوشتیم Transform و در کدی که داخل متد update هست نوشتیم transform. موردی که در تعریف متغیر نوشتیم در واقع مشخص کننده موضوعی بود که متغیر Player باید به آن اشاره کند، که در این مثال آن موضوع یک Component به نام Transform از شیء main camera است.
اما در کد درون متد update، واژه transform یک کلیدواژه است که به Transform که متعلق به شیء main camera است واین اسکریپت برای آن نوشته شده است، اشاره می‌کند.. 

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

بنابراین کد بالا را به این شکل اصلاح می‌کنیم:

;transform.position=player.position

 این کد در واقع مقادیر موقعیت مکانی شیء main camera را با مقادیر موقعیت مکانی player یا بازیکنمان برابر قرار می‌دهد. کد ما از لحاظ فنی هیچ ارور و باگی ندارد. اما یک اشکال بزرگ در کار است.

اگر در این حالت بازی را play کنید مشاهده خواهید کرد که بلافاصله پس از آغاز بازی، دوربین به داخل و مرکز شیء منتقل می‌شود و حالت اول شخص به وجود می‌آید. 

مسلما انتخاب اینکه بازی خود را با دید اول شخص بسازی یا خیر، کاملا به نظر خود شما و بازی‌ای که قصد دارید بسازید بستگی دارد. اما در پروژه دوره ما، دید اول شخص اصلا مناسب نیست و هدف ایجاد یک دید سوم شخص است.

برای اینکه بتوانیم دید سوم شخص ایجاد کنیم به یک متغیر دیگر نیاز داریم که به این صورت تعریف می‌شود: 

;public vector3 offset

vector3 یک نوع داده همانند نوع‌های داده‌ای دیگری که قبلا با آن‌ها آشنا شده‌اید می‌باشد (مانند int و float که فقط عدد در خود ذخیره می‌کردند)، اما این نوع قادر است سه عدد از جنس float را در خود ذخیره کند که برای بازی ما یک گزینه عالی است چون ما هم دارای سه مقدار در سه محور X و Y و Z هستیم.

offset هم نام این متغیر است. حالا اگر Save کنید و به داخل unity بازگردید، در زیر اسکریپت جدید مشاهده خواهید کرد که یک مورد جدید با نام offset و سه محل برای ورود عدد به وجود آمده است.

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

می‌خواهیم دوربین در مرکز شیء باقی بماند پس مقدار محور X را صفر قرار می‌دهیم. می‌خواهیم کمی دوربین بالا بیاید پس مقدار محور Y را ۱ قرار می‌دهیم. و می‌خواهیم کمی از شیء فاصله بگیریم پس مقدار محور Z را برابر با منفی ۵ قرار می‌دهیم. 

حالا باید این مقادیر را به حالت فعلی دوربین (که درون شیء و در مرکز آن قرار دارد و حالت اول شخص را به وجود آورده) اضافه کنیم. پس کدی که در متد update می‌نویسیم به این شکل اصلاح می‌شود: 

;transform.position = player.position + offset

بنابراین مقادیری که در فضای unity برای offset مشخص کردید با مقادیر فعلی بازیکن (یا همان دوربین چون مساوی با موقعیت دوربین قرار گرفته شده است) جمع می‌شوند و محل دوربین متناسب با آن تغییر می‌کند.

در نتیجه اگر Save کنید و این دفعه بازی را play کنید، دوربین بدون هیچ مشکلی شیء را با دید سوم شخص تعقیب می‌کند. 

خلاصه

تا اینجای کار توانستیم با برنامه‌نویسی کمی شیء یا بازیکنمان را کنترل کنیم، چگونگی حرکت دادن دوربین و روش‌های تعقیب شیء را آموختیم و تقریبا بازی ما به حد کمالش نزدیک شده است.

در جلسه آینده در مورد برخورد اشیاء با یکدیگر بیشتر صحبت خواهیم کرد.

با MUG همراه باشید!

منبع: Brackey

 مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.
 آموزش گام به گام #C
 طبقه بندی زبان های برنامه نویسی
۷ زبان توسعه بازی Unity برای آموختن: کدام بهترین است؟
۸ بازی ساخته شده با unity توسط تیم‌های کوچک یا تک‌نفره
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامعSQL Server(جلسه۲۳:Stored Procedureها-بخش۳)
آموزش جامعSQL Server(جلسه۲۳:Stored Procedureها-بخش۳)

در جلسه قبل به بررسی عبارات کنترل جریان و cursor در SQL Server پرداختیم. کار با دستورات نام ...

۹ شغل مرتبط با تکنولوژی که نیاز به مهارت کد نویسی ندارند
۹ شغل مرتبط با تکنولوژی که نیاز به مهارت کد نویسی ندارند

برنامه‌نویسی مناسب همه نیست. برنامه‌نویسی به نوع بسیار خاصی از صلاحیت، تفکر موشکافانه و فرآیند آموزش نیاز دارد ...

آموزش مقدماتیHTMLوCSS(جلسه۲۲:سازماندهی داده با جدول–بخش۲)
آموزش مقدماتیHTMLوCSS(جلسه۲۲:سازماندهی داده با جدول–بخش۲)

در جلسه قبل، موضوع سازماندهی داده‌ها با استفاده از جداول را مطرح کردیم و با روش‌های ایجاد جدول، سازماندهی داده‌ها ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات