021-88881776

آموزش توسعه بازی‌ها با سی شارپ

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

توسعه بازی‌ها با C# و Unity

توسعه بازی‌ها با سی شارپ یکی از محبوب‌ترین روش‌های ایجاد بازی‌های مدرن است. زبان C# با ترکیب ویژگی‌های شیءگرایی، امنیت، خوانایی و کارایی بالا، به یک ابزار اصلی برای توسعه بازی در Unity تبدیل شده است. در این بخش، ابتدا با محیط Unity آشنا می‌شویم، سپس نقش C# در این موتور را بررسی کرده و در نهایت یک پروژه ابتدایی را باهم اجرا می‌کنیم.

Unity چیست و چرا باید از آن استفاده کنیم؟

Unity یک موتور بازی‌سازی چندسکویی (Multi-Platform) است که امکان توسعه بازی برای سیستم‌های مختلف مانند Windows، macOS، iOS، Android، PlayStation، Xbox و WebGL را فراهم می‌کند. این موتور توسط شرکت Unity Technologies توسعه یافته و یکی از قوی‌ترین ابزارهای موجود برای توسعه بازی‌ها محسوب می‌شود.

چرا Unity محبوب است؟

پشتیبانی از دو بعدی و سه بعدی
قابلیت کراس پلتفرم (Cross-Platform) – امکان خروجی گرفتن برای چندین پلتفرم
انعطاف‌پذیری بالا با استفاده از C#
دارای موتور فیزیک داخلی (PhysX) و انیمیشن‌سازی پیشرفته
دسترسی به Unity Asset Store – بازاری پر از مدل‌ها، انیمیشن‌ها و ابزارهای کمکی
پشتیبانی از واقعیت افزوده (AR) و واقعیت مجازی (VR)

آشنایی با محیط Unity

پس از نصب Unity Hub، می‌توانید نسخه مناسب Unity را نصب کرده و یک پروژه جدید بسازید. محیط کار Unity شامل بخش‌های مهمی است که برای توسعه بازی باید با آن‌ها آشنا شوید:

بخش‌های کلیدی محیط Unity

Scene View – نمایشگر اصلی که در آن می‌توانید اشیاء مختلف را در دنیای بازی قرار دهید و ویرایش کنید.
Game View – شبیه‌ساز اجرای بازی که خروجی نهایی را نمایش می‌دهد.
Hierarchy – لیستی از تمامی اشیائی که در صحنه قرار دارند.
Inspector – نمایش و تنظیم ویژگی‌های هر شیء انتخاب شده.
Project – شامل تمامی فایل‌ها، اسکریپت‌ها، تکسچرها و مدل‌های موجود در پروژه.
Console – برای نمایش پیام‌های خطا، هشدارها و پیام‌های Debug.
نکته: اگر تازه‌کار هستید، بهتر است چند پروژه ساده بسازید تا با این پنجره‌ها بهتر آشنا شوید.

نقش C# در Unity و مزایای آن

C# زبان برنامه‌نویسی اصلی در Unity است و از طریق آن می‌توانید هوش مصنوعی، تعاملات کاربری، کنترل شخصیت‌ها، سیستم امتیازدهی، برخورد اشیاء و سایر منطق‌های بازی را پیاده‌سازی کنید.

مزایای استفاده از C# در توسعه بازی‌ها

برنامه‌نویسی شیءگرا (OOP) – امکان ساخت کدهای مدولار و قابل نگهداری
کتابخانه‌های گسترده – مجموعه‌ای از توابع و متدهای آماده برای پردازش‌های پیچیده
امنیت بالا و جلوگیری از خطاهای رایج در حافظه
سازگاری بالا با Unity API

نکته: برای استفاده از C# در Unity، هر اسکریپت باید از کلاس MonoBehaviour ارث‌بری کند.

شروع پروژه: ایجاد یک پروژه جدید در Unity

مراحل ایجاد یک پروژه جدید
Unity Hub را باز کنید.
روی New Project کلیک کنید.
قالب مناسب (2D یا 3D) را انتخاب کنید.
نام پروژه را تعیین کرده و محل ذخیره‌سازی را مشخص کنید.
روی Create کلیک کنید و صبر کنید تا پروژه بارگذاری شود.

افزودن اشیاء به صحنه

از منوی GameObject می‌توانید اشیاء سه‌بعدی مانند Cube، Sphere و Plane یا اشیاء دوبعدی مانند Sprite را اضافه کنید.
در بخش Inspector می‌توانید ویژگی‌های این اشیاء را تغییر دهید.

افزودن یک اسکریپت C# به شیء

در Project، به Assets بروید و یک Script جدید ایجاد کنید.
نام آن را MoveObject.cs بگذارید.
روی شیء موردنظر کلیک کرده و اسکریپت را به آن اضافه کنید.
اسکریپت را باز کنید و کد زیر را وارد کنید:

using UnityEngine;

public class MoveObject : MonoBehaviour
{
    public float speed = 5f;

    void Update()
    {
        // حرکت شیء به سمت راست
        transform.Translate(Vector3.right * speed * Time.deltaTime);
    }
}

ویژگی‌های این اسکریپت:

شیء را در هر فریم به سمت راست حرکت می‌دهد.
Time.deltaTime باعث می‌شود که حرکت متناسب با نرخ فریم باشد و در سیستم‌های مختلف یکنواخت عمل کند.

افزودن کنترل کاربر به پروژه

حالا اجازه دهیم که بازیکن بتواند شیء را با کلیدهای کیبورد حرکت دهد. اسکریپت را به شکل زیر تغییر دهید:

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 5f;

    void Update()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        transform.Translate(movement * speed * Time.deltaTime, Space.World);
    }
}

ویژگی‌های این اسکریپت:

دریافت ورودی از کیبورد (Input.GetAxis(“Horizontal”) و Input.GetAxis(“Vertical”)).
حرکت شیء در جهت‌های چپ، راست، بالا و پایین.
Space.World باعث می‌شود که حرکت شیء مستقل از جهت فعلی آن باشد.

افزودن برخوردها و فیزیک به اشیاء

یکی از ویژگی‌های مهم Unity، مدیریت فیزیک و برخورد اشیاء است. برای این کار می‌توانیم یک RigidBody به شیء اضافه کنیم:

روی شیء کلیک کنید.
در Inspector، گزینه Add Component را بزنید.
Rigidbody را جستجو کرده و اضافه کنید.
مقدار Mass و Gravity را تنظیم کنید.
سپس کد زیر را برای تشخیص برخورد بنویسید:

using UnityEngine;

public class CollisionDetection : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Debug.Log("برخورد تشخیص داده شد با: " + collision.gameObject.name);
    }
}

ویژگی‌های این اسکریپت:

هنگام برخورد دو شیء، یک پیام در Console نمایش داده می‌شود.
از متد OnCollisionEnter() برای تشخیص برخورد استفاده شده است.

اصول طراحی بازی‌های دو بعدی و سه بعدی با C# و Unity

طراحی و توسعه بازی‌های ویدیویی شامل اصول و تکنیک‌های خاصی است که بسته به دو بعدی (2D) یا سه بعدی (3D) بودن بازی، تفاوت‌های مهمی دارد. توسعه بازی‌ها با سی شارپ و Unity در این دو حوزه شباهت‌ها و تفاوت‌هایی دارد که باید آن‌ها را درک کنید. در این بخش، این تفاوت‌ها را بررسی کرده و مثال‌هایی برای درک بهتر ارائه می‌دهیم.

طراحی بازی‌های دو بعدی در Unity

بازی‌های دو بعدی، به دلیل سادگی در طراحی، کنترل و مدیریت منابع، گزینه‌ای عالی برای توسعه‌دهندگان مبتدی هستند. Unity ابزارهای مختلفی را برای مدیریت Spriteها، فیزیک 2D و کنترل کاراکترها فراهم کرده است.

۱. ساخت صحنه‌های دوبعدی

در Unity، بازی‌های دو بعدی بر پایه Spriteها طراحی می‌شوند. یک Sprite در واقع تصویری است که نمایشی از اشیاء در بازی را ارائه می‌دهد. شما می‌توانید با استفاده از Sprite Renderer تصاویر را به صحنه اضافه کنید.

مراحل افزودن یک Sprite در Unity:

یک پروژه دو بعدی (2D Project) جدید در Unity ایجاد کنید.
در پوشه Assets، یک تصویر دو بعدی را وارد کنید.
این تصویر را به Scene بکشید تا یک GameObject جدید ایجاد شود.
در Inspector، یک Sprite Renderer اضافه کنید تا تصویر در بازی نمایش داده شود.
نکته: برای شخصیت‌های انیمیشنی، می‌توانید از Sprite Sheet استفاده کنید که شامل چندین فریم متحرک است.

۲. مدیریت فیزیک دوبعدی در Unity

Unity دارای موتور فیزیک 2D داخلی است که شامل قابلیت‌هایی مانند گرانش، برخورد، نیروی باد، مقاومت هوا و اصطکاک می‌شود. برای استفاده از این ویژگی‌ها:

افزودن Rigidbody 2D – برای اعمال قوانین فیزیکی به اشیاء (مثلاً افتادن یا پرتاب شدن)
استفاده از Collider 2D – برای تشخیص برخوردهای اشیاء (مثلاً زمین خوردن کاراکتر)
Jointها – برای ایجاد اتصالات بین اشیاء مانند پل‌ها و طناب‌ها

مثال: افزودن Rigidbody 2D به یک کاراکتر باعث می‌شود که تحت تأثیر گرانش قرار بگیرد و به سمت پایین بیفتد.

۳. کنترل شخصیت در بازی‌های دو بعدی با C#

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

مثال: حرکت شخصیت در بازی دو بعدی

using UnityEngine;

public class CharacterMovement2D : MonoBehaviour
{
    public float speed = 3f;

    void Update()
    {
        float move = Input.GetAxis("Horizontal");
        transform.Translate(Vector2.right * move * speed * Time.deltaTime);
    }
}

توضیح کد:

Input.GetAxis(“Horizontal”) مقدار حرکت چپ و راست را از ورودی کیبورد می‌گیرد.
Translate(Vector2.right * move * speed * Time.deltaTime); شخصیت را در جهت افقی حرکت می‌دهد.
Time.deltaTime باعث می‌شود که حرکت متناسب با نرخ فریم باشد.
نکته: برای کنترل پرش، می‌توانید یک نیروی عمودی به Rigidbody 2D اضافه کنید.

طراحی بازی‌های سه بعدی در Unity

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

۱. ایجاد صحنه‌های سه بعدی در Unity

Unity امکانات زیادی برای طراحی بازی‌های سه بعدی دارد، از جمله:

مدل‌های سه‌بعدی (3D Models) – شامل اشیاء محیطی، کاراکترها و آیتم‌های بازی
نورپردازی و سایه‌زنی (Lighting & Shading) – تنظیمات نورپردازی برای جلوه‌های بصری واقع‌گرایانه
دوربین و نمای سه بعدی (Camera & Perspective) – تنظیم دوربین برای نمایش مناسب بازی

مراحل ایجاد یک بازی سه‌بعدی:

یک پروژه سه بعدی (3D Project) جدید در Unity ایجاد کنید.
یک GameObject مانند Cube یا Sphere به صحنه اضافه کنید.
در Inspector، Material مورد نظر را به شیء اختصاص دهید.
یک نور Directional Light اضافه کنید تا محیط روشن شود.

۲. مدیریت دوربین و تنظیم نمای سه‌بعدی

در بازی‌های سه بعدی، دوربین نقش مهمی در نمایش صحنه دارد. می‌توان دوربین را ثابت یا دنبال‌کننده کاراکتر تنظیم کرد.

مثال: اسکریپت دنبال‌کننده دوربین

using UnityEngine;

public class CameraController : MonoBehaviour
{
    public Transform target;
    public float smoothSpeed = 0.125f;
    public Vector3 offset;

    void LateUpdate()
    {
        Vector3 desiredPosition = target.position + offset;
        Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
        transform.position = smoothedPosition;

        transform.LookAt(target);
    }
}

توضیح کد:

target.position + offset دوربین را پشت شخصیت قرار می‌دهد.
Vector3.Lerp باعث می‌شود حرکت دوربین نرم‌تر باشد.
LookAt(target) باعث می‌شود دوربین همیشه به سمت شخصیت نگاه کند.

۳. استفاده از فیزیک سه بعدی در Unity

Unity دارای موتور فیزیک سه‌بعدی (PhysX) است که باعث می‌شود اشیاء در بازی واقع‌گرایانه حرکت کنند، سقوط کنند و با هم برخورد داشته باشند.

ویژگی‌های فیزیکی سه بعدی در Unity:
Rigidbody – برای اعمال قوانین فیزیکی به اشیاء
Colliderها – برای تشخیص برخورد بین اشیاء
نیروها و شتاب‌ها – برای ایجاد حرکت‌های پویا در بازی

مثال: اعمال نیروی پرش به کاراکتر در یک بازی سه‌بعدی

using UnityEngine;

public class PlayerJump : MonoBehaviour
{
    public float jumpForce = 5f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
        }
    }
}

توضیح کد:

GetComponent<Rigidbody>() به Rigidbody متصل به کاراکتر دسترسی پیدا می‌کند.
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse) یک نیروی ناگهانی به سمت بالا اعمال می‌کند و باعث پرش شخصیت می‌شود.

کار با انیمیشن‌ها و رویدادهای بازی در Unity

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

در این بخش، نحوه ایجاد و کنترل انیمیشن‌ها، استفاده از سیستم Animator و مدیریت رویدادهای بازی را یاد خواهید گرفت. همچنین با ارائه مثال‌های عملی، نحوه کنترل انیمیشن‌ها و رویدادها را با C# بررسی خواهیم کرد.

۱. کار با انیمیشن‌ها در Unity

ایجاد انیمیشن‌ها در Unity

Unity دارای یک سیستم داخلی انیمیشن‌سازی است که به شما امکان می‌دهد انیمیشن‌هایی مانند حرکت، چرخش، تغییر اندازه و تغییر موقعیت را ایجاد کنید. برای اضافه کردن یک انیمیشن به یک شیء در Unity، مراحل زیر را دنبال کنید:

مراحل ایجاد یک انیمیشن در Unity

اضافه کردن یک شیء به صحنه
در بخش Hierarchy، یک GameObject مانند یک کاراکتر یا Cube ایجاد کنید.
افزودن Animator Component
روی شیء کلیک کنید و از بخش Inspector، دکمه Add Component را بزنید.
Animator را جستجو کرده و به شیء اضافه کنید.
ساخت یک Animation Clip جدید
در پنجره Animation (از طریق Window > Animation > Animation آن را باز کنید).
در این پنجره، روی Create کلیک کنید و یک Animation Clip ایجاد کنید (مثلاً Run.anim).

تنظیم حرکات شیء

در تایم‌لاین، تغییراتی مثل حرکت، چرخش یا تغییر اندازه را اعمال کنید.

افزودن Animation به Animator Controller

در پنجره Animator، می‌توانید حالت‌های مختلف انیمیشن را تنظیم کنید.
نکته: Unity به شما امکان می‌دهد که انیمیشن‌ها را از قبل ضبط کرده یا از مدل‌های آماده استفاده کنید.

۲. سیستم Animator در Unity

سیستم Animator در Unity به شما امکان می‌دهد چندین انیمیشن را مدیریت و بین آن‌ها جابه‌جا شوید. به‌عنوان مثال، یک شخصیت ممکن است دارای حالات Idle، Running، Jumping باشد و بین آن‌ها سوئیچ کند.

مراحل تنظیم Animator در Unity

یک Animator Controller جدید در بخش Assets ایجاد کنید.
این Animator Controller را به شیء مورد نظر متصل کنید.
در پنجره Animator، حالت‌های مختلف (مانند Idle و Run) را اضافه کنید.
ایجاد Transition (انتقال بین انیمیشن‌ها)
روی یک انیمیشن راست‌کلیک کرده و گزینه Make Transition را انتخاب کنید.
این ترنزیشن را به انیمیشن دیگر متصل کنید (مثلاً از Idle به Run).
از طریق اسکریپت C#، بین انیمیشن‌ها جابه‌جا شوید.

۳. کنترل انیمیشن با C# در Unity

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

مثال: کنترل انیمیشن کاراکتر با C#

using UnityEngine;

public class CharacterAnimation : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            animator.SetTrigger("Jump");
        }
        else if (Input.GetKey("left") || Input.GetKey("right"))
        {
            animator.SetBool("IsRunning", true);
        }
        else
        {
            animator.SetBool("IsRunning", false);
        }
    }
}

توضیح کد:

SetTrigger(“Jump”) باعث می‌شود انیمیشن پرش اجرا شود.
SetBool(“IsRunning”, true/false) مشخص می‌کند که شخصیت در حال دویدن است یا خیر.
اگر کاربر کلید چپ یا راست را فشار دهد، کاراکتر در حال دویدن خواهد بود.

۴. مدیریت رویدادها در Unity

رویدادهای بازی چیست؟
رویدادها (Events) در Unity شامل تعاملات مختلفی هستند که در حین اجرای بازی اتفاق می‌افتند. این رویدادها می‌توانند شامل موارد زیر باشند:

برخورد اشیاء (Collisions)
کلیک کردن روی یک شیء (Mouse Events)
ورودی‌های کاربر (Keyboard & Touch Events)
تغییرات در محیط بازی (مثلاً تغییر سطح سختی)

استفاده از توابع رویداد در Unity
Unity چندین توابع رویدادی پیش‌فرض دارد که می‌توان از آن‌ها برای واکنش به تغییرات استفاده کرد.

۱. تشخیص برخورد دو شیء در Unity

using UnityEngine;

public class CollisionDetection : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Debug.Log("برخورد تشخیص داده شد با: " + collision.gameObject.name);
    }
}

توضیح کد:

متد OnCollisionEnter() هنگامی اجرا می‌شود که یک شیء با شیء دیگر برخورد کند.
collision.gameObject.name نام شیء برخوردکننده را نمایش می‌دهد.

۲. کلیک روی اشیاء در Unity

using UnityEngine;

public class ClickDetection : MonoBehaviour
{
    void OnMouseDown()
    {
        Debug.Log("شیء کلیک شد: " + gameObject.name);
    }
}

توضیح کد:

OnMouseDown() زمانی اجرا می‌شود که بازیکن روی شیء کلیک کند.

۳. رویدادهای کیبورد در Unity

using UnityEngine;

public class PlayerInput : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.E))
        {
            Debug.Log("کلید E فشار داده شد");
        }
    }
}

توضیح کد:

Input.GetKeyDown(KeyCode.E) بررسی می‌کند که آیا کلید E فشار داده شده است یا نه.

۵. ترکیب انیمیشن و رویدادها در Unity

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

مراحل افزودن یک رویداد به انیمیشن

در پنجره Animation، کلیپ انیمیشن را باز کنید.
در تایم‌لاین، روی لحظه‌ای که رویداد باید رخ دهد، راست‌کلیک کنید و گزینه Add Event را انتخاب کنید.
یک متد در اسکریپت متصل به شیء ایجاد کنید.
مثال: اجرای یک صدا هنگام پرش شخصیت

using UnityEngine;

public class CharacterSound : MonoBehaviour
{
    public AudioSource jumpSound;

    public void PlayJumpSound()
    {
        jumpSound.Play();
    }
}

توضیح کد:

متد PlayJumpSound() را می‌توان در تایم‌لاین انیمیشن به‌عنوان یک رویداد ثبت کرد.
هر بار که شخصیت پرش کند، صدا پخش خواهد شد.

ذخیره‌سازی داده‌ها و گرافیک بازی‌ها در Unity

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

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

۱. ذخیره‌سازی داده‌ها در Unity

در بازی‌های مدرن، داده‌هایی مانند امتیاز، تنظیمات بازیکن، وضعیت مرحله‌ها، آیتم‌های خریداری‌شده و پیشرفت بازی باید ذخیره شوند تا بازیکن بتواند بعداً آن‌ها را بازیابی کند. روش‌های مختلفی برای ذخیره اطلاعات در Unity وجود دارند:

۱.۱ ذخیره‌سازی داده‌ها با استفاده از PlayerPrefs

PlayerPrefs یکی از ساده‌ترین راه‌ها برای ذخیره اطلاعات در Unity است. این روش برای ذخیره داده‌های سبک و کلید-مقداری (Key-Value) مانند تنظیمات صدا، گرافیک و امتیازات کوچک مناسب است.

مزایا:
سریع و ساده برای پیاده‌سازی
مناسب برای ذخیره تنظیمات بازیکن (مانند صدای بازی)
پشتیبانی در همه پلتفرم‌ها

معایب:
امنیت پایین (به راحتی در فایل‌های سیستم تغییر می‌کند)
مناسب نبودن برای ذخیره داده‌های حجیم و حساس

مثال: ذخیره و بازیابی امتیاز با PlayerPrefs

using UnityEngine;

public class ScoreManager : MonoBehaviour
{
    private int score = 0;

    void AddScore(int points)
    {
        score += points;
        PlayerPrefs.SetInt("PlayerScore", score);
    }

    void Start()
    {
        // بازیابی امتیاز از حافظه
        score = PlayerPrefs.GetInt("PlayerScore", 0);
    }
}

توضیح کد:

امتیاز بازیکن در PlayerPrefs ذخیره می‌شود.
در اجرای مجدد بازی، مقدار ذخیره‌شده از PlayerPrefs بازیابی می‌شود.

۱.۲ ذخیره داده‌ها با استفاده از فایل‌های JSON

اگر بخواهید داده‌های بیشتر و پیچیده‌تری را ذخیره کنید، JSON یک گزینه عالی است. JSON یک فرمت متنی ساختاریافته و خوانا است که می‌تواند مجموعه‌ای از متغیرها و داده‌های بازی را در قالب شیء ذخیره کند.

مثال: ذخیره و بازیابی اطلاعات در یک فایل JSON

using UnityEngine;
using System.IO;

[System.Serializable]
public class PlayerData
{
    public int highScore;
    public string playerName;
}

public class SaveLoadManager : MonoBehaviour
{
    private string path;

    void Start()
    {
        path = Application.persistentDataPath + "/playerdata.json";
    }

    public void SaveData(PlayerData data)
    {
        string json = JsonUtility.ToJson(data);
        File.WriteAllText(path, json);
    }

    public PlayerData LoadData()
    {
        if (File.Exists(path))
        {
            string json = File.ReadAllText(path);
            return JsonUtility.FromJson<PlayerData>(json);
        }
        return new PlayerData();
    }
}

ویژگی‌های این روش:

ذخیره‌سازی و خواندن اطلاعات بازیکن در یک فایل متنی JSON
امکان خواندن داده‌ها پس از بسته‌شدن بازی
مناسب برای ذخیره‌سازی پیشرفت مراحل و اطلاعات بازیکن

۱.۳ ذخیره‌سازی داده‌ها با استفاده از بانک‌های اطلاعاتی

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

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

ویژگی‌ها:

مناسب برای ذخیره حجم زیادی از اطلاعات
خواندن و نوشتن سریع‌تر نسبت به فایل‌های متنی
ایمن‌تر از PlayerPrefs و JSON

۲. مدیریت گرافیک بازی در Unity

کیفیت گرافیکی بازی تأثیر زیادی روی تجربه بازیکن دارد. Unity ابزارهای متنوعی برای مدیریت متریال‌ها، نورپردازی، سایه‌ها، افکت‌ها و بهینه‌سازی گرافیک فراهم کرده است.

۲.۱ مدیریت مواد (Materials) و بافت‌ها (Textures)

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

نکات مهم در استفاده از متریال‌ها و تکسچرها

استفاده از Compressed Textures برای کاهش حجم
به‌کارگیری Material Instances برای کاهش مصرف حافظه
استفاده از Shaderهای سفارشی برای افکت‌های ویژه

۲.۲ نورپردازی و سایه‌ها در Unity

نورپردازی و سایه‌ها تأثیر زیادی در واقع‌گرایی محیط دارند.

انواع نورپردازی در Unity
Directional Light – شبیه نور خورشید، مناسب برای فضاهای بزرگ
Point Light – مانند یک چراغ، نور را در همه جهات پخش می‌کند
Spot Light – مانند چراغ‌قوه، نور را به صورت مخروطی منتشر می‌کند
Area Light – مناسب برای روشنایی محیطی دقیق

نکته: برای بهینه‌سازی بازی، می‌توان از نورهای Baked به جای نورهای Realtime استفاده کرد.

۲.۳ افکت‌های ویژه و Particles در Unity

افکت‌های گرافیکی و جلوه‌های ویژه مانند انفجار، مه، جرقه و باران تأثیر زیادی روی حس بازی دارند. Unity دارای سیستم Particle System برای ایجاد این افکت‌ها است.

مثال: ایجاد یک افکت انفجار در Unity

از منوی GameObject > Effects > Particle System یک سیستم پارتیکل اضافه کنید.
مقدار Start Speed، Size و Color را تنظیم کنید.
در Inspector، گزینه Looping را غیرفعال کنید.
می‌توانید از کد زیر برای فعال‌سازی انفجار استفاده کنید:

using UnityEngine;

public class ExplosionEffect : MonoBehaviour
{
    public ParticleSystem explosion;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.E))
        {
            explosion.Play();
        }
    }
}

ویژگی‌های این سیستم:

ایجاد افکت‌های زیبا مانند دود، آتش و انفجار
قابلیت کنترل از طریق اسکریپت‌های C#

نتیجه‌گیری

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

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

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

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

آموزش توسعه بازی‌ها با سی شارپ

دیدگاه های شما

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

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