
سی شارپ یا سی پلاس پلاس؟ رقابت جدی در قلب موتورهای بازی سازی
یادگیری یک زبان برنامه نویسی نیاز به زمان و تلاش زیادی داره، مخصوصا برای کسی که تازه وارد صنعت توسعه شده. پس طبیعیه که قبل از اینکه هفته ها زمان برای یادگیری صرف بشه، زبان های برنامه نویسی مختلف و پلتفرم هایی که از اون زبان ها استفاده میکنن با هم مقایسه بشن.
وقتی صحبت از انتخاب بین #C و ++C میشه، این تفاوت میتونه مسیر شغلی شما رو تعیین کنه. هر دو زبان #C و ++C سال هاست که وجود دارن و به عنوان ستون فقرات بسیاری از پروژه های سرگرمی و تجاری در صنعت بازی و واقعیت مجازی/افزوده (VR/AR) استفاده میشن.
از ابتدا، #C یکی از زبان های اسکریپت نویسی اصلی در پلتفرم Unity بوده، در حالی که ++C پایه ای برای Unreal Engine و خیلی از موتورهای بازی سازی دیگه هست.
در این مطلب قراره در مورد تفاوت های این دو زبان برنامه نویسی، ویژگی های اصلی اون ها و اینکه چطور یکی رو متناسب با نیاز خودتون انتخاب کنید صحبت کنیم.
معرفی کلی زبان های برنامه نویسی #C و ++C
#C یک زبان سطح بالا، شی گرا، و چند منظوره هست که بر اساس زبان C ساخته شده و ساختارش مبتنی بر مؤلفه (Component-Oriented) هست. #C در سال 2000 توسط مهندس نرم افزار دانمارکی Anders Hejlsberg و تیمش در مایکروسافت به عنوان بخشی از معماری NET. توسعه داده شد. در حال حاضر #C به نسخه نهم خودش رسیده.
(یه پیشنهاد جذاب): رؤیای ساخت بازی داری؟ یک مجموعه 0 تا 100 و پروژه محور با مدرس های متخصص حرفه ای برات آماده کردیم که میتونی باهاش خیلی سریع رویاتو به واقعیت تبدیل کنی! پس بهت پیشنهاد میکنم همین حالا از این مجموعه استفاده کنی، چون تمام آموزش های لازم برای یادگیری بازی سازی رو با تخفیف های ویژه در اختیار داری! برای شروع، اینجا کلیک کن.
امروزه #C زبان اسکریپت نویسی غالب در پلتفرم Unity که با نام Unity3D هم شناخته میشه هست چون دو زبان جایگزین اون یعنی Boo و UnityScript در سال 2017 کنار گذاشته شدن.
UnityScript که نسخه ای از JavaScript مخصوص Unity بود، به دلیل اینکه فقط 3.6 درصد از پروژه ها ازش به صورت گسترده استفاده میکردن، علی رغم زمان زیادی که صرف پشتیبانی ازش میشد، از رده خارج شد.
علاوه بر C# ،Unity به طور گسترده برای توسعه اپلیکیشن های دسکتاپ و سرور در سیستم عامل ویندوز استفاده میشه.
++C یک زبان سطح پایین تر و چند منظوره هست که اون هم مثل #C به عنوان توسعه ای از زبان C ساخته شده و به همین دلیل گاهی بهش C با کلاس ها (C with classes) هم میگن. ++C در آزمایشگاه Bell توسط برنامه نویس دانمارکی Bjarne Stroustrup توسعه داده شد.
اون نزدیک به دو دهه روی ++C کار کرد تا اینکه این زبان در سال 1998 استاندارد شد. با گذشت زمان، ++C به شکل قابل توجهی پیشرفت کرد و الان ویژگی های شی گرا، عمومی (Generic) و تابعی (Functional) رو با توانایی مدیریت حافظه در سطح پایین ترکیب میکنه.
جدیدترین نسخه این زبان C++ 23 هست و طبق برنامه هر سه سال نسخه جدیدی منتشر میشه.
هم Unity و هم Unreal Engine در کد منبع خودشون از ++C استفاده میکنن: Unity بخشی ازش با ++C و #C نوشته شده، در حالی که Unreal Engine کاملاً با ++C نوشته شده.
++C به طور گسترده برای توسعه موتورهای بازی پیشرفته و اپلیکیشن های خدماتی حساس که استفاده بهینه از منابع و عملکرد بالا در اون ها اولویت داره استفاده میشه.
اصلا لازم هست زبان برنامه نویسی یاد بگیرید؟
اینکه یادگیری یک زبان برنامه نویسی برای شما لازمه یا نه، کاملا به اهدافی که دنبال می کنید بستگی داره.
اگه قراره وارد حوزه XR (واقعیت افزوده و واقعیت مجازی) به عنوان یه طراح یا طراح بازی بشید، یادگیری کدنویسی الزامی نیست اما قطعاً کمک بزرگی میکنه تا بتونید ارتباط بهتری با توسعه دهنده ها برقرار کنید. درک اینکه کد چطور کار میکنه، باعث میشه بهتر بفهمید چه چیزهایی ممکنه و چه چیزهایی هزینهبر هستن.
زمانی که توسعه دهنده ها و افراد غیر فنی با هم صحبت میکنن، تفاوت در انتظارات یکی از دلایل اصلی تأخیر پروژه یا برداشت اشتباه از نیازهاست. یاد گرفتن یه مقدار کدنویسی کمک میکنه خیلی از مشکلات قبل از اینکه خودشونو توی نسخه نهایی نشون بدن، پیشگیری بشن.
(یه پیشنهاد هیجان انگیز): تا حالا فقط بازی میکردی ولی حالا وقتشه که خودت بازی ساز باشی و دست به خلق دنیایی بزنی که هر گوشه اش بازتاب خلاقیت تو باشه. پس بهت پیشنهاد میکنم همین حالا آموزش از پایه تا پیشرفته و کاربردی آنریل انجین رو با تخفیف ویژه تهیه کنی و از گیمر به بازی ساز حرفه ای تبدیل بشی! برای ورود به دوره اینجا رو کلیک کن.
اما با این حال، خوبه بدونید که هم Unreal Engine و هم Unity این امکان رو میدن که بدون نوشتن حتی یه خط کد هم بتونید یک اپلیکیشن بسازید و منتشر کنید.
Unreal Engine یه سیستم به اسم Blueprint داره که میتونید با استفاده از اون کل منطق اپلیکیشن خودتون رو بسازید. فقط کافیه یک سری نود تصویری رو به هم متصل و پیکربندی کنید.

اگرچه عملکرد توابعی که با Blueprint در Unreal Engine طراحی میشن ممکنه کمی کندتر باشه (مثلا در مواقعی که با داده های زیاد یا حلقه های فشرده سروکار دارید) نسبت به کد خالص ++C اما نمونه های شناخته شده ای از بازی ها و اپلیکیشن هایی وجود دارن که به طور کامل با استفاده از Blueprint ساخته شدن.
موتور بازی Unity به صورت پیش فرض سیستمی شبیه به Blueprint ارائه نمیده اما پلاگین هایی مثل Bolt Visual Scripting و Nottorus عملکرد مشابهی رو شبیه سازی میکنن.
برای مطالعه بیشتر در زمینه ویرایشگر بصری Blueprints، پیشنهاد میشه مقاله «اسکریپت نویسی بصری با Blueprints» رو مطالعه کنید.
در همین حال، ابزارهایی مثل Unity MARS توسعه اپلیکیشن های AR مبتنی بر موقعیت مکانی رو ساده تر میکنن. به عنوان مثال، با استفاده از Unity MARS میتونید نمونه های اولیه AR رو به صورت Real-time با کد کمتر بسازید چون این ابزار یه جریان کاری بصری ارائه میده و امکان کشیدن مستقیم محتوا به فید دوربین یا صحنه مجازی برای ویرایش بعدی رو فراهم میکنه.
اگه واقعاً قصد دارید توی حوزه XR یا توسعه بازی با Unity یا Unreal Engine به صورت حرفه ای فعالیت کنید، یادگیری زبان برنامه نویسی مربوطه نه تنها به شدت توصیه میشه، بلکه یک مهارت ضروریه.
کدنویسی با ++C یا #C به شما این امکان رو میده که راهکارهای اختصاصی ایجاد کنید که هنوز مستند نشدن، اپلیکیشن هاتون رو برای عملکرد بهتر بهینه سازی کنید، کدهای خارجی رو برای صرفه جویی در زمان توسعه ادغام کنید و کنترل کامل روی نحوه عملکرد اپلیکیشن داشته باشید.
مقایسه زبان برنامه نویسی #C با ++C
در ادامه، زبان های برنامه نویسی دو موتور محبوب بازی سازی، Unity (با #C) و Unreal Engine (با ++C) را از جنبه های کلیدی مقایسه میکنیم و در پایان نیز جدولی برای مقایسه سریع ارائه شده است.
دامنه پروژه (Project Scope)
سال ها Unity به عنوان انتخاب پیش فرض برای توسعه بازی های مستقل یا DIY (خودت بساز) شناخته میشد، در حالی که Unreal Engine به خاطر سابقه طولانی استفاده در بازی های AAA برای پروژه های بزرگ مقیاس، مناسب تر در نظر گرفته میشد.
اگرچه هر دو موتور طی سال ها پیشرفت کردن و نشون دادن که میشه باهاشون پروژه هایی با مقیاس های مختلف توسعه داد، هنوز هم چند عامل وجود داره که باعث میشه محیط ++C در Unreal Engine برای پروژه های سنگین تر یا فنی تر مناسب تر باشه.
دلیلش:
1. کد ++C میتونه سریع تر و بهینه تر باشه.
چون ++C اجازه مدیریت دستی حافظه رو میده و مستقیماً به کد ماشین کامپایل میشه، برنامه های بزرگ مقیاس میتونن برای حداکثر عملکرد بهینه بشن، در حالی که با #C در Unity رسیدن به این سطح از کارایی ممکن نیست
2. کد ++C در Unreal Engine متن باز (Open-source) هست.
برخلاف Unity که فقط بخش مدیریت شده #C به صورت مرجع و فقط برای مشاهده در دسترس عموم قرار گرفته (بدون اجازه استفاده یا تغییر)، کد منبع Unreal Engine به طور کامل برای دسترسی و تغییر بازه و این موضوع یکی از الزامات برای پروژه های AAA محسوب میشه
نکته: دسترسی به کد منبع Unity در سطح C++/C فقط در پلن های Pro و Enterprise از سالی 1800 دلار به ازای هر صندلی کاربر فراهم میشه.
محبوبیت و جامعه کاربری (Popularity and Community)
طبق شاخص TIOBE که میزان محبوبیت عمومی زبان های برنامه نویسی رو نشون میده، هر دو زبان ++C و #C در بین 5 زبان محبوب برتر قرار دارن. در این بین، ++C با سهم 7.36 درصدی کمی رایج تر از #C با 5.14 درصد هست.
برای مطالعه بیشتر در زمینه دلایل محبوبیت Unreal، پیشنهاد میشه مقاله «چرا Unreal Engine انقدر محبوبه؟» رو مطالعه کنید.
در عین حال، ++C پرکاربردترین زبان برنامه نویسی برای ساخت موتورهای بازی به حساب میاد، به طوری که تقریباً هر موتور AA حداقل به صورت جزئی با استفاده از ++C نوشته شده.
در ادامه، لیستی از موتورهای بازی محبوبی که با ++C توسعه داده شدن رو میبینید:
- CryEngine
- Lumberyard
- Source Engine
- Unreal Engine
- G3D Innovation Engine
- IrrLicht
- Urho3D
- Toy Engine
- Torque3D
- Unigine
- Shiva
- Godot
- LumixEngine
- Banshee Engine
- idTech
- Leadwerks
- Panda3D
- Esenthe
- PhyreEngine
برای مقایسه، این ها موتورهایی هستن که با #C توسعه داده شدن:
- Xenko
- Wave
- Duality
- Otter2D
با این حال، تعداد زیاد پروژه هایی که با Unity ساخته شدن باعث شده #C یکی از پرکاربردترین زبان های برنامه نویسی در توسعه بازی بشه. طبق اطلاعات وبسایت Unity، بیش از 50 درصد از بازی ها روی پلتفرم های PC، موبایل و کنسول با Unity ساخته شدن. اگه فقط درباره XR صحبت کنیم، Unity حدود 60 درصد از کل محتوای AR/VR رو به خودش اختصاص داده.
در سال 2018، جامعه Unreal Engine شامل حدود 7 میلیون توسعه دهنده و طراح بود، در حالی که Unity در سال 2020 گزارش داد که 1.5 میلیون سازنده فعال ماهانه روی پلتفرمش فعالیت دارن.
با توجه به همه این اطلاعات میشه گفت مقایسه بین ++C و #C از نظر محبوبیت در صنعت توسعه بازی، برای سال های آینده رقابت نزدیکی خواهد داشت یا به زبان ساده تر: با انتخاب هیچ کدوم اشتباه نمیکنید.
شیب یادگیری (Learning Curve)
زبان #C به دلایل مختلفی یادگیری ساده تری نسبت به ++ C داره:
سینتکس راحت تر: #C یک زبان سطح بالاتره و سینتکس اون نسبت به ++ C کمتر مستعد خطا هست و در کل یادگیری راحت تری داره.
حاشیه خطای بیشتر: #C به صورت خودکار مدیریت حافظه (Garbage Collection) رو انجام میده که این ویژگی کمک میکنه برنامه نویس های مبتدی دچار مشکلاتی مثل نشت حافظه (Memory Leak) نشن و زمان کمتری صرف رفع خطاها بکنن. در مقابل، ++ C معمولاً نیاز به مدیریت دستی حافظه داره که احتمال خطا در اون بالاتره.
آموزش های زیاد مخصوص #C در Unity: جامعه Unity بیشتر پذیرای توسعه دهنده های مبتدی در زمینه #C هست. Unity بیشتر در پروژه های مستقل (Indie) و DIY استفاده میشه که برای کسی که تازه وارد دنیای توسعه بازی شده جذابه.
مثال تخصیص حافظه در ++C
pch یک اشاره گر به آرایه ای از char با اندازه [BUFFER_SIZE] هست. اگه فراموش کنید حافظه اختصاص داده شده به این آرایه رو آزاد کنید، دچار نشت حافظه میشید.
char \*pch = new char\[BUFFER_SIZE\];
در #C نیازی به چنین کدی نیست چون تمام تخصیص و آزادسازی حافظه توسط ماشین مجازی به صورت خودکار انجام میشه.
Garbage Collection
Garbage Collection به فرآیند بازیابی حافظه ای گفته میشه که در حال حاضر توسط قسمت هایی از اپلیکیشن استفاده نمیشه.
یکی از تفاوت های اصلی بین #C و ++C اینه که کد #C روی یک ماشین مجازی اجرا میشه که دارای سیستم Garbage Collection خودکار هست اما در ++C توسعه دهنده باید مدیریت حافظه رو خودش انجام بده.
این تفاوت در سطح زبان باعث تفاوت هایی در توسعه اپلیکیشن با Unity یا Unreal Engine میشه:
- Unity از نسخه تغییر یافته Mono به عنوان کامپایلر مجازی خودش استفاده میکنه و توسعه دهنده های Unity نمیتونن خیلی روی مدیریت حافظه کنترل داشته باشن جز اینکه به سیستم GC داخلی Mono تکیه کنن، که همیشه هم بهینه نیست
- Unreal Engine 4 هم دارای سیستم Garbage Collector هست که توسط Epic طراحی شده. اما توسعه دهنده های Unreal این امکان رو دارن که کلاً از GC داخلی استفاده نکنن و به جای اون از روش های استاندارد مدیریت منابع استفاده کنن
مقایسه مدیریت حافظه در ++C و #C
در نهایت این مقایسه به میزان تجربه توسعه دهنده برمیگرده. توسعه دهنده های باتجربه ++C کنترل خیلی بیشتری روی منابع سیستم و سخت افزار دارن و به همین دلیل میتونن به سطح بالایی از کارایی برسن ولی در عین حال باید خیلی مراقب نشت های حافظه باشن که پیگیری اون ها بسیار سخت و زمان بره.
از طرف دیگه، توسعه دهنده های کم تجربه باید به راهکارهای از پیش ساخته شده مثل GC تکیه کنن که در عوض کنترلشون روی عملکرد برنامه کمتر میشه.
هشدارهای کامپایلر (Compiler Warnings)
در هر دو زبان، هنگام کامپایل ممکنه هشدارهایی دریافت کنید اما ردیابی خطاهای زمان اجرا (Runtime Errors) در ++C سخت تره چون توسعه دهنده خودش به صورت مستقیم حافظه رو مدیریت میکنه.
قیمت گذاری (Pricing)
هر دو زبان برنامه نویسی ++C و #C به صورت رایگان در دسترس هستن اما اگه قصد دارید با Unity اپلیکیشن توسعه بدید، میتونید از لایسنس سالیانه 1800 دلاری به ازای هر نفر استفاده کنید که بهتون دسترسی به کد منبع C/C++ Unity رو میده.
برای مطالعه بیشتر در زمینه راه های پول سازی از Unreal، پیشنهاد میشه مقاله «درآمدزایی از آنریل انجین» رو مطالعه کنید.
در مقابل، اگه قصد دارید با Unreal Engine 4 و ++C یک محصول تجاری منتشر کنید، باید 5 درصد حق امتیاز (Royalty) برای محصولاتی که درآمد ناخالص بالای 1,000,000 دلار داشتن پرداخت کنید.
رابط کاربری (Interface)
هم Unity و هم Unreal Engine 4 از ویرایشگر کد Visual Studio به صورت داخلی پشتیبانی میکنن.
در Unreal Engine 4، فایل های کد میتونن مستقیماً از طریق Visual Studio ساخته بشن و از طریق Solution Explorer به شکل معمول به پروژه بازی اضافه بشن.
همچنین میتونید فایل های کد رو مستقیماً داخل پوشه های مربوطه خارج از Visual Studio قرار بدید و فایل های پروژه و Solution به صورت خودکار دوباره ساخته میشن.

علاوه بر این، یک ابزار ویرایشگر کد داخلی (Code Editor) هم در Unreal Engine 4 وجود داره که به توسعه دهنده ها اجازه میده کد ++C رو مستقیماً داخل محیط UE4 ویرایش کنن. البته این ابزار در حال حاضر در حالت آزمایشی (Experimentation Mode) قرار داره.
به صورت پیش فرض، Unity با Visual Studio ادغام شده و هر بار که بخواید اسکریپت های #C در Unity رو ویرایش کنید، به راحتی میتونید از طریق همین ویرایشگر کد بازشون کنید.

شما همچنین میتونید هر ویرایشگر کدی که دوست دارید رو از بخش External Tools در تنظیمات Unity انتخاب کنید (مسیر: Unity > Preferences > External Tools > External Script Editor).
فرصت های شغلی (Job Prospects)
در سایت Indeed.com تعداد موقعیت های شغلی با عنوان “Unreal Engine” تقریباً 10 برابر بیشتر از موقعیت های شغلی Unity هست (1800 در مقابل 170)، در حالی که تعداد توسعه دهنده های مورد نیاز برای Unreal Engine تقریباً دو برابر Unity هست (1084 در مقابل 664).
این تفاوت ممکنه به این دلیل باشه که Unreal Engine معمولاً در پروژه های بزرگ و AAA استفاده میشه که به تیم های بزرگ تر و نیروهای بیشتر نیاز دارن.
از طرف دیگه، بازار بزرگ تری برای اپلیکیشن های XR ساخته شده با Unity وجود داره چون سرعت بالای نمونه سازی (Prototyping)، سازگاری با پلتفرم های مختلف و تمرکز بر موبایل از عوامل رشد سریع Unity هستن.
مقایسه کد (Code Comparison)
از اونجایی که هر دو زبان ++C و #C به عنوان توسعه هایی از زبان C ساخته شدن و هر دو مبتنی بر کلاس هستن (Class-Based)، ممکنه هنگام مقایسه کدهاشون شباهت هایی مشاهده کنید.
در ادامه یک مثال از تعریف کلاس در #C میبینید:

در ادامه یک مثال از تعریف کلاس در ++C میبینید:

همونطور که قبلاً هم اشاره کردیم، تفاوت اصلی در کدها زمانی بیشتر به چشم میاد که به سراغ وظایف سطح بالاتری مثل مدیریت حافظه و استفاده از اشاره گرها (Pointers) برید (در حالی که در ++C استفاده از اشاره گر رایجه، #C اصلاً از اشاره گر استفاده نمیکنه).
خلاصه ای از مزایا و معایب #C و ++C
مزایای #C:
- یادگیری ساده تر
- مناسب تر برای پروژه های مستقل (Indie) و DIY
- به طور گسترده در اپلیکیشن های مایکروسافت استفاده میشه
- هزینه توسعه پایین تر
مزایای ++C:
- رایج ترین زبان در پروژه های AAA و موتورهای بازی سطح بالا
- کنترل بیشتر روی مدیریت منابع اپلیکیشن و دسترسی به کد منبع موتور
معایب #C:
- کنترل کمتر روی عملکرد اپلیکیشن
- کاربرد محدود خارج از Unity و زیرساخت مایکروسافت
معایب ++C:
- احتمال خطا بالاتر
- نیاز به تجربه بیشتر برای بهره گیری کامل از قابلیت ها
- توسعه با ++C معمولاً به نیروهای حرفه ای تر نیاز داره و هزینه بیشتری داره
کدوم زبان رو اول یاد بگیرید؟
انتخاب زبان اولتون کاملاً به اهداف شما بستگی داره:
- اگه میخواید بازی خودتون رو بسازید، یه اپ موبایل تولید کنید یا تازه وارد دنیای توسعه بازی شدید، Unity و #C محیط ساده تر و دوستانه تری دارن و از همون روز اول میتونید شروع به ساخت پروژه های ساده کنید
- اگه قبلاً تجربه برنامه نویسی دارید یا قصد دارید وارد یه استودیوی بازی سازی بزرگ بشید و روی پروژه های AAA کار کنید، ++C انتخاب مناسب تریه چون بازدهی بیشتری برای وقت صرف شده داره
در هر صورت، یادگیری هر دو زبان مفیده و به شما تجربه واقعی توسعه میده. حتی اگه بعداً بخواید زبانتون رو عوض کنید، این تجربه باعث میشه سرعت یادگیری شما بیشتر بشه.
از کجا میتونید اسکریپت نویسی با #C یا ++C رو یاد بگیرید؟
منابع آموزش #C و Unity:
- C# Scripting Fundamentals – دوره چهار هفته ای زنده از Circuit Stream (رایگان به عنوان بخشی از پکیج VR Starter Plus)
- فروم رسمی Unity3D
- مستندات رسمی Unity3D
- کانال یوتیوب Unity3D
- کانال Jason Weimann در یوتیوب
- کانال Brackeys در یوتیوب
منابع آموزش ++C و Unreal Engine:
- فروم رسمی Unreal Engine
- مستندات رسمی Unreal Engine
- کانال یوتیوب Unreal Engine
- کانال Ryan Laley در یوتیوب
- کانال DevSquad در یوتیوب
در مورد جابجایی بین #C و ++C چی؟
یادگیری سینتکس یه زبان معمولاً توی یه هفته انجام میشه اما وقتی بین ++C و #C جابجا میشید، در واقع دارید کل اکوسیستم توسعه خودتون رو تغییر میدید.
به طور ساده، وقتی با ++C کار می کنید، بیشتر وقتتون رو صرف نوشتن همه چیز از صفر میکنید اما در #C بیشتر یاد میگیرید چطور از ، کتابخونه ها و ابزارهای موجود استفاده کنید.
جابجایی از ++C به #C ساده تر از جابجایی از #C به ++C هست چون توسعه دهنده های ++C معمولاً به مدیریت دستی حافظه عادت دارن ولی #C کارها رو به صورت خودکار انجام میده و تکیه بر GC داره.
فرقی نداره برای پروژه بعدی #C رو انتخاب کنید یا ++C؛ یادگیری یک زبان برنامه نویسی فرآیندی ارزشمنده، مخصوصاً اگه واقعاً قصد دارید وارد مسیر حرفه ای توسعه بازی یا XR بشید.
امیدواریم این راهنما بهتون کمک کرده باشه تا تصمیم درست تری برای شروع مسیر توسعه تون بگیرید. همچنین خوشحال میشیم در صورت وجود سوال یا ابهام، آن را با ما به اشتراک بگذارین تا پاسخگوی شما باشیم.