بازی و سرگرمی

گیمولوژی | رسانه تحلیلی بازی سازی | چگونه یک بازی چندنفره ساده در یونیتی بسازیم

(مطلب پیش رو ترجمه‌ای از مقاله سایت gamedevacademy.org همراه با تغییراتی از سوی مترجم است)

در این آموزش ما می‌خواهیم یک دموی ساده بسازیم تا یاد بگیریم چگونه از امکانات چندنفره انجین Unity استفاده کنیم. بازی ما یک Scene ساده خواهد داشت، جایی که ما یک شوتر فضایی چندنفره را پیاده‌سازی خواهیم کرد. در دموی ما، چند بازیکن قادر خواهند بود تا به یک بازی واحد وارد شوند و به دشمنانی که تصادفی ظاهر می‌شوند تیر بزنند.

برای ادامه دادن این آموزش، انتظار می‌رود که با موارد زیر آشنا باشید:

·       برنامه‌نویسی C#

·       استفاده از ادیتور یونیتی و مواردی چون وارد کردن Asset ها، ساخت Prefab و اضافه کردن کامپوننت

 

ساخت پروژه و وارد کردن Asset

پیش از آغاز به خواندن آموزش، نیاز دارید که یک پروژه جدید در یونیتی بسازید و تمام اسپرایت‌های موجود در سورس کد را Import کنید. برای انجام دادن این کار، یک پوشه به نام Sprites بسازید و تمام اسپرایت‌ها را در آن کپی کنید. بخش Inspector یونیتی به طور خودکار آن‌ها را وارد پروژه‌تان خواهد کرد.

با این حال، تعدادی از این اسپرایت‌ها در Spritesheet قرار دارند، مثل موارد مربوط به دشمنان که نیاز است از هم جدا شوند. برای این کار، نیاز است تا Sprite Mode را روی Multiple قرار دهید و اسپرایت ادیتور را باز کنید.

در اسپرایت ادیتور (که در تصویر پایین نشان داده شده)، باید منوی Slice را بازی کنید و روی دکمه Slice کلیک کنید. بخش Slice Typer هم روی Automatic قرار دهید. در نهایت هم دکمه Apply را کلیک کرده و پنجره را ببندید.

فایل‌های سورس کد

می‌توانید فایل‌های سورس کد را از طریق این لینک دانلود کنید.

 

طرح پیش‌زمینه

اولین چیزی که قرار است انجام دهیم، ساخت یک طرح پیش‌زمینه است تا تصویر پیش‌زمینه را نمایش دهیم.

می‌توان این کار را با ساخت یک تصویر(Image) جدید در Hierarchy انجام داد که این کار به طور خودکار یک Canvas خواهد ساخت (یادتان نرود اسم طرح را به BackgroundCanvas تغییر دهید).

در BackgroundCanvas نیاز است که حالت Render Mode به Screen Space – Camera تنظیم شود (یادتان باشد که دوربین اصلی خود را به آن متصل(attach) کنید.). پس از آن، حالت UI Scale Mode را روی Scale With Screen Size تنظیم کنید. با این کار طرح در پیش‌زمینه قرار خواهد گرفته و جلوی آبجکت‌های دیگر ظاهر نخواهد شد.

در بخش BackgroundImage تنها نیاز است که مسیر تصویر پیش‌زمینه را انتخاب کنید.

حالا بازی را اجرا کنید. باید تصویر پیش‌زمینه را در بازی ببینید.

مدیریت شبکه

برای داشتن یک بازی چندنفره، ما به کامپوننت‌های GameObject و NetworkManager و NetworkManagerHUD نیاز داریم. پس به شروع به ساخت آن می‌کنیم.

این آبجکت مسئول مدیریت اتصال کلاینت‌های مختلف در یک بازی است و آبجکت‌های بازی را میان تمام کلاینت‌ها سینک می‌کند. بخش Network Manager HUD یک HUD ساده را برای اتصال به بازی به بازیکنان نشان می‌دهد.

برای مثال، اگر شما همین حالا بازی را اجرا کنید، باید تصویر زیر را ببینید:

در این آموزش قرار است که ما از گزینه‌های LAN Host و LAN Client استفاده کنیم. بازی‌های چندنفره یونیتی به این طریق کار می‌کنند: ابتدا یک بازیکن بازی را به عنوان Host شروع می‌کند (با انتخاب LAN Host). یک هاست همزمان هم به عنوان کلاینت و هم به عنوان سرور کار می‌کند. سپس، دیگر بازیکنان می‌توانند به عنوان کلاینت به این هاست متصل شوند ( با انتخاب LAN Client). کلاینت به سرور متصل می‌شود، اما هیچ کد مختص سرور را اجرا نمی‌کند. بنابراین، برای تست بازی‌مان قرار است دو نمونه داشته باشیم؛ یکی به عنوان هاست و دیگری به عنوان کلاینت.

با این حال، شما نمی‌توانید دو نمونه بازی را در ادیتور یونیتی باز کنید. برای انجام این کار، نیاز است که بازی را Build کنید و نمونه اول از طریق فایل exe اجرا کنید. حالا نمونه دوم را می‌توانید از طریق ادیتور یونیتی اجرا کنید (در حالت Play Mode)

برای این که بازی خود را Build کنید، نیاز است که یک Game Scene به بیلد اضافه کنید. پس به مسیر File -> Build Setting رفته و Game Scene را به بیلد اضافه کنید. سپس می‌توانید فایل اجرایی را از مسیر File -> Build & Run ساخته و اجرا کنید. این کار یک پنجره جدید در کنار بازی باز خواهد کرد. پس از انجام این کار، می‌توانید وارد بخش Play Mode در ادیتور یونیتی شوید تا نمونه دوم بازی را اجرا کنید. این کاری است که هر بار برای تست یک بازی چندنفره باید انجام دهیم.

حرکت سفینه فضایی

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

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

بنابراین اول از همه، یک گیم‌آبجکت جدید به نام Ship بسازید و آن را به یک Prefab تبدیل کنید. تصویر زیر اجزای Prefab سفینه را نشان می‌دهد که چیزی است که الان توضیح خواهیم داد.

برای این که یک گیم آبجکت توسط NetworkManager مدیریت شود، نیاز داریم تا کامپوننت NetworkIdentity را به آن اضافه کنیم. به علاوه، چون سفینه توسط بازیکن کنترل می‌شود، باید تیک گزینه Local Player Authority را نیز قرار دهیم.

کامپوننت NetworkTransform مسئول به‌روزرسانی مختصات سفینه در سرور و تمام کلاینت‌هاست. در صورت استفاده نکردن از آن، اگر سفینه را در صفحه حرکت دهیم، مکان‌اش در صفحه‌های دیگر بازیکنان تغییر نخواهد کرد. کامپوننت‌های NetworkIdentity و NetworkTransform دو کامپوننت ضروری برای امکانات بخش چندنفره هستند.

حالا، برای به دست‌گرفتن حرکت و برخوردها، نیاز داریم تا RigidBody2D و BoxCollider2D را اضافه کنیم. این را هم اضافه کنم که BoxCollider2D یک تریگر (با مقدار پیش‌فرض True) خواهد بود، چون ما نمی‌خواهیم که برخوردها فیزیک سفینه را تحت تاثیر قرار دهد

در نهایت، اسکریپت MoveShip را اضافه خواهیم کرد که یک پارامتر سرعت خواهد داشت. اسکریپت‌های دیگر بعدتر اضافه خواهد شد و در حال حاضر همین یک مورد را داریم.

اسکریپت MoveShip بسیار ساده است. در متد FixedUpdate مختصات حرکت را از محور افقی می‌گیریم و سرعت سفینه را بر اساس آن تنظیم می‌کنیم. با این وجود، دو مورد بسیار مهم و مربوط به شبکه وجود دارد که باید توضیح داده شوند.

اول، به طور معمول تمام اسکریپت‌ها در یک بازی ساخته شده با یونیتی از MonoBehaviour برای استفاده از API آن کمک می‌گیرند. برای این که از API شبکه استفاده کنیم، اسکریپت باید به جای MonoBehaviour از NetworkBehaviour بهره بگیرد. برای انجام این کار نیاز دارید که منبع(Namespace) شبکه را (با استفاده از UnityEngine.Networking) قرار دهید.

همچنین در یک بازی چندنفره در یونیتی، یک کد یکسان در تمام سمت‌ها (چه سرور و چه کلاینت) اجرا می‌شود. برای این که هر بازیکن تنها سفینه خودش را کنترل کند و به سفینه‌های دیگر دسترسی نداشته باشد، نیاز داریم که یک موقعیت شرطی (If Condition) در ابتدای متد FixedUpdate قرار دهیم که چک کند آیا بازیکن یک بازیکن محلی است یا خیر (اگر کنجکاو هستید که بازی چگونه بدون این شرط کار می‌کند، آن را پاک کنید. خواهید دید که موقع حرکت یک سفینه در صفحه، همه آن‌ها با هم حرکت می‌کنند).

مشاهده متن اسکریپت

قبل از بازی کردن، ما هنوز نیاز داریم به NetworkManager بگوییم که Prefab سفینه همان Prefab بازیکن است. ما این کار را با انتخاب Prefab سفینه در قسمت Player Prefab در کامپوننت NetworkManager انجام می‌دهیم. با این کار، هر بار که بازیکن یک نمونه جدید از بازی را آغاز می‌کند، یک سفینه توسط NetworkManager به آن اختصاص داده می‌شود.

حالا شما می‌توانید بازی را امتحان کنید. حرکت سفینه باید بین دو طرف (کلاینت) هماهنگ باشد.

مختصات ظاهر شدن

تا حالا تمام سفینه‌ها در وسط صفحه ظاهر می‌شدند، با این حال این می‌تواند جالب باشد که چند نقطه ظهور از پیش تعریف شده داشته باشید, کاری که انجامش با API بخش چندنفره یونیتی واقعا آسان است.

ابتدا احتیاج داریم که یک گیم آبجکت جدید بسازیم تا موقعیت ظاهر شدن‌مان باشد و آن را در نقطه ظاهر شدن دلخواه قرار دهد. سپس ما کامپوننت NetworkStartPosition را به آن اضافه می‌کنیم. ما قرار است تا دو نقطه ظاهر شدن خلق کنیم؛ یکی در مختصات (-4,-4) و دیگری در مختصات (4,-4).

حالا ما احتیاج داریم که تعریف کنیم چگونه NetworkManager آن موقعیت‌ها را استفاده کند. ما این کار را با تنظیم بخش Player Spawn Method انجام می‌دهیم. دو حالت برای این بخش وجود دارد؛ حالت Random و حالت Round Robin که در حالت اول، محل ظهور سفینه به طور تصادفی از میان یکی از مختصات از پیش تعیین شده انتخاب می‌شود و در حالت دوم، به ترتیب بین مختصات می‌چرخد تا وقتی که همه آن‌ها استفاده شود و پس از آن دوباره از ابتدای لیست شروع می‌کند. در این جا ما به سراغ حالت Round Robin می‌رویم.

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

شلیک گلوله

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

اول از همه نیاز داریم تا Prefab گلوله را بسازیم؛ پس یک گیم آبجکت با نام Bullet ایجاد کرده و آن را به Prefab تبدیل می‌کنیم. برای مدیریت این مورد در شبکه، همچون سفینه به دو کامپوننت NetworkIdentity و NetworkTransform نیاز داریم. با این حال وقتی یک گلوله ایجاد می‌شود، نیازی نیست که مختصاتش در شبکه منتشر شود، چون مختصات با موتور فیزیکی به‌روز می‌شود. بنابراین میزان قسمت Network Send Rate را روی صفر می‌گذاریم تا از بارگذاری اضافی روی شبکه جلوگیری شود.

گلوله‌ها همچنین دارای سرعت هستند و بعدتر باید به دشمنان نیز برخورد کنند. بنابراین کامپوننت‌های RigidBody2D و CircleCollider2D را به Prefab اضافه می‌کنیم. لازم است دوباره یادآوری کنیم که CircleCollider2D یک تریگر (متغیر بین دو حالت فعال و غیر فعال) است.

حالا که ما Prefab گلوله را داریم، می‌توانیم یک اسکریپت برای شلیک گلوله‌ها به سفینه اضافه کنیم. این اسکریپت پارامترهایی برای سرعت گلوله و Prefab گلوله خواهد داشت.

اسکریپت ShootBullets نیز از NetworkBehaviour بهره می‌برد و در پایین نشان داده شده است. در متد به‌روزرسانی، بررسی می‌شود که آیا بازیکن دکمه Space (به عنوان دکمه شلیک) را فشار داده یا خیر و در صورت فشار دادن، متدی را فرا می‌خواند تا گلوله شلیک کند. این متد یک گلوله جدید ایجاد کرده، سرعت آن را تنظیم و پس از یک ثانیه (مدتی که طول می‌کشد تا از صفحه خارج شود) آن را نابود می‌کند.

در این جا لازم است تا چند نکته مربوط به شبکه در اسکریپت توضیح داده شود. ابتدا این که یک تگ [Command] بالای متد CmdShoot وجود دارد. این تگ و عبارت Cmd در ابتدای نام متد آن را به یک متد خاص تبدیل می‌کند که «فرمان» (Command) نام دارد. در یونیتی، فرمان متدی است که در سرور اجرا می‌شود، اگر چه در کلاینت فرا خوانده می‌شود. در این مورد، وقتی بازیکن تیری شلیک می‌کند، به جای فرا خواندن متد در کلاینت، بازی یک درخواست به سرور می‌فرستد و سرور فرمان را اجرا خواهد کرد.

مورد بعد این که در متد CmdShoot یک فراخوانی به NetworkServer.Spawn وجود دارد. متد Spawn یا همان ظاهرسازی مسئول ایجاد گلوله در تمامی نمونه‌ها و برای تمام کلاینت‌هاست. بنابراین کاری که CmdShoot انجام می‌دهد این است که یک گلوله در سرور ایجاد و سپس سرور آن را بین تمامی کلاینت‌ها تکثیر می‌کند. نکته مهم این که این امر تنها به این خاطر ممکن است که CmdShoot یک فرمان است و یک متد معمول نیست. اسکریپت مورد نظر در ادامه آمده است:

مشاهده متن اسکریپت

در نهایت نیاز داریم به Network Manager بگوییم که می‌تواند گلوله‌ها را ظاهر کند. ما این کار را با اضافه کردن Prefab گلوله به فهرست بخش Registered Spawnable Prefab انجام می‌دهیم.

حالا می‌توانید دوباره بازی را امتحان کرده و این بار به شلیک گلوله بپردازید. گلوله‌ها باید بین تمامی نمونه‌ها و کلاینت‌ها هماهنگ و همزمان باشند.

ظاهر کردن دشمنان

قدم بعد در بازی ما اضافه کردن دشمنان است.

ابتدا ما به یک Prefab برای دشمنان نیاز داریم. بنابراین یک گیم‌آبجکت جدید با نام Enemy ساخته و آن را به Prefab تبدیل می‌کنیم. همچون سفینه، دشمنان هم دارای RigidBody2D و BoxCollider2D هستند تا حرکات و برخوردها کنترل شوند. همچنین به NetworkIdentity و NetworkTransform نیاز است که توسط NetworkManager کنترل می‌شوند. در مراحل جلوتر یک اسکریپت نیز اضافه خواهیم کرد، اما تا به این جا همین کارها باید انجام شود.

حالا یک گیم‌آبجکت جدید با نام EnemySpawner می‌سازیم که یک NetworkIdentity نیز خواهد داشت. اما اینجا ما بخش Server Only را در کامپوننت انتخاب می‌کنیم. با این کار، ظاهرکننده تنها در سرور موجود خواهد بود، چون نمی‌خواهیم که دشمنان در هر کلاینت ساخته شوند. این بخش یک اسکریپت نیز خواهد داشت که دشمنان را در یک فاصله معمول ظاهر می‌کند (پارامترها شامل Prefab دشمن، فاصله ظاهر شدن و سرعت دشمن است).

اسکریپت SpawnEnemies در پایین نشان داده شده است. نکته مهم این که در این جا از یک متد جدید در یونیتی استفاده می‌کنیم که OnStartServer نام دارد. این متد بسیار شبیه OnStart است، با این تفاوت که تنها در سرور فراخوانی می‌شود. وقتی این اتفاق می‌افتد، ما InvokeRepeating را فراخوانی می‌کنیم تا متد SpawnEnemy را هر یک ثانیه یک بار فراخوانی کند (بر طبق SpawnInterval).

متد SpawnEnemy یک دشمن جدید را در یک مختصات تصادفی ایجاد خواهد کرد و از NetworkServer.Spawn استفاده می‌کند تا آن را میان نمونه‌ها و کلاینت‌ها تکثیر کند. در نهایت، دشمن بعد از ده ثانیه نابود خواهد شد.

مشاهده متن اسکریپت

قبل از امتحان بازی، نیاز داریم تا Prefab دشمن را به فهرست بخش Registered Spawnable Prefabs اضافه کنیم.

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

آسیب رساندن

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

اسکریپتی که قرار است استفاده شود ReceiveDamage نام دارد که در پایین‌تر نشان داده شده است. این اسکریپت دارای پارامترهای maxHealth و enemyTag و destroyOnDeath است؛ پارامتر اول میزان سلامتی اولیه آبجکت را تعیین می‌کند، دومی برای تعیین چیزی که باعث آسیب می‌شود به کار می‌رود. مثلا مقدار enemyTag برای سفینه، دشمنان (Enemy) و برای دشمنان، گلوله (Bullet) است. با این کار، تنها گلوله به دشمن و تنها دشمن به سفینه شما آسیب می‌زند. پارامتر آخر هم تعیین می‌کند که آیا آبجکت پس از مردن نابود می‌شود یا دوباره ظاهر می‌گردد.

مشاهده متن اسکریپت

حالا به بررسی متدها می‌پردازیم. در متد آغازین، اسکریپت مقدار currentHealth را بالاترین میزان ممکن قرار می‌دهد و مختصات مکان اولیه را نگه می‌دارد (این مختصات برای وقتی که سفینه دوباره ظاهر می‌شود به کار می‌آید). همچنین اطلاع می‌دهد که تگ [SyncVar] در بالای تعریف currentHealth قرار گرفته است. این به معنی آن است که مقدار این ویژگی باید بین تمام نمونه‌ها یکسان و هماهنگ باشد. بنابراین اگر سفینه یک بازیکن آسیب ببیند، این آسیب در سرور و کلاینت‌های دیگر نیز دیده می‌شود.

متد OnTriggerEnter2D مسئول کنترل و مدیریت برخوردهاست (چون برخوردکننده‌ها به صورت تریگر تنظیم شده‌اند). ابتدا، چک می‌کنیم که تگ برخوردکننده همان باشد که در enemyTag دنبالش هستیم تا برخوردهای در برابر آبجکت مورد نظر را کنترل کند (دشمنان در برابر سفینه و گلوله در برابر دشمنان). پس از آن متد TakeDamage را فرا می‌خوانیم و آبجکت دیگر که آسیب رسانده را نابود می‌کنیم.

متد TakeDamage در نوبت خود تنها در سرور فراخوانی می‌شود، چون که currentHealth از نوع SyncVar است. بنابراین تنها در سرور به‌روز می‌شود و بین کلاینت‌ها آن را هماهنگ می‌کنیم. به غیر از این، متد TakeDamage ساده است؛ مقدار currentHealth را کاهش می‌دهد و چک می‌کند که کمتر مساوی صفر هست یا خیر. اگر این شرط برقرار شود آن را نابود می‌کند و مقدار destroyOnDeath را True می‌کند و در این صورت، مقدار currentHealth ریست و آبجکت دوباره در صفحه ظاهر می‌شود. برای تمرین، ما دشمنان را به گونه‌ای قرار خواهیم داد که در هنگام مرگ نابود شده و سفینه را به گونه‌ای خواهیم گذاشت که پس از مرگ دوباره ظاهر می‌شوند.

آخرین متد مربوط به دوباره ظاهر شدن (Respawn) است. در این جا از یکی دیگر از امکانات مخصوص بخش چندنفره به اسم ClientRpc استفاده می‌کنیم (به تگ [ClientRpc] در بالای تعریف متد توجه کنید). این تگ در واقع عملکردی مخالف عملکرد تگ Command یا فرمان دارد؛ فرمان‌ها از کلاینت به سرور فرستاده می‌شود، اما ClientRpc در کلاینت اجرا می‌شود. حتی اگر متد از سوی سرور فراخوانی شده باشد. بنابراین وقتی نیاز است تا یک آبجکت دوباره ظاهر شود، سرور یک درخواست به کلاینت می‌فرستد تا متد RpcRespawn را اجرا کند (اسم متد باید با Rpc شروع شود) که به سادگی مختصات را به حالت اولیه بر می‌گرداند. این متد باید در کلاینت اجرا شود، چرا که ما می‌خواهیم آن را برای سفینه‌ها فراخوانی کنیم و سفینه‌ها تنها توسط بازیکن‌ها کنترل می‌شود (ما مقدار بخش Local Player Authority را در کامپوننت NetworkIdentity روی True قرار داده‌ایم).

در نهایت، نیاز است تا این اسکریپت را به Prefab های سفینه و دشمن اضافه کنیم. حواس‌تان باشد که باید تگ دشمن را برای سفینه Enemy و برای دشمن Bullet قرار دهید (احتمالا نیاز خواهید داشت تا تگ‌های Prefab ها را نیز تعریف کنید). همچنین در Prefab دشمن باید ویژگی Destroy on Death را فعال قرار دهیم.

حالا می‌توانید بازی را امتحان کرده و به دشمنان شلیک کنید. بگذارید دشمنان به سفینه شما برخورد کنند و مطمئن شوید که آیا سفینه‌ها بعد از نابودی به درستی ظاهر خواهند شد یا خیر.

 

هر گونه انتقاد یا پیشنهاد در رابطه با این مطلب را در بخش کامنت‌ها در میان بگذارید.

مقالات مرتبط

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بازی و سرگرمی

گیمولوژی | رسانه تحلیلی بازی سازی | چگونه یک متن کارتونی در فوتوشاپ درست کنیم؟

چیزی که خواهید ساخت

 

در این آموزش یاد می‌گیریم چگونه افکت متن‌های کارتونی و کمیک را به راحتی و با استفاده از نرم‌افزار فتوشاپ (یک بافت و یک استایل لایه) بسازیم.

 

ابزار مورد نیاز در این آموزش:

– فونت Brady Bunch Remastered

– بافت Red Dots

– پس‌زمینه Stars

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

 

مراحل باز کردن بک‌گراند، نوشتن و تغییر حالت دادن متن:

۱) برای اولین قدم، بعد از باز کردن فتوشاپ از مسیر File > Open بک‌گراند مورد نظرتان که به فضای کمیک و کارتون نزدیک و فرمت آن به صورت JPEG است را انتخاب کنید. در اینجا ابعاد تصویر ما 600 × 850 پیکسل است.

۲) ابزار Text و پس از آن فونت Brady Bunch Remastered را انتخاب می‌کنیم و با ابعاد حدودی 212pt  و با هر رنگی متن مورد نظرمان را می‌نویسیم.

۳) از آنجایی که برای نتیجه‌ی بهتر باید حروف به هم چسبیده‌تری داشته باشیم، متن نوشته شده را انتخاب کرده و از پنل Character مقدار به هم چسبیدگی حروف را بیشتر می‌کنیم. اگر پنل Character را نمی‌بینید، از مسیر Type > Panels > Character Panel اقدام کنید و Tracking را روی -20 قرار دهید.

۴) روی لایه‌ی متن، کلیک راست کرده و از بین گزینه‌های ظاهر شده Warp Text را انتخاب می‌کنیم. در پنجره‌ی باز شده تغییرات زیر را اعمال می‌کنیم:

●        Style: Arc/Horizontal

●        Bend: +30

●        Bend Distortion: -30

مراحل ایجاد افکت کارتونی بر روی متن:

۱) روی لایه‌ی متن دو بار کلیک می‌کنیم تا پنجره‌ی Layer Style باز شود. در این پنجره Stroke را انتخاب کرده و تنظیمات زیر را انجام می‌دهیم: 

●       Size: 10 px

●       Position: Outside

●       Blend Mode: Normal

●       Opacity: 100%

●       Fill Type: Gradient

●       Style: Shape Burst

●       Angle:

●       Check the Dither box

●       Set the Gradient with these 2 color stops:

●       First gradient stop Color #f80000 and Location at 45%

●       Second gradient stop Color #000000 and Location at 59%

برای تغییر رنگ‌های Gradient روی قسمت رنگی آن کلیک و در پنجره‌ی جدید رنگ‌های دلخواه‌مان را انتخاب می‌کنیم.

 

۲) مجددا روی لایه‌ی متن دو بار کلیک می‌کنیم تا پنجره‌ی Layer Style باز شود. این بار گزینه‌ی Inner Shadow را با جزییات زیر اضافه می‌کنیم:

●       Blend Mode: Normal with the Color #fff000

●       Opacity: 100%

●       Uncheck the Use Global Light before setting Angle: 180°

●       Distance: 3 px

●       Choke: 100%

●       Size: 0 px

●       گزینه‌ی Anti-Aliased را فعال کنید.

۳) در پنجره‌ی Layer Style این بار گزینه‌ی Satin را انتخاب کرده و جزییات آن را به صورت زیر تغییر می‌دهیم:

●       Blend Mode: Normal with the Color #fff000

●       Opacity: 100%

●       Angle: 90°

●       Distance: 2 px

●       Size: 0 px

●       گزینه‌ی Anti-Aliased را فعال کنید.

●       در صورت فعال بودن گزینه‌ی Invert آن را غیر فعال کنید.

۴) بعد از Satin نوبت به اضافه کردن Color Overlay با مشخصات زیر می‌رسد:

●       Blend Mode: Multiply

●       Opacity: 100%

●       Click on the Color box and choose the color #fff000

5) گزینه‌ی Pattern Overlay را مثل موارد قبلی از پنجره‌ی Layer Style انتخاب می‌کنیم. در این مرحله قصد داریم برای کارتونی‌تر شدن متن، از یک بافت استفاده کنیم. تغییرات زیر را لحاظ می‌کنیم:

●       Click on the Pattern box and choose the Red Dots pattern

●       Opacity: 100%

●       Scale: 100%

برای اضافه کردن طرح مورد نظر، در قسمت Pattern روی عکس مربوط به آن کلیک می‌کنیم و در پنجره‌ی باز شده طرح‌مان را انتخاب می‌کنیم. اگر طرح‌مان را پیدا نکردیم روی علامت چرخ دنده یک بار کلیک و گزینه‌ی Load Patterns را انتخاب می‌کنیم. در پنجره‌ی باز شده طرح مورد نظرمان را پیدا و گزینه‌ی Load را انتخاب می‌کنیم. توجه داشته باشید که فرمت طرح شما حتما باید .Pat باشد.

حالا برای جابه‌جا کردن طرح کافی‌ست در حالی که پنجره‌ی Pattern Overlay باز است، روی متن در صفحه کلیک راست را نگه داشته و نشانگر ماوس را حرکت دهید تا به جای مناسبی برای بافت برسید.

۶) Outer Glow افکت بعدی برای رسیدن به متن کارتونی ماست که در همان پنجره‌ی Layer Style و زیر Pattern Overlay قرار دارد. جزئیات زیر را وارد می‌کنیم:

●       Blend Mode: Normal

●       Opacity: 100%

●       Set Color of glow #fff000

●       Technique: Softer

●       Spread: 94%

●       Size: 11 px

●       گزینه‌ی Anti-Aliased را فعال کنید.

۷) برای آخرین قدم باید Drop Shadow با مشخصات زیر ایجاد کنیم:

●       Blend Mode: Multiply and pick the Color #000000

●       Opacity: 100%

●       Uncheck the Use Global Light before setting Angle: 120°

●       Distance: 8 px

●       Spread: 100%

●       Size: 20 px

●       گزینه‌ی Anti-Aliased را فعال کنید.

تبریک! کار شما به اتمام رسید.

 اگر به سبک این متن علاقه‌مند شدید و فکر می‌کنید می‌توانید آن را برای سایر متن‌ها نیز استفاده کنید، با استفاده از گزینه‌ی New Style سمت راست و بالای پنجره‌ی Layer Style آن را ذخیره کنید.

 منبع: Tutsplus.com

مقالات مرتبط

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین بررسی کنید
نزدیک
بازی و سرگرمی

گیمولوژی | رسانه تحلیلی بازی سازی | چگونه سازندگان Slay the Spire از داده‌ها برای متعادل کردن بازیشان استفاده می‌کنند

عنوان جدید استودیوی Mega Crit یک بازی Roguelike کارتی به نام Slay the Spire است که از زمان انتشار در فاز Early Access در آبان ماه سال گذشته تاکنون، موفق به جذب بیش از نیم میلیون کاربر و نقدهای بسیار مثبت از سوی منتقدین و کاربران شده که برای بازی‌ای که تنها دو نفر به صورت تمام وقت روی‌اش کار کرده‌اند، آماری در خور توجه به شمار می‌رود.

این قضیه وقتی چشم‌گیرتر می‌شود که تلفیق غیرمعمول ژانرها در بازی را در نظر بگیریم؛ متعادل‌سازی درجه سختی یک بازی کارتی به نوبه خود کاری چالش برانگیز بوده و چند تغییر کوچک می‌تواند کل استایل بازی کردن مخاطبان را تحت تاثیر قرار دهد. علاوه بر آن، باید «اتفاقات تصادفی» (Random Events) که از اصلی‌ترین خصوصیات ژانر روگ‌لایک است را نیز در نظر گرفت که این دو مورد در ترکیب با آیتم‌های تصادفی در حین بازی، یک ترکیب نامنظم را پیش روی سازنده قرار می‌دهد.

با وجود این مسائل، چگونه این استودیو توانسته بازی را چالش‌برانگیز نگه دارد و چگونه چنین بازی پیچیده‌ای را متعادل کرده‌اند؟

جوابی که سازندگان بازی Anthony Giovannetti و Casey Yano به این سوال می‌دهند یک عبارت است: «بازخورد مخاطبین». به‌طور دقیق‌تر، کاری که استودیو می‌کند جمع‌آوری اطلاعات کامل تک‌تک دست‌های بازی‌‌شده توسط مخاطبین و تبدیل این اطلاعات به تغییرات مشخص در کارت‌ها و دشمنان مورد نظر است.

طبق گفته جیوانتی، حتی در مراحل اولیه که بازی توسط بازیکنان Netrunner(یک بازی معروف کارتی) تست می‌شد نیز تیم سازنده یک سرور اندازه‌گیری ساخته بود تا هر تصمیمی که مخاطب می‌گیرد را شناسایی کند.

راه مستقیمی برای درست انجام دادن این کار وجود ندارد

جیووانتی می‌گوید: «ما تعداد زیادی کارت و همچنین تعداد زیادی حرکت و تعامل در بازی داریم، اما با وجود پیشینه عمیقی که از بازی‌های کارتی داریم، راه مستقیمی وجود ندارد که تعادل‌سازی را به صورت درست انجام دهیم. جایی میان راه با خود گفتیم امکان ندارد بتوانیم میان این همه کارت به تعادل منطقی برسیم؛ چون نیروی کافی برای انجام این کار را نداریم. پس برای حل این مشکل به استفاده از روش‌های وابسته به بررسی اطلاعات و داده متوسل شدیم. من به شخصه طرفدار پروپاقرص تصمیم‌گیری‌های داده‌محور هستم.»

در آغاز کار، تیم سازنده به طور مداوم کارت‌های جدید به بازی اضافه می‌کرد؛ ابتدا به صورت دسته‌ای، طوری که با استفاده از آن‌ها بتوان دسته‌های نمونه ساخت و سپس به طور تکی که بتوان سبک‌های مختلف بازی‌کردن را بازسازی کرد. تسترهای بازی از اضافه‌شدن کارت‌های جدید لذت می‌بردند و حتی بعضی از آنها بیش از هزاران ساعت Slay the Spire را بازی کردند که همگی به‌عنوان داده توسط سرور اندازه‌گیری دریافت شد.

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

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

«‌می‌دانستیم که یک تغییر اثرات سلسله‌واری خواهد داشت؛ چرا ‌که اگر کارتی را تغییر دهد و آن کارت جزو یک استراتژی مشخص باشد، روی کارت‌های دیگر آن استراتژی نیز تاثیر خواهد گذاشت.

بنابراین تغییرات را اعمال می‌کردیم و منتظر نظر بازیکنان می‌ماندیم. پس نظرات بازیکنان را با نظرات خود جمع می‌زدیم و آن قدر کارت‌ها را تغییر می‌دادیم تا به نتیجه دلخواه برسیم. ما ترسی از کنار گذاشتن ایده‌ها و ساخت مجدد الگوها نداشتیم؛ دیدگاه من طوری بود که موقع اعمال تغییرات در مرحله تست، فشار بیشتری وارد می‌کردم؛ برای سازنده بهتر‌ است هرگونه تغییری را در اولین فرصت اعمال کند تا نتیجه‌اش به‌سرعت معلوم شود.»

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

یانو می‌گوید: «دسته‌بندی‌ها و ویژگی‌های زیادی وجود دارد. این مهم است که بتوان یک چیز خاص در دسته‌بندی خودش قرار بگیرد. اولین باری که سرورهای اندازه‌گیری خودمان را ساختیم، تنها سه نمودار داشتیم؛ اما حالا حداقل نود نمودار داریم.»

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

یک کارت چقدر انتخاب می‌شود و چند درصد مواقع عضوی از دست برنده است؟

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

یک مثال جالب، تغییرات کارت Dual Wield است؛ کارتی که قابلیت تکثیر کارت‌های دیگر را به بازیکن می‌دهد. این کارت در مراحل اولیه ساخت بازی قدرتمند بود، اما بسیاری از ویژگی‌های خوبش به فاز Early Access راه نیافت. ابتدا تیم سازنده متوجه میزان انتخاب کم این کارت میان تسترها شد و در نتیجه، قدرت تکثیرش را از کارت بعدی دست به هر کارتی در دست تغییر دادند. از داده‌های به دست آمده کاملا مشخص بود که این تغییر کارت را بیش از حد قوی کرده و مخاطبین با استفاده از آن به راحتی پیروز می‌شدند.

جیووانتی می‌گوید: «این کارت تعادل بازی را به هم زده بود. می‌توانستید یک سری کارت را تکثیر کنید و تنها در یک نوبت یک دشمن را بکشید و به همین ترتیب به راحتی دست‌نیافتی شوید. دست‌نیافتنی شدن اصلی‌ترین چیزی‌ست که می‌خواهیم دست‌یابی به آن را سخت کنیم، چرا که دسترسی آسان‌اش تجربه بازی‌مان را بیهوده می‌کند. پس آن را تغییر دادیم تا تنها کارت‌های دسته‌بندی Skill را تکثیر کند؛ تغییری که ابتدا فکر کردیم مناسب است، اما به سرعت متوجه ایراداتش شدیم و مقداری آن را ضعیف کردیم.»

تیم سازنده همین رویکرد را نسبت به دشمنان داخل بازی دارد. برای مثال، داده‌ها نشان داد اکثر بازیکنانی که در دست‌شان کارت‌های زیادی از دسته Power دارند، در مواجهه با یکی از غولاخر‌های نهایی بازی به مشکل بر می‌خورند؛ غولاخر The Awakened One که به ازای هر کارت دسته Power که بازیکن استفاده می‌کند، قدرت ضربه‌‌‌اش بیشتر می‌شود. برای رفع این مشکل، سازنده‌ها میزان هر بار ضربه اضافه را کاهش دادند و در عوض، صدمه کلی را بیشتر کردند.

 

بعدتر با نگاه به آمار و ارقام، تیم سازنده می‌توانست ببیند که بازیکنان بیشتری می‌توانند غولاخر را شکست دهند. یانو می‌گوید: «این اولین غولاخری‌ست که بازیکنان با رسیدن به آخر بازی با آن مواجه می‌شوند؛ بنابراین نمی‌خواستیم غول ضعیفی باشد.» با تغییر در میزان آسیب، تست دوباره و تغییرات دوباره، سازندگان به مرحله‌ای رسیدند که از نتیجه راضی بودند؛ چیزی که به لطف داده‌ها به دست آمده بود.

یانو می‌گوید: «بدون این سیستم، باید افرادی را می‌آوردیم تا با شواهد تجربی بگویند که این غولاخر حالا چقدر قوی‌تر یا ضعیف‌تر است، چیزی که کاملا بر پایه نوع بازی کردن و یا شرایط دیگر است.»

البته این حرف به این معنی نیست که بازخوردهای ذهنی و تجربی بلااستفاده هستند. تیم سازنده یک سرور عمومی در Discord دارد که به بازیکنان اجازه می‌دهد تا نظرات خود را با برچسب‌هایی چون «باگ‌ها»(bugs) یا «بازخورد»(feedback) منعکس کنند. یک بات این اطلاعات را جمع‌آوری کرده و آن را به تیم انتقال می‌دهد.

داده به تنهایی کافی نیست

جیووانتی می‌گوید: «اعداد بسیار کاربردی هستند، اما به ما نمی‌گویند که هر چیزی چه حسی دارد. استفاده از موارد جدا از داده‌ها سخت‌تر اما بسیار مفید است. ما قانون سخت‌گیرانه و سریعی برای شناسایی زمان استفاده از آن را نداریم، اما یک نظر منطقی و عقلانی بسیار قابل استفاده تر از صدای تعداد زیادی مخاطب است که بدون داشتن دلیلی تقاضا می‌کنند که فلان چیز را ضعیف کنید.»

در نهایت، او می‌گوید که چونSlay the Spire  یک عنوان تک‌نفره و روگ‌لایک است، متعادل کردن کارت‌های بسیارش از بیشتر بازی‌های کارتی آسان‌تر است؛ چرا که بازیکنان با هم‌دیگر رقابت نمی‌کنند. پس نیازی به برابر بودن دست‌های طرفین نیست و تیم می‌تواند با اعمال تغییرات، افزایش میزان سرگرمی را به جای تعادل خالص به ارمغان بیاورد.

علاوه بر این، المان‌های سبک روگ‌لایک المان شانس را به بازی اضافه می‌کنند که ارزش تکرار بازی را بالا برده و بازیکنان را مجبور می‌کند تا سبک بازی خود را تغییر دهند. این مسئله که بازی در فاز Early Access هست نیز خود مفید به حساب می‌آید. جیووانتی می‌گوید: «اگر اشتباهی می‌کنیم، در عوض به صورت هفتگی پچ منتشر می‌کنیم. چون بخش‌های مختلف بازی مداوم در حال تغییر هستند، بازیکنان می‌توانند انتظار داشته باشند که تعادل بازی نیز عوض شود.»

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

منبع: Gamasutra

مقالات مرتبط

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین بررسی کنید
نزدیک
بازی و سرگرمی

گیمولوژی | رسانه تحلیلی بازی سازی | چگونه از یک گیم جم بیشترین استفاده را ببریم- قسمت سوم و پایانی

نوشته کریستر کایتیلا

در آخرین قسمت از این مقالات، به ارائه نکاتی کوچک (حدود 40 نکته) اما در عین حال مفید و کاربردی می پردازیم. الزامی وجود ندارد که تمام این موارد را رعایت کنید اما اگر آن ها را بدانید، ممکن است حتی برای یک بار مفید واقع شوند

* بعضی از گیم‌جم‌ها شما را تشویق می‌کنند که تیم تشکیل بدهید و از تواناهایی یکدیگر استفاده کنید!

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

* صدا را فراموش نکنید!

* صدا و موسیقی اغلب در گیم‌جم‌ها کم اهمیت شمرده می‌شوند، ولی بخش مهمی است که بر کیفیت کار تاثیر دارد.

* «برای رسیدن به ایده‌ای که با تم سازگار باشد: پنج ایده اول را روی کاغذ نوشته و بعد دور بیاندازید!»

* خصوصیات کیفی کلیدی که اکثر گیم‌جم‌های معروف دارند: شوخ طبعی، گرافیک ساده، کنترل ساده (به راحتی می‌توان بازی کرد).

* یک راه برای رسیدن به ساخت یک بازی خوب، « اسکرین شات تقلبی» است. اول یک ماکت بسازید، بعد کد بزنید.

* راه دیگری برای طراحی بازی: از کاغذ شطرنجی، وایت برد یا قطعه‌های برد گیم استفاده کنید.

* اول کل بازی را بدون هیچ آرتی کد بزنید: فقط مربع و دایره. وقتی بازی خوب شد قشنگش کنید.

* بر بخش‌های مهم بازی تمرکز کنید: حرکت، کنترل، راهی برای مردن، رسیدن به برد و حس بازی.

* از روند روز در بازی‌ها دوری کنید، کاملا کوچک کار کنید. بازی‌های بزرگ می‌توانند با گرافیک قدیمی پیکسلی که فقط چهار رنگ دارند کار کنند.

* با انگیزه باشید! سخت نگیرید. ناامید نشوید. چند کار را با هم انجام ندهید: یک قابلیت بازی را ساخته بعد به سراغ دیگری بروید.

* آن نور را در آخر تونل می‌بینید؟ یک قطار نیست. برای سر وقت رسیدن  کد کثیف زدن مانعی ندارد!

* در گیم جم بیدار ماندن تا صبح و کد زدن یک اتفاق معمولی است ولی یادتان باشد که به موقعش هم بخوابید!

* وقتی شک دارید: بازی بدون موتور فیزیکی و مولتی پلیر باشد. صفحه بازی بر روی شبکه چهار وجهی (بر خلاف شش وجهی) باشد (توضیح مترجم: مثل موتور game maker). ساده نگهش دار بچه. (مخفف KISS یا Keep It Simple Stupid).

* بازیکنان از نصب کردن نفرت دارند. بهتر است بازی‌تان بدون نصب اجرا شود، و نیازی به DLL یا برنامه‌های دیگری نداشته باشد! در یک کلام به سرعت اجرا شده و قابل بازی باشد.

* در همان اول یک پروتوتایپ ساده قابل بازی بسازید. در آخر پروژه همیشه مشکلات غیر قابل پیش‌بینی وجود دارند.

* به دنبال بازی‌های کوچکی باشید که امید دارید بسازید. اگر در آخر زمان داشتید ویژگی‌های جدید اضافه کنید.

* قوانین علم دیجیتال را بشکنید! اگر از شی انگاری استفاده نکنید هیچ مشکلی پیش نمی‌آید.

* در زمان صرفه‌جویی کنید. به جای این‌که دستی مرحله بزنید، کاری کنید بازی به صورت خودکار مرحله درست کند (فرکتال، تصادفی و غیره).

* چیزی که برای شما عیان است برای دیگران لزوما نیست. از دوستانتان بخواهید بازی را تست کنند. آیا آنها سریعا بازی را می‌فهمند؟

* اجازه ندهید یک باگ شما را متوقف کند، جلو بروید. به جای درست کردن آن را کامنت کنید. در عوض ویژگی‌هایی را درست کنید که کار می‌کنند.

* هکر داخل خود را ارج بنهید. قسمت‌های ضعیف را حذف کنید. ویژگی‌های اضافه را کنار بگذارید. یک کار را خوب انجام داده و حواشی را حذف کنید.

* بعضی از گیم‌جم‌ها آن قدر اجتماعی هستند که حس یک مهمانی را دارند. بازی بسازید و دوستان جدیدی پیدا کنید.

* گیر کردید؟ دوش بگیرید! ممکن است راه حل وقتی که آسوده شدید خود را نشان دهد.

* بازی پر از باگ است؟ نقطه جالبش را پیدا کرده و تبدیل به یک ویژگی کنید.

* فقط یک مرحله وجود دارد؟ اسمش را میدان جنگ بگذارید!

* تسلیحات کار نمی‌کنند؟ بازی را تبدیل به فرار از دشمنان بدون سلاح کنید!

* صدا ندارید؟ کاراکتر اصلی کر است یا در فضا!

* جالب و سرگرم کننده نیست؟ آن را به یک بازی مسخره برای به هم ریختن اعصاب بازیکنان تبدیل کنید!

* آرت زشت است؟ آن را سبک قدیمی، مدل خاص یا مسخره صدا کنید!

* بازی کند است؟ آن را تبدیل به یک استراتژی نوبتی کنید!

* داستان یا کاراکتری نیست؟ بازی آرکید است!

* گیم پلی وجود ندارد و کلا داستان است؟ بازی رمان مصور است!

* هیچ راهی برای مردن نیست؟«می‌توانید تا 60 ثانیه زنده بمانید؟»

* کد کار نمی‌کند؟ آن قدر کدها را کامنت کنید تا درست شوند!

* آن قدر خسته‌اید که نمی‌توانید بازی را تمام کنید؟ همین الان بازی را بسته و بفرستید!

* کار می‌کند ولی بد است؟ به این‌که بازی را تمام کردید افتخار کنید! بیشتر شرکت‌کنندگان نتوانستند!

* خودتان را سرزنش نکنید! نگذارید غرورتان مانع این شود که کارتان هر چقدر ناقص و بد به دیگران نشان داده نشود!

آخرین کلام

 

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

شما چیزی برای از دست دادن ندارید و ممکن است با بازی‌ ساخت خود، دوستان جدید و مهارتی بهتر، گیم جم به پایان برسد. این کار حس جدیدی از رضایتمندی ناشی از غلبه بر دیوار موانع و رسیدن به خط پایان به شما می‌دهد! به یاد داشته باشید که گیم‌جم‌ها شاد هستند. این کل قضیه است.

ناامید نشوید، سخت نگیرید. شما می‌توانید!

 

قسمت های قبلی این مقاله در گیمولوژی :

قسمت اول

قسمت دوم

مقالات مرتبط

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بازی و سرگرمی

گیمولوژی | رسانه تحلیلی بازی سازی | چگونه از یک گیم جم بیشترین استفاده را ببریم – قسمت اول

نوشته کریستر کایتیلا

 

گیم‌جم‌ها بزرگ و پر طرفدار شده‌اند. چیزی که قبلا یک اتفاق دورهمی بود- یک پروژه کوچک بازیسازی در آخر هفته توسط چند دوست- تبدیل به یک نمایش قدرت کدنویسی با هزاران شرکت کننده شده است. بسیاری سر وقت نمی رسند یا از نفس افتاده و شکست می‌خورند. بقیه به خط پایان با بازی پر از باگی می‌رسند که اصلا لذت بخش نیست. در این مقاله من چند راهکار نشان شما می‌دهم تا از این تجربه لذت برده و بازی بسازید که با افتخار نشان دوستانتان بدهید.

 

یک گیم جم چیست؟

 

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

 

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

 

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

 

تقلا در برابر یک تم عجیب نصف لذت گیم‌جم است. به خاطر داشته باشید محدودیت خلاقیت را شکوفا می‌کند!

 

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

 

البته رویدادهای تیمی، گیم‌جم‌هایی که برای مدت طولانی رخ می‌دهند (مثلا یک ماه کامل)، رویدادهایی که در مکان‌هایی عمومی با شرکت‌کنندگان زیاد هم برگزار می‌شوند ولی معمول‌ترین نوع گیم‌جم به صورت تک‌نفره در خانه در یک پایان هفته صورت می‌گیرد.

 

چه کسی در گیم‌جم شرکت می‌کند؟

 

با توجه به این‌که در هر Ludum Dare 2000 نفر و 10000 نفر در جشن افسانه‌ای بازیسازی Global Game Jam شرکت می‌کنند، به احتمال زیاد در یک گیم جم امسال هر نوع بازیسازی حداقل یک بار هم شرکت کرده است.

 

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

 

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

 

بسیاری از شرکت‌کنندگان بازیسازان مستقل 30 و چند ساله هستند که در رشته کامپیوتر مدرک دارند و در ساخت بازی تجربه دارند – ولی نگذارید این مسئله شما را دلسرد کند! جامعه بازیسازان از تازه‌کارن و حرفه‌ای‌ها استقبال می‌کند.

 

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

 

چرا در یک گیم جم شرکت کنید؟

 

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

 

اخیرا از 747 شرکت‌کننده در گیم‌جم Ludum Dare درخواست کردم بعد از اتمام بازی خود یک پرسشنامه را پر کنند. بعضی از نظرات مشترک خود شرکت‌کنندگان در اینجا آمده است.

 

 

گیم‌جم بسیار مفرح است! وقتی یک بار امتحان کنید به احتمال زیاد در آینده باز شرکت می‌کنید.

 

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

 

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

 

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

 

برخلاف تصورات، تقریبا هیچ کسی قهوه، نوشابه انرژی‌زا یا الکلی ننوشید. تقریبا هیچ کسی از برنامه‌ای برای کنترل نسخه بازی (مثل SVN) یا تکنیک‌های مدیریت زمان (مثل Pomodoro) استفاده نکرد. جالب توجه این است که کسی مشکلی با پکج‌بندی، خروجی گرفتن و ارائه بازی مشکلی نداشت.

 

پیدا کردن یک گیم‌جم

 

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

 

پدرخوانده گیم‌جم‌ها Ludum Dare است. هر ساله چندبار برگزار شده و هر ماه چند گیم‌جم کوتاه هم برگزار می‌کند. بزرگترین گیم‌جم Global Game Jam است که هر ساله در ژانویه برگزار می‌شود. همچنین صدها گیم‌جم دیگر وجود دارد که با گشت خلاقانه در گوگل می‌توانید آنها را پیدا کنید و هر هفته چند رویداد جدید اعلام می‌شود.

 

شما می‌توانید در مورد گیم‌جم‌های جدید در تقویم گیم‌جم در CompoHub مطلع شوید. Reddit، Newsground، Kongregate، Adobe و بسیاری جاهای دیگر هم گیم‌جم برگزار می کنند. شما فقط باید بگردید تا گیم‌جمی که مناسب شما است، پیدا کنید. جوینده یابنده است.

مقالات مرتبط

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بازی و سرگرمی

گیمولوژی | رسانه تحلیلی بازی سازی | چگونه از یک گیم جم بیشترین استفاده را ببریم – قسمت اول

نوشته کریستر کایتیلا

 

گیم‌جم‌ها بزرگ و پر طرفدار شده‌اند. چیزی که قبلا یک اتفاق دورهمی بود- یک پروژه کوچک بازیسازی در آخر هفته توسط چند دوست- تبدیل به یک نمایش قدرت کدنویسی با هزاران شرکت کننده شده است. بسیاری سر وقت نمی رسند یا از نفس افتاده و شکست می‌خورند. بقیه به خط پایان با بازی پر از باگی می‌رسند که اصلا لذت بخش نیست. در این مقاله من چند راهکار نشان شما می‌دهم تا از این تجربه لذت برده و بازی بسازید که با افتخار نشان دوستانتان بدهید.

 

یک گیم جم چیست؟

 

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

 

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

 

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

 

تقلا در برابر یک تم عجیب نصف لذت گیم‌جم است. به خاطر داشته باشید محدودیت خلاقیت را شکوفا می‌کند!

 

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

 

البته رویدادهای تیمی، گیم‌جم‌هایی که برای مدت طولانی رخ می‌دهند (مثلا یک ماه کامل)، رویدادهایی که در مکان‌هایی عمومی با شرکت‌کنندگان زیاد هم برگزار می‌شوند ولی معمول‌ترین نوع گیم‌جم به صورت تک‌نفره در خانه در یک پایان هفته صورت می‌گیرد.

 

چه کسی در گیم‌جم شرکت می‌کند؟

 

با توجه به این‌که در هر Ludum Dare 2000 نفر و 10000 نفر در جشن افسانه‌ای بازیسازی Global Game Jam شرکت می‌کنند، به احتمال زیاد در یک گیم جم امسال هر نوع بازیسازی حداقل یک بار هم شرکت کرده است.

 

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

 

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

 

بسیاری از شرکت‌کنندگان بازیسازان مستقل 30 و چند ساله هستند که در رشته کامپیوتر مدرک دارند و در ساخت بازی تجربه دارند – ولی نگذارید این مسئله شما را دلسرد کند! جامعه بازیسازان از تازه‌کارن و حرفه‌ای‌ها استقبال می‌کند.

 

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

 

چرا در یک گیم جم شرکت کنید؟

 

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

 

اخیرا از 747 شرکت‌کننده در گیم‌جم Ludum Dare درخواست کردم بعد از اتمام بازی خود یک پرسشنامه را پر کنند. بعضی از نظرات مشترک خود شرکت‌کنندگان در اینجا آمده است.

 

 

گیم‌جم بسیار مفرح است! وقتی یک بار امتحان کنید به احتمال زیاد در آینده باز شرکت می‌کنید.

 

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

 

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

 

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

 

برخلاف تصورات، تقریبا هیچ کسی قهوه، نوشابه انرژی‌زا یا الکلی ننوشید. تقریبا هیچ کسی از برنامه‌ای برای کنترل نسخه بازی (مثل SVN) یا تکنیک‌های مدیریت زمان (مثل Pomodoro) استفاده نکرد. جالب توجه این است که کسی مشکلی با پکج‌بندی، خروجی گرفتن و ارائه بازی مشکلی نداشت.

 

پیدا کردن یک گیم‌جم

 

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

 

پدرخوانده گیم‌جم‌ها Ludum Dare است. هر ساله چندبار برگزار شده و هر ماه چند گیم‌جم کوتاه هم برگزار می‌کند. بزرگترین گیم‌جم Global Game Jam است که هر ساله در ژانویه برگزار می‌شود. همچنین صدها گیم‌جم دیگر وجود دارد که با گشت خلاقانه در گوگل می‌توانید آنها را پیدا کنید و هر هفته چند رویداد جدید اعلام می‌شود.

 

شما می‌توانید در مورد گیم‌جم‌های جدید در تقویم گیم‌جم در CompoHub مطلع شوید. Reddit، Newsground، Kongregate، Adobe و بسیاری جاهای دیگر هم گیم‌جم برگزار می کنند. شما فقط باید بگردید تا گیم‌جمی که مناسب شما است، پیدا کنید. جوینده یابنده است.

مقالات مرتبط

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا