<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های سالار ندایی</title>
        <link>https://virgool.io/feed/@rosedevco</link>
        <description>برنامه‌نویس فول‌استک وب با تخصص در PHP، Laravel و WordPress. بیش از ۱۰ سال سابقه در توسعه‌ی نرم‌افزار و بازی با Unity و C#. تمرکز بر سیستم‌های امن، مقیاس‌پذیر و کاربرپسند. rosedev.ir</description>
        <language>fa</language>
        <pubDate>2026-06-17 03:09:26</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/709604/avatar/vQSNK8.png?height=120&amp;width=120</url>
            <title>سالار ندایی</title>
            <link>https://virgool.io/@rosedevco</link>
        </image>

                    <item>
                <title>پادکست گیم استارتر : قسمت دوم بازماندگان خوناشام</title>
                <link>https://virgool.io/@rosedevco/%D9%BE%D8%A7%D8%AF%DA%A9%D8%B3%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A7%D8%B3%D8%AA%D8%A7%D8%B1%D8%AA%D8%B1-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-%D8%A8%D8%A7%D8%B2%D9%85%D8%A7%D9%86%D8%AF%DA%AF%D8%A7%D9%86-%D8%AE%D9%88%D9%86%D8%A7%D8%B4%D8%A7%D9%85-i0txg3xrwpm1</link>
                <description>قسمت دوم – داستان موفقیت “بازماندگان خون‌آشام” و سازنده‌اش لوکا گالانتهدر این قسمت از پادکست گیم استارتر، به بررسی داستان موفقیت یکی از بازی‌های مستقل محبوب دنیا می‌پردازیم: بازماندگان خون‌آشام. این بازی که توسط لوکا گالانته، یک توسعه‌دهنده مستقل ایتالیایی، ساخته شد، با گیم‌پلی ساده اما هیجان‌انگیز خود توانست دنیای بازی‌های ویدیویی را تکان دهد. ما در این قسمت از پادکست، به چگونگی شکل‌گیری این بازی و موفقیت شگفت‌انگیز آن در مدت زمان کوتاه، همراه با داستان زندگی سازنده‌اش، پرداخته‌ایم. https://www.aparat.com/v/xcd1utv  دوستان، نظرتون برام خیلی مهمه. حتماً برام کامنت بذارید ^_^برای اطلاع و حمایت از قسمت های جدید پادکست لطفا در کانال تلگرام ما عضو بشید.📷 کانال تلگرام پادکست:c0d3p1ay</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Thu, 01 May 2025 05:58:29 +0330</pubDate>
            </item>
                    <item>
                <title>پادکست گیم استارتر : داستان فلپی برد</title>
                <link>https://virgool.io/@rosedevco/%D9%BE%D8%A7%D8%AF%DA%A9%D8%B3%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A7%D8%B3%D8%AA%D8%A7%D8%B1%D8%AA%D8%B1-%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%D9%86-%D9%81%D9%84%D9%BE%DB%8C-%D8%A8%D8%B1%D8%AF-mkjb5t4oh44d</link>
                <description>گیم استارتر پادکستیه درباره‌ی داستان ساخت بازی‌ها. تو هر قسمت، سراغ یه بازی‌ خاص می‌ریم، مسیر سازندش رو دنبال می‌کنیم و می‌فهمیم چطوری از یه ایده ساده به یه بازی جهانی تبدیل شده.بازی فلپی برد ( ساده اما اعتیاد آور )این قسمت، رفتیم سراغ Flappy Bird؛ بازی‌ای که فقط با یه گیم‌پلی ساده و گرافیک پیکسلی، چند ماه همه رو دیوونه خودش کرد! اما پشت این موفقیت عجیب، چه داستانی بود؟ چه فشاری روی سازندش Nguyen Ha Dong اومد که تصمیم گرفت بازی رو از فروشگاه‌ها حذف کنه؟اگه به پشت صحنه‌ی بازی‌ها علاقه داری، این اپیزود رو از دست نده.   https://www.aparat.com/v/frtxtq1 📷 کلمات کلیدی:گیم استارتر, پادکست بازی, داستان بازی, توسعه بازی, سازنده بازی, بازی‌سازی, بازی‌های موبایل, بازی‌های ویدیویی, فلپی برد, Nguyen Ha Dong, ساخت بازی, موفقیت بازی‌ها, پشت صحنه بازی‌ها, پادکست گیم, تاریخچه بازی, الهام‌بخش, indie game, game development, Flappy Bird podcast, GameDev Podcast</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Thu, 24 Apr 2025 21:09:57 +0330</pubDate>
            </item>
                    <item>
                <title>آیا unity برای ساخت نرم افزار مناسب است ؟</title>
                <link>https://virgool.io/@rosedevco/%D8%A2%DB%8C%D8%A7-unity-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D9%85%D9%86%D8%A7%D8%B3%D8%A8-%D8%A7%D8%B3%D8%AA-khhe75e1xmag</link>
                <description>گاهی در گروه ها و سایت ها مشاهده میکنم که برخی از دوستان در حال ساخت اپ با یونیتی هستند و برخی هم با آنها بحث میکنند که مثلا فلاتر یا اندروید استودیو بهتره و … برای همین تصمیم گرفتم برای اولین مقاله ام که بعد یکسال منتشر میکنم این مورد رو انتخاب کنم از آنجایی که فلاتر یک پلاگین برای اندروید استودیو هست پس بررسی ما فقط بین یونیتی و اندروید استودیو خواهد بود سراغ سایر ide ها نمیریم چون این دو یعنی یونیتی انجین و اندروید استودیو هر دو از بهترین و حرفه ای ترین ها در حوزه موبایل هستند .آیا یونیتی برای ساخت اپلیکیشن مناسب است ؟طبق تجربه ای که از کار با یونیتی انجین داشتم میشه گفت با کمک زبان سی شارپ و پلاگین های این زبان تقریبا هر نوع اپلیکیشنی را با استفاده از یونیتی پیاده کرد , البته این رو به عنوان جواب نهایی نمیشه در نظر گرفت چون پیاده سازی یک اپ با استفاده از یونیتی چالش های خاص خودش رو داره مثلا برای انجام برخی کارها در اندروید استودیو خیلی راحت میشه با استفاده از پلاگین هایی که داره اون رو پیاده کرد و برای پیاده سازی این نوع اپ ها زمان خیلی خیلی زیادی لازمه تا بشه اون رو با استفاده از یونیتی ساخت و نتیجه نهایی هم به هیچ عنوان قابل مقایسه نخواهد بود.آیا ساخت اپ با یونیتی ممکن است ؟پاسخ این سوال بله هست همونطور که ساخت بازی با اندروید استودیو ممکن است ساخت اپ با یونیتی هم ممکنه با این حال برخی از اپ ها بهتره با اندروید استدیو نوشته شوند .چه نوع نرم افزار هایی بهتر است با اندروید استودیو ساخته شوند ؟در حالت کلی نرم افزار هایی که به نوعی با سیستم عامل تعامل دارند بهتره با اندروید استودیو ساخته شوند .اپ هایی مانند  : گالری – پخش کننده موسیقی و ویدیو و … البته اگر بخواهید میتوانید این اپ ها رو با یونیتی هم بسازید ولی میزان کدنویسی و فرایند دیباگ پروژه به صورت چشمگیری افزایش پیدا میکنه .همچنین توجه داشته باشید که یونیتی به خاطر اضافه کردن کتابخانه های خاصی که داره باعث افزایش حجم اپ ساخته شده میشه مثلا اگر یک نرم افزار مطالعه کتاب یا چت با اندروید استودیو ساخته بشه احتمالا اگر فایل های گرافیکی کم حجمی استفاده بشه حدود 1 الی 5 مگ حجم خواهد داشت ( شاید هم کمتر ) با این حال اگر همون نرم افزار رو با یونیتی بسازیم حداقل 18 الی 23 مگ حجم خواهد داشت .از نظر بهینه بودن یونیتی بهتر است یا اندروید استودیو ؟بغیر از اون دسته از نرم افزار هایی که بالاتر گفتیم در مورد سایر موارد نمیشه بصورت کلی نظر داد چون بهینه بودن یک نرم افزار بیشتر مربوط به کدنویسی هست و در هر دو مورد امکان داره یک سطر کد اشتباه باعث ایجاد هنگ های پیاپی در نرم افزار بشه.حالا بسازیم یا نسازیم ؟این نظر شخصی منه و حالت کلی نیست و نظرمو با یک مثال خدمتتون عرض میکنم , شما یک برنامه نویس اندروید استودیو رو در نظر بگیرید که چندین سال به صورت حرفه ای داره زبان کاتلین یا جاوا و … رو کار میکنه و اون یک ایده از یک بازی سوال و جواب داره ( مثل کوییز ) اون تصمیم میگیره بجای اینکه بیاد و یونیتی رو از اول یاد بگیره همین بازی رو با اندروید استودیو پیاده کنه , که تصمیم کاملا عاقلانه ای است و حالا اینطور در نظر بگیرید که ایشون یه ایده از یه بازی مثلا مثل کلش در نظر داره اگه همینو بخواد با اندروید استودیو بسازه وای به حالش چون اینقدر چلنج های مختلف رو حل کنه تا بتونه یک پروژه قابل بازی بسازه که بماند تازه بعد ساخت هم اصلا یک پروژه ایده آل نخواهد بود .حال با استفاده از مثال همین مورد رو راجع به یک برنامه نویس یونیتی در نظر میگیریم که یک نرم افزار فروش آنلاین کتاب رو در ذهن داره حالا ایشون باید چند مورد رو در نظر بگیره یکیش نحوه دریافت و نمایش دیتای کتابهاست حال اگر قرار باشه کتابها بصورت متن باشد اصلا دلیلی نداره که بخواد این نرم افزار را  اندروید استودیو بسازه و با استفاده از تجربیاتی که با ui در یونیتی داره میتونه خیلی راحت این نرم افزار رو بسازه و خروجی هم یک خروجی قابل قبول خواهد بود و تقریبا تمام امکاناتی که با اندروید استودیو میشه پیاده کرد رو میتونه راحت روی اپ خودش پیاده کنه و تازه میزان قابل توجهی هم زمانش رو صرفه جویی کرده و نرفته یه زبان و ide تازه رو یاد بگیره.نتیجه کلیبه هیچ عنوان نمیشه یک ابزار رو محدود به کاری کرد و همچنین این ابزار ها از دیدگاه های متعصب خیلی فاصله دارند مثلا در مورد همین موتور بازی سازی که اگر از چند نفر بپرسید بهترین موتور بازی سازی چیست همه جواب های مختلفی میدن مثلا برای یکی شاید آنریل بهترین باشه در جواب دلیلش میگه برای بازی جهان باز مناسبتره و چون شرکتی در اون مشغول بکاره انجین شخصی نداره از آنریل استفاده می کنند و خیلی هم راضی هستند و یا از شخص دیگری بپرسید اون در جواب میگوید یونیتی دیلیش هم میتونه قابلیت های بسیار زیاد اون برای خروجی وب و موبایل باشد که چون در ایران بازاری برای بازی های کامپیوتر یا کنسول نیست فعلا اکثر برنامه نویسان با یونیتی مشغول هستند و … و همینطور این موارد در مورد نرم افزارها هم صدق میکنه .در کل با توجه به تجربه من و خیلیا اگر می بینید که نتیجه رو میگیرید اصلا به حرف هیچکس گوش نکنید و برین دنبالش و به فکر ساخت یک پروژه بی نقص هم نباشید .امیدوارم این مینی مقاله از رزسافت بهتون کمکی کرده باشه , برای خوندن مقالات بیشتر به سایت ما سربزنید : rosedev.irموفق باشید.</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Tue, 08 Aug 2023 14:03:55 +0330</pubDate>
            </item>
                    <item>
                <title>دوره ساخت بازی آنلاین ( فصل یک - درس چهار ) نصب پیشنیازها</title>
                <link>https://virgool.io/@rosedevco/%D8%AF%D9%88%D8%B1%D9%87-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-%D9%81%D8%B5%D9%84-%DB%8C%DA%A9-%D8%AF%D8%B1%D8%B3-%DA%86%D9%87%D8%A7%D8%B1-%D9%86%D8%B5%D8%A8-%D9%BE%DB%8C%D8%B4%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7-jxv1np1wgdvu</link>
                <description>برای شروع ما نیاز به یونیتی 2020 به بالا داریم , البته من پیشنهاد میکنم فعلا از یونیتی 2020 استفاده نمایید چون در نسخه 2021 من شاهد افت سرعت سرور نسبت به نسخه فعلی بودم , برای شروع یک پروژه جدید ایجاد کنید و دو پکیج ( پایین تر توضیح میدم ) نصب کنید .یکی پکیج transport که کلا اساس سرور و کلاینت ماستو یکی Ultimate JSON 2.4 که  ما برای سریالایز کردن داده ها از اون استفاده میکنیم البته میتونید از سایر روش ها مانند net و json خود یونیتی استفاده کنید , پکیج net کمی سریعتر از Ultimate JSON هست ولی چون Ultimate JSON طیف گسترده تری رو ساپورت میکنه ما از اون استفاده میکنیم البته اینم اضافه کنم که Ultimate JSON سرعت بسیار بالایی دارد و نسبت به پکیج net کمی سرعتش کمتره که با توجه به تعداد کلاس هاش کاملا منطقی است .نصب transportاز منوی بالا windows / package manager را انتخاب کنیدروی کلید + کلید کرده و گزینه add package from git url را انتخاب کنید.آدرس git پکیج ترانسپورت رو وارد کنید ( com.unity.transport ) و روی کلید add کلیک کنید.حتما حتما ف.ی.ل ت.ر شکن خوب استفاده کنید تا بدون مشکل عملیات دانلود انجام بشه این دانلود فقط یکبار نیازه انجام بشه و حجمی حدود 300 400 مگ دانلود خواهد شد.منتظر باشید تا عملیات دانلود انجام و پکیج نصب شود.نصب Ultimate JSONابتدا پکیج رو از این لینک دانلود کنید و سپس import کنید.نکته : بعد از ایمپورت کردن پکیج یونیتی اروری مبنی بر پایین پودن ورژن دات نت نشان میدهد که برای حل آن ابتدا به Build Setting رفته و روی player setting کلیک کنید و از قسمت other setting ورژن دات نت رو به 4 تغییر بدید , البته اگر از ورژن های 2021 به بعد استفاده میکنید این گزینه بصورت پیش فرض انتخاب شده است .حالا پروژه ما آماده ساخت هست فصل یک تموم شد و از فصل دو ساخت کلاینت و سرور رو شروع میکنیم.برای مشاهده آموزش های بیشتر و اطلاع از ادامه این آموزش به این آدرس مراجعه نمایید .</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Thu, 25 Aug 2022 21:45:15 +0430</pubDate>
            </item>
                    <item>
                <title>دوره ساخت بازی آنلاین ( فصل یک - درس سوم ) buffer</title>
                <link>https://virgool.io/cafegame/%D8%AF%D9%88%D8%B1%D9%87-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-%D9%81%D8%B5%D9%84-%DB%8C%DA%A9-%D8%AF%D8%B1%D8%B3-%D8%B3%D9%88%D9%85-buffer-skyscjstjmpd</link>
                <description>buffer چیست ؟ :ساده ترین تعریفی که میشود برای بافر ارائه داد این است یک قسمت از فضای رم (یا حافظه موقت ) را که در آن اطلاعات ذخیره شده است ( مثلا 128 کیلو بایت ) را بافر می گویند , البته بیشترین کاربرد بافر برای جبران کمبود سرعت سایر قطعات نسبت به سی پی یو و جی پی یو هست به تصویر زیر دقت کنید :سایز بافر این هارد دیسک 256 مگابایت است .یک مثال در مورد کارکرد بافر :وقتی که شما نیاز به اجرای یک فایل سنگین ( یک فیلم یا اهنگ و … ) مثلا 500 مگابایتی دارید اگر قرار باشد تا این فایل برای بخش شدن بایت به بایت از روی هارد دیسک خوانده شود هم باعث لگ زدن پلیر کامپیوتر شما میشود و هم سی پی یو را بصورت دایم درگیر میکند , برای جلوگیری از این مشکل قسمتی از فایل انتخاب شده روی حافظه رم لود میشود تا کمبود سرعت بین قطعات را جبران کند در تصویر بالا میبینیم که میزان بافر برای این هارد دیسک 256 مگابایت است , البته بافر کاربرد های دیگری هم دارد که به درس ما مربوط نمیشود , برگردیم سر موضوع درس :کاربرد بافر در بازی های آنلاین ؟در بازی های انلاین ما برای ارسال و دریافت و نگهداری اطلاعات از بافر استفاده میکنیم به این خاطر که سرعت بسیار بالایی دارد و به راحتی قابل تبدیل و حذف است , فرض کنید نیاز داریم تا یک متغیر از نوع int را از کلاینت به سرور ارسال کنیم , برای اینکار ابتدا متغیر خود را به بایت تبدیل کرده و برای سرور ارسال میکنیم و سرور آن را دوباره به int تبدیل میکند.حال شاید بپرسید که نقش بافر در این میان چیست ؟ما یک سایز مشخص رو برای اندازه بافر در نظر میگیریم هر چه این سایز کوچکتر باشد سرعت پردازش و ارسال و دریافت آن نیز بیشتر است , کلاس استریم وظیفه خواندن بایت به بایت و نوشتن بایت به بایت را دارد و یا اینگونه میشود گفت که این کلاس به صورت دائمی در حال دریافت اطلاعات است , برای تشخیص و تبدیل اطلاعات دریافتی اگر ما یه قالب داشته باشیم این کار راحت تر خواهد بود مثلا ما سایز بافر را برابر 32 کیلو بایت در نظر میگیریم و داخل شرط ذکر میکنیم که اگر سریم دارای دیتا بود بایت ها را در پک های 32 کیلو بایتی دسته بندی کند و بخواند , همین کار رو برای ارسال دیتا نیز انجام میدهیم.اگر درس قبلی را مطالعه کرده باشید در اتصال UDP سایز پک های ارسالی سایز کمتری دارند ولی همین باعث افزایش سرعت این نوع سرور میشود.برای اطلاع از بروز رسانی این درس به این آدرس مراجعه نمایید.</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Wed, 17 Aug 2022 11:17:29 +0430</pubDate>
            </item>
                    <item>
                <title>دوره ساخت بازی آنلاین ( فصل یک - درس دو ) TCP vs UDP</title>
                <link>https://virgool.io/cafegame/%D8%AF%D9%88%D8%B1%D9%87-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-%D9%81%D8%B5%D9%84-%DB%8C%DA%A9-%D8%AF%D8%B1%D8%B3-%D8%AF%D9%88-tcp-vs-udp-clgq5xelw6kb</link>
                <description>تفاوت TCP و UDPTCP : این دو پروتکل برای ارسال و دریافت انواع داده استفاده می شوند کامپیوتر های متصل به اینترنت , برای ارسال و دریافت داده از TCP استفاده میکنند همچنین پروتکل TCP قابل اتکا بوده به نوعی که گفته میشود هیچ موقع بسته ای موقع ارسال و دریافت گم نمیشود ( از دست نمی رود ) . در موقع ارسال داده از کامپیوتر 1 به کامپیوتر 2 این دو دستگاه ابتدا با هم اتصال پیدا می کنند و سپس داده ها ارسال و دریافت میشود , این نوع ارسال دریافت بسیار مطمئن‌تر از روش UDP است.با اینحال فشار زیادی به سیستم وارد میکند چون هر دو سیستم باید داده های ارسالی را مرتب چک کنند و اگر داده ای به مقصد نرسیده بود دوباره ارسال می شود , همین امر باعث کندی این روش نسبت به UDP میشود.نرم افزار های پیام رسان یک نمونه عالی برای توضیح کارکرد این روش هستند.UDP : برعکس پروتکل  TCP این پروتکل داده های ارسالی را ردیابی نمیکند و این کار باعث میشود تا حدودی احتمال از دست دادن داده موقع ارسال و دریافت اطلاعات بین دو کامپیوتر وجود داشته باشد , اما همین امر باعث سبک تر و تا چندین برابر سریعتر بودن این روش نسبت به TCP میشود.همچنین سایز بسته های ( بافرها ) ارسالی با UDP کوچکتر از TCP است , معمولا سرور بازی ها را از نوع UDP انتخاب میکنند به چند دلیل :UDP بسیار سریعتر استهزینه های سرور را در بلند مدت مخصوصا در صورتی که تعداد کاربران زیاد باشند بسیار کاهش میدهد.درصد از دست دادن اطلاعات خیلی کم بوده و با ترفندهایی کاملا قابل حل می باشد.چه موقع داده های ارسالی از دست میروند ؟اگر کامپیوتر ارسال کننده و کامپیوتر دریافت کننده در شرایط عادی باشند , هیچ داده ای از دست نمی رود . شرایط از دست دادن داده رو پایین تر توضیح میدم خدمتتون :اگر به هر دلیلی کامپیوتر دریافت کننده قابلیت پردازش اطلاعات دریافت شده رو نداشته باشد ( رم پر , cpu ضعیف , کدنویسی درهم و نامرتب , بهینه نبودن داده و ... )اتصال ضعیف و دارای قطع و وصلیاشتباهات رایج کدنویسی ( شاید بگید که برای من شامل نمیشه  ولی اتفاقا برای همه شامل میشه )گم شدن یا از دست دادن داده های ارسالی چه موقع مهم است و چه موقع مهم نیست ؟فرض کنید میخواهیم حرکت یک گیم آبجکت را از راست به چپ برای تمام کاربرهای آنلاین نمایش دهیم ما هر 0.5 ثانیه یکبار transform این ابجکت را برای همه ی کاربرها ارسال میکنیم حالا اگر از 100 بسته ارسالی 90 تا دریافت شود و 10 بسته تحویل گرفته نشود مشکل خاصی ایجاد نمی کند , این دقیقا زمانیست که از دست دادن داده های ارسالی برای ما مهم نیست ,حالا فرض کنید که یک پلیر گلوله ای شلیک کرده و آن به بازیکن حریف برخورد کرده است حال ما یک داده برای سرور ارسال میکنیم که مثلا مقدار 10 واحد از hp بازیکن تیر خورده کم کند , فرض کنید این داده ارسالی توسط سرور دریافت نشود این مورد نیاز به دقت  دارد , برای همچین مواردی ما راه حل هایی داریم که در درس های اینده با آنها آشنا خواهید شد و فعلا خارج از بحث این درس می باشد.برای مشاهده سایر آموزش ها به ادرس زیر مراجعه نمایید , با تشکر.rosedev.ir</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Mon, 15 Aug 2022 22:07:57 +0430</pubDate>
            </item>
                    <item>
                <title>دانلود android SDK برای unity 2020</title>
                <link>https://virgool.io/@rosedevco/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-android-sdk-%D8%A8%D8%B1%D8%A7%DB%8C-unity-2020-f0yueixk0fie</link>
                <description>دانلود اس دی کا برای اندروید ( تست شده در یونیتی 2020 )برای خروجی اندروید نیاز به معرفی sdk اندروید به انجین یونیتی دارید برای دانلود فایل فشرده اندروید اس دی کا برای یونیتی روی متن دانلود کلیک کنید - همچنین این اس دی کا روی یونیتی 2020 تست شده , اگر ndk هم نیاز داشتید بگید تا آپلود کنم .موفق باشید.دانلود با لینک مستقیم</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Mon, 15 Aug 2022 17:31:04 +0430</pubDate>
            </item>
                    <item>
                <title>دوره ساخت سرور بازی آنلاین با یونیتی ( فصل یک - درس یک )</title>
                <link>https://virgool.io/cafegame/rosedevir-x6i7ogxcfkke</link>
                <description>درس یک مقدمهآشنایی اولیه با نحوه کار کرد بازی های انلاین و آشنایی با مفهوم سرور و کلاینتدر یک بازی انلاین ما با دو مفهوم کار داریم یکی کلاینت و دیگری سرور .کلاینت (Client) : هر دستگاهی که به سرور اطلاعات ارسال کند یک کلاینت است و میتواند یک نرم افزار , بازی و یا هر نوع از سیستمی باشد.سرور (Server) : یک نرم افزار که روی یک سیستم عاملی که همیشه به اینترنت متصل است ( برای بازی های انلاین ) اجرا میشود و وظیفه دریافت و پردازش و ارسال اطلاعات به کلاینت ها را بر عهده دارد.تفاوت سرور و کلاینت : بطور کلی کلاینت تنها به داده های خود و داده های ارسالی از طرف سرور دسترسی دارد و در کل دسترسی محدود تری نسبت به سرور دارد و این در حالی است که سرور به تمام دیتاها ها دسترسی کامل دارد و در مورد اتصال و یا قطع اتصال یک کاربر کاملا اختیار تام دارد و بسته به نوع برنامه نویسی و حلقه های امنیتی مورد استفاده میتواند نسبت به کاربران در درجه های مختلفی قرار داشته باشد .موارد فوق حتمی نیستند و برنامه نویس میتواند تمام انها را تعریف کند یا تغییر دهد.تبادل اطلاعات مابین سرور و کلاینتبرای اینکه کلاینت ها بتوانند به سرور متصل شوند نیاز دارند تا به ip و port ( در درس های اینده بیشتر توضیح خواهم داد ) دسترسی داشته باشند البته گاهی شرکت های بازی سازی برای افزایش امنیت سرور و جلوگیری از هک شدن آن اقدام به مخفی سازی ای پی اصلی سرور میکنند که در نهایت ای پی اصلی رو میشه با چند اسکن پیدا کرد که بنظر بنده ارزش مخفی کردن رو نداره و به جای مخفی کردن ای پی میتوان از لیست ها سیاه استفاده کرد تا ای پی شخص کرک کننده را بسته شود.همچنین برای اینکه سرور تشخیص دهد که کدام کلاینت اطلاعات ارسال میکند , تمام کلاینت ها نیاز به یک ای دی دارند این ای دی میتوان شامل حروف و یا اعداد باشد.البته این نوع تبادل اطلاعات بسیار سست و نا امن است که در درس های اینده در مورد نحوه هک شدن ان با اتک MIM و نحوه جلوگیری و تشخیص اطلاعات اصلی از فیک صحبت خواهیم کرد.نقشه کلی یک بازی انلاینکلاینت ها اطلاعات رو به سرور ارسال و اطلاعات پردازش شده را از سرور دریافت میکنند همچنین سرور می تواند بطور مستقیم با دیتابیس در ارتباط باشد و کلاینت ها به هیچ عنوان امکان دسترسی که آن را ندارند , مثلا اگر کلاینتی بخواهد وارد منو شود یک درخواست شامل ای دی کلاینت به سرور میفرستد و سرور در دیتابیس ان را جستجو میکند و اگر اطلاعات کاربر را پیدا کرد آنها را برای کاربر ارسال میکند ولی اگر قادر به پیدا کردن آنها نبود ( کاربر ثبت نام نکرده است ) یک پیام به کلاینت ارسال میکند که نیاز به ثبت نام است و کلاینت برای کاربر صفحه ثبت نام را باز میکند.برای مشاهده سایر درس های این اموزش میتوانید به این ادرس مراجعه نمایید , همچنین لازم به ذکره که آموزش رو تازه شروع کرده ام و مدتی طول میکشه تا بتونم اموزش رو تکمیل کنم ( چیزی حدود 30 روز ) باتشکر سالار ندایی .</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Mon, 15 Aug 2022 14:53:20 +0430</pubDate>
            </item>
                    <item>
                <title>یونیتی و worker ها</title>
                <link>https://virgool.io/@rosedevco/rosedevir-k2ahj3zn0mfg</link>
                <description>سلام دوستان , اول از همه من یه عذرخواهی کنم بابت تاخیر در نوشتن این مقاله بهانه ای نمیارم و فقط این رو عرض کنم که این مقاله هیچ منبع خاصی نداره و بیشتر حاصل تجربه است  و امیدوارم که برای علاقه مندان این رشته مفید باشه و سطح مقاله هم پیشرفته یا حرفه ای هست ولی تا جایی که امکانش باشه سعی میکنم از توضیحات ساده تر برای شرح اون استفاده کنم .تاریخچه :قبل از توضیح در مورد ورکرها ( workers ) بهتره کمی در مورد این تاریخچه و علت وجود رو بحث کنیم , (همچنین می توانید  مبحث فراریسمانی در ویکی پدیا را هم میتوانید مطالعه نمایید ).در سال 1981 شرکت مایکروسافت یه سیستم عامل جدید با نام MS-DOS معرفی میکنه که در واقع که کارکردی شبیه به cmd ویندوز داشت به این صورت که دستور رو وارد میکردیم و یه result رو نمایش میداد و به نوعی در این سیستم عامل فقط قادر به انجام یک کار بودیم یعنی موقعی که سیستم عامل در حال پردازش دستور وارده بود هیچ دستور جدیدی نمی توانستیم به آن دهیم , به این نوع پردازش single processing میگویند .چند سال بعد در سال 1988 شرکت مایکروسافت ویندوز 98 رو معرفی کرد که دارای یک قابلیت جدید به نام Yield ( اولین حضور مفهومی به نام yield در دنیای کامپیوتر ) بود , امروزه ما از yield در متدهای coroutine استفاده میکنیم , در واقع کاری که yield انجام میده اینکه یک پردازش رو تا جایی که ما بخواهیم انجام میدهد و در وسط کار اونو رها میکنه و بعد از زمان و یا فریم خاصی دوباره فرایند پردازش قبلی رو ادامه میده , حال این مورد برای مواقعی که ما نیاز به چک کردن یک حلقه بسیار طولانی داریم بسیار مفید بوده و باعث میشه که منابع سیستم فقط برای یک حلقه مصرف نشه .در واقع این کار اولین شبیه سازی مولتی تسکینگ در زمان خود بوده است , البته این کار فقط مولتی تسکینگ رو شبیه سازی میکرد و در واقع تمام پردازش ها در main thread (ترد و تسک اصلی برنامه )  انجام می شد.در سال 2000 هم یه ویندوز به اسم ویندوز 2000 توسط شرکت مایکروسافت معرفی شد که قابلیتی مشابه ویندوز 98  داشت با این تفاوت که شما قادر به pause و resume کردن تسک ها بودید , که این مورد هم در واقع جعل کردن مولتی تسکینگ بود و هنوز راهکار مناسبی حساب نمیشد .دلیل اصلی بوجود آمدن روش های فوق این بود که در اون زمان cpu ها فقط یک هسته داشتند .در سال 2000 شرکت intel و AMD اولین cpu های چند هسته ای خودشون رو معرفی میکنند .بعد از مدتی شرکت اینتل میاد و یه قابلیتی رو معرفی میکنه به اسم هایپرتردینگ که کارکردش به این صورت بود که یک پروسس رو به چند thread تقسیم میکرد و می فرستاد به هسته های سی پی یو و بعد از اتمام پردازش اونها رو به main thread برمیگرداند , در واقع اینتل اولین روش استفاده از هسته های سی پی یو رو به برنامه نویسان معرفی میکنه که انقلابی در نوع خود بود و تاثیر بسیار زیادی در سرعت نرم افزار ها داشت .مزایا و معایب :این روش هم مانند تمام روش ها مزایا و معایب خودش رو داره به مثال زیر توجه کنیدفکر کنید ما قراره a+b کنیم و نتیجه رو در c ضرب کنیم برای افزایش سرعت این پروسس ما جمع شدن a و b رو به یک ترد و ضرب شدن نتیجه در c رو به یک ترد دیگه میدهیم , این کار باعث افزایش سرعت بسیار زیاد برنامه ما میشه و تا اینجای کار اوکی هست یعنی موقع اجرای برنامه مون اول ترد جمع کردن اجرا میشه و بعد ترد ضر که کاملا درسته ولی اگر موقع اجرا شدن اول ترد ضرب شدن اجرا بشه و بعد جمع کردن ! مشکل ساز خواهد بود , حالا این مشکل رو تو سیستم ها و زبان های مختلف با راههای مختلف حل میکنن که بسته به هر سیستم و بر اساس نیاز نوشته میشه .آشنایی با Task ها :اگر بخواهیم به ساده ترین شکل کلاس task را تعریف کنیم در واقع میتوان گفت این کلاس وظیفه مدیریت و پردازش داده مورد نظر را با توجه به نوع CPU و تعداد هسته آن برعهده دارد که همین عمل استفاده از چندوظیفگی تا حد بسیار زیادی آسان میکند .برای استفاده از از کلاس task نیاز دارید تا کد using system.threading را به کدهای خود اضافه کنید .به مثال زیر دقت کنید :void Start(){ Task task = Task.Run(() =&gt; do_()); }void do_(){  // do }در مثال فوق ما متد _do را که یک متد ساده هست رو با استفاده از Task ها فراخوانی میکنیم که همین عمل باعث میشه کلاس Task متد _do رو روی یک ترد از سی پی یو دیوایس اجرا کنه و از انجایی که کلاس Task خودش کارهایی مانند مدیرت نخ های سی پی سو و … را به صورت اتوماتیک مدیریت میکند دیگر نیازی به انجام کار خواصی نیست .کاربرد اصلی این روش بیشتر برای انجام پردازش های سنگین هست مخصوصا اگر میخواهید زمان پردازش رو کوتاه تر کنید بسیار مناسبه , این روش اصلی استفاده از چندوظیفگی در سی شارپ هست که روی یونیتی هم قابل اجراست , البته یونیتی روش جدیدتری هم برای انجام این عمل داره به اسم ECS که طبق اخرین تست ها تا چندین برابر سریعتر از روش فوق هست ولی پیاده سازی اون به راحتی متد فوق نیست و سختی ها و ارور های خاص خودش رو داره ( البته اینم داخل پرانتز اضافه کنم ECS رو بنده هنوز وقت نکردم یادبگیرم ) و مطمعنا در آینده ای نه چندان دور احتمال داره ECS کمی ساده تر و قابل فهم تر باشه تا بشه روی تمام بازی ها اون رو پیاده کرد.امیدوارم این نوشته بتونه کمکی برای شما باشه و درصورتی که مایلید تا مقاله ها رو کمی حرفه ای تر کنیم حتما توی نظرات اعلام کنید چون معمولا سعی من بر اینکه تا مقاله هام رو به عامیانه ترین حالت ممکن بیان کنم تا درکش برای همه سطوح راحتتر باشه و البته اینم اضافه کنم که خودم هم همیشه مطالب رو با روش درک مطلب به ذهن میسپارم که اینم یک دلیل دیگه برای این نوع نوشتن هست , اگر سوالی دارید بپرسید درصورتی که درتوانم باشه حتما کمک میکنم.سوالات مربوط به این مقاله رو میتونید در اینجا ( https://rosedev.ir/unityandworkers ) بپرسید.موفق باشید.</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Sat, 25 Jun 2022 18:37:30 +0430</pubDate>
            </item>
                    <item>
                <title>ساخت سرور بازی برای یونیتی</title>
                <link>https://virgool.io/@rosedevco/%D8%B3%D8%A7%D8%AE%D8%AA-%D8%B3%D8%B1%D9%88%D8%B1-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-jwdhbwbttbox</link>
                <description>در این مقاله سعی خواهم کرد تا انواع روش های ساخت یک سرور بازی , برای ساخت بازی آنلاین در یونیتی را  توضیح دهم , قبلا مقاله ای راجب مقدمه ورود به بازی های آنلاین نوشته بودم که در آن یکسری از سرور های آماده رو توضیح داده بودم حال در این مقاله کمی عمیق تر این موضوع را بررسی خواهیم کرد.نحوه برقراری ارتباطتمامی روش های ساخت سرور حتی با وجود تفاوت هایی که دارند ارسال و دریافت اطلاعات را تا حدود زیادی مشابه به هم انجام میدهند به طوری که گاها حتی با وجود تفاوت در زبان برنامه نویسی نیز تفاوت چندانی در نوع و سرعت ارتباط در بین آنها دیده نمیشود.در کل تمام سرور ها سه ویژگی دارند که آنها را مورد بررسی قرار میدهیم .دو مورد اول نوع سرور می باشد که به نام های UDP و TCP شناخته میشوند که در آینده با این نوع سرور ها کار خواهیم کرد و مورد آخر CCU سرور هست که در خیلی از سایت ها زیاد مورد بررسی قرار نگرفته در این مقاله کمی در مورد سه مورد بالا توضیح خواهم داد.سرور نوع TCP چیست ؟اگر بخواهیم به صورت خیلی ساده این موضوع توضیح دهیم ساده ترین حالت آن اینطور میشود که : سروری است که تمامی اطلاعات ارسالی را چک میکند که آیا به مقصد ( کلاینت ) رسیده است یا خیر , اگر رسیده باشد که هیچ ولی اگر کلاینت اطلاعات ارسالی را دریافت نکرده باشد سرور دوباره برای کلاینت ارسال میکند و در حالت کلی می توان اینگونه در نظر گرفت که اطلاعات ارسالی در سرور TCP همیشه به مقصد میرسند .از این نوع سرور برای ساخت انواع پیام رسان ها و بازی ها استفاده میشود ولی با توجه به رهگیری مدام بسته های ارسالی سرعت این نوع سرور برای ساخت بازی های رئال تایم مناسب نیست و بیشتر برای بازی های نوبتی یا فکری مناسب میباشد.سرور نوع UDP چیست ؟در سرور های UDP پکیج های ارسالی به صورت دایم و بدون رهگیری ارسال میشوند و از این رو این نوع ارتباط دارای سرعت خیلی بالایی نسبت به TPC است که همین امر باعث میشود تا این نوع سرور مناسب بازی های رئال تایم باشد , یکی از معایب این نوع ارتباط از دست رفتن پکیج های ارسالی میباشد که ممکن است توسط کلاینت هرگز دریافت نشوند ولی با وجود سرعت بسیار بالای این نوع سرور براحتی میشود اطلاعات ارسالی را چک کرد.CCU چیست ؟در حالت کلی ساده ترین تعریفی که میتوان برای ccu عنوان کرد در واقع تعداد یوزرهایی است که بصورت همزمان به سرور ما وصل شده اند و سروری که بتواند تعداد ccu های بیشتری را در هر سیشن ساپورت کند طبیعتا بهتر و قوی تر است , البته بسته به نوع بازی ای که میخواهیم توسعه دهیم باید نوع سرور را انتخاب کنیم و در موقع انتخاب به حداکثر ccu که لازم داریم باید دقت داشته باشیم , مثلا برای بازی ای مثل بازی هشت خوان که یک بازی کارتی و نوبتی هست یک سرور tcp کاملا انتظارات ما را براورده خواهد کرد و برای یک بازی مانند کال اف موبایل و … حتما به یک سرور از نوع udp و با قابلیت ساپورت ccp بالا نیازمندیم.روش های ایجاد ساخت سرورروش لو لول یا LLAPI : پایه ای ترین نوع ساخت سرور این نوع میباشد در این  روش سرور را از 0 تا 100 کاملا اختصاصی و بر اساس نیاز و نوع بازی می سازیم , بهترین مزیت این روش بهینه بودن و سبک بودن آن است و تنها ایراد آن این است که نیاز به دانش برنامه نویسی بالایی دارد , از آنجایی که این روش سخت ترین روش ممکن برای ساخت بازی آنلاین آموزش های بسیار کمی در مورد آن منتشر شده است .روش مید لول یا MLAPI : همانطور که از اسمش پیداست یه روش سطح متوسط است که در این نوع سرور نویسی بخشی از کدها و پل های ارتباطی قبلا برنامه نویسی شده اند و کار را تا حدودی راحت میکند. از نظر بهینه بودن کدها هم تا حدودی خوب است.روش های لول یا HLAPI : در این روش بیش از 80 درصد کدهای مورد نیاز نوشته شده و آماده است مثلا برای ارسال position کاربر کافیه تا کامپوننت آن را به آبجکت اضافه کنید. این روش برای پروژه های کوچک مناسب تره تا پروژه های بزرگ چون استفاده از کدهای آماده باعث پیچیده شدن برخی فرایندها میشه ( البته برای پروژه های بزرگ هم جوابگو هست ) مثلا برای یه سروری که حدود 2000 سطر کد داره دیباگ کردن رو مشکل میکنه و گاها روش های ارسال و دریافت هم بهینه نیستند البته در پکیج netcode کاربر میتونه از خاصیت پیام های شخصی هم استفاده کنه ولی من نمی پسندم و این کاملا سلیقه ای است.معرفی برخی از پکیج های ساخت بازی آنلاین در یونیتیدر جدول بالا برخی از پکیج ها و سرویس های مرتبط با ساخت سرور بازی معرفی شده است که میتوانید مشاهده کنید من فقط یه توضیح کوتاه بدم که سه مورد بالا تا جایی که بنده اطلاع دارم اولا فیلتر هستند و دوما تحریم هستیم و سوما هزینه ماهیانه بر اساس ccu می خواهند که به هیچ وجه مناسب ایرانی ها نیستند یا حداقل مناسب تیم های کوچک و استارت آپی نیستند البته دارک ریفت رو کار نکردم و اطلاعی هم ندارم ( چون تو جدول بالا نوشته 100 دلار برای سورس  )در کنار لیست بالا من یه لیست کامل از انتخاب هایی که برای ساخت سرور داریم رو براتون مینویسم  :اولین گزینه ما transport می باشد یک روش LLAPI بر پایه محاسبات JOB که سرعت و انعطاف بسیار بالایی دارد و رایگان و open source است.گزینه دوم netCode که بر اساس monobehaviour می باشد و با توجه به وجود گزینه های های لول بهتر مانند netcodeForEntity که یه نسخه بهتر بر اساس سیستم dots یادگیریش رو توصیه نمیکنم ( فعلا هنوز در حالت preview می باشد )گزینه سوم : mirror تا جایی که تحقیق کردم سرعت خوبی داره و یکی از معایب اون پیچیده بودن داکیومنت اون هست که کمی یادگیری رو مشکل میکنه. ولی در کل api خوبی است و اگر قرار به دسته بندی باشه در دسته HLAPI ها قرار میگیره .گزینه mlapi هم تا جایی که میدونم در حال منسوخ شدن هست و از لیست پکیج های یونیتی هم حذف شده و یادگیریش رو توصیه نمیکنم.به جز پکیج های بالا روش های زیادی برای ساخت سرور وجود دارد از ساخت کنسول اپ با سی شارپ گرفته تا ساخت سرور با تایپ اسکریپت و اینکه از کدام روش استفاده کنید کاملا بسته به خودتونه.تفاوت اصلی تمام سرور هاپس با توجه به روشهای بالا میبینیم که تعداد خیلی زیادی از پکیج ها و سرویس ها برای ساخت سرور بازی وجود دارند با این حال چه عاملی باعث بهتر بودن یا بدتر بودن یک روش میشود ؟در پاسخ به آن می توان گفت که روش انتخابی شما باید از هر نظر به صرفه باشد یعنی چه از نظر یادگیری و داکیومنت ها و چه از نظر زمان ساخت و مدیریت توابع و سیستم مدیریت سرور و حتی فایل اجرایی سرور ( نوع فرمت سیستم مورد نیاز و امنیت کدها و … )و در آخر میزان بازدهی سرور باید قابل قبول باشد و حتی به جرات میتوان گفت که بازدهی سرور خیلی مهمتر از تمام موارد بالاست به طوری که هزینه ماهیانه ای که برای نگهداری و انلاین نگه داشتن سرور خرج میشود باید نسبت به بازدهی آن قابل قبول و منطقی باشد.پس سروری مناسب است که تمام موارد بالا را باهم یا با اولویت بندی اختصاصی شما داشته باشد .در مورد بازدهی استفاده از متدهای پیشرفته تر و مولتی تردینگ برای سرور بسیار حائز اهمیت است.در صورتی که سوالی دارید میتوانید در اینجا بپرسید . باتشکر</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Mon, 18 Apr 2022 13:26:49 +0430</pubDate>
            </item>
                    <item>
                <title>touch in unity | کار با تاچ در یونیتی (آپدیت شد !)</title>
                <link>https://virgool.io/@rosedevco/touch-in-unity-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AA%D8%A7%DA%86-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D8%A2%D9%BE%D8%AF%DB%8C%D8%AA-%D8%B4%D8%AF-co7s2n1czvh0</link>
                <description>https://rosedev.ir/courses/%d8%af%d9%88%d8%b1%d9%87-%da%a9%d8%a7%d9%85%d9%84-%d8%a7%d9%85%d9%88%d8%b2%d8%b4-%da%a9%d8%a7%d8%b1-%d8%a8%d8%a7-%d9%be%da%a9%db%8c%da%86-virtual-joystick/tps://s17.picofile.com/file/8426493576/Joystick_Pack.rar.htmlیونیتی  برای خروجی پلتفورم های زیادی رو ساپورت میکنه که رابط کاربری برخی از  انها به صورت لمسی می باشد , از این رو تسلط داشتن به پیاده سازی انواع تاچ  از جمله تاچ زون ها و جوی استیک ها و دکمه ها و … بسیار حائز اهمیت است.  در این اموزش بهترین و بهینه ترین روش برای پیاده سازی تاچ رو به شما  عزیزان معرفی خواهم کرد پس تا اخر این مقاله با ما باشید.انواع روش های پیاده سازی تاچکدهای inputسیستم تاچ یونیتیمعرفی پکیج های تاچمعرفی پکیج virtual joystickکدهای inputمنظور از این قسمت کدهای مربوط به mouse میباشد , شاید کمی عجیب به نظر  بیاید ولی در اکثر پلتفورم ها ( معمولا همه ) یکبار تاچ صفحه به معنی کلیک  چپ یا mouse(0) است و دوبل تاچ یا دوبل تب به معنی mouse(1) می باشد . حال  از اونجایی که با توجه به نوع بازار کار و شرایط ایران , فعلا بیشترین  تمرکز بر روی ساخت بازی های اندرویدی یا ios است و تاجایی که بنده اطلاع  دارم این فرایند تا حدودی برای اندروید قابل اجرا بوده و پشتیبانی میشود ,  در مورد ios هیچ اطلاعی ندارم اما معمولا سیستمی مشابه اندروید دارند و  یکسانند.کد نمونه برای کلیک ساده :using UnityEngine;public class touch : MonoBehaviour{       void Update()    {        if (Input.GetMouseButtonDown(0))        {            Debug.Log(&quot;btn pressed !&quot;);        }    }}در  صورتی که کد بالا را اجرا کنیم با کلیک کردن روی صفحه متن دیباگ برای ما  چاپ میشود. از این نوع کد میتوانیم برای مواقعی که نیاز به پیاده سازی تاچ  پیچیده ای نداریم استفاده کنیم.البته خالی از لطف نیست که به سیستم Button یونیتی هم اشاره ای کنیم که بسیار سبک بوده و برای بازی های موبایل گزینه مناسبی است .touch سیستم یونیتیسیستم  touch یونیتی که برای پیاده سازی تاچ بر روی پلتفورم های اندروید و ios در  نظر گرفته شده از نظر راحتی استفاده بسیار خوب عمل کرده و برای تشخیص  همزمان چند تاچ مناسب است , اما از جمله معایبی که این سیستم دارد این است  که کد نوشته شده فقط و فقط بر روی پلتفورم اندروید و ios اجرا میشود یعنی  کلیک موس رو به عنوان تاچ شماره 0 نمیشناسه که همین باعث منسوخ شدن ان توسط  برنامه نویسان یونیتی شده است.یک نمونه کد برای تاچ :using UnityEngine;public class touch : MonoBehaviour{       void Update()    {        if (Input.touchCount &gt; 0)        {            Touch touch = Input.GetTouch(0); // get first touch since touch count is greater than zero            if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved)            {                Debug.Log(&quot;YES&quot;);            }        }    }}در  کد بالا ابتدا چک میکنیم اگر تعداد ناچ ها در صفحه بیشتر از 0 بود کد تاچ  اجرا بشه و چون ما فعلا میخواهیم فقط یک انگشت رو چک کنیم touch رو برابر  تاچ0 قرار میدیم و در داخل شرط مینویسیم که اگر انگشت کاربر روی صفحه قرار  گرفت و یا روی صفحه حرکت کرد برای ما پیام Yes رو به صورت دیباگ نمایش بده.طبق  کد بالا برای شناسایی فقط یک تاچ ساده نزدیک به 10 سطر کد زدیم که همین هم  دارای خطا بوده و اگر انگشت کاربر موقع تاچ از یک سمت صفحه خارج بشه سیستم  تاچ نمیتونه تشخیص بده که دیگه تاچ انجام نمیشه و معمولا خطا میده . برای  همین استفاده از این روش به هیچ وجه اصلا توصیه نمیشه.معرفی پکیج های تاچمعروف ترین پکیج تاچ که در اموزش های فارسی زبان هم خیلی از اون استفاده میشه پکیج Control Freak 2  می باشد که به هیچ عنوان استفاده از اون رو توصیه نمیکنم به علت تغییر  دادن اسکریپت ها به صورت خودکار که بعد از نصب و پیکربندی عملا فرایند  برگشت رو غیرممکن میکنه و پروژه ارور های بسیار زیادی رو متحمل میشه ,  همچنین از نظر پردازش و استفاده از منابع هم زیاد جالب نیست , بع از این  پکیج پکیج های زیادی دیده ام که اصلا مناسب نیستند و حجم بسیار بالایی  دارند مخصوصا نسبت به کاری که انجام میدهند .معرفی پکیج virtual joystickدر  میان انبوع پکیج های رنگارنگ که دارای متدهای عجیب و غریب هستند و بیشتر  انها جنبه تبلیغاتی دارند , تنها یک پکیج مورد تایید من هست و اون هم  همینه.از ویژگی های این پکیج که اونو به یک پکیج نمونه و قابل اتکا تبدیل میکنه میشه به موارد زیر اشاره کرداستفاده مستقیم از event system یونیتی ( که باعث افزایش سرعت کارایی میشه )کدهای اوپن سورس و بسیار خلاصه و در صورت میاز قابل اصلاحدر این پکیج هیچ متد تبلیغی و یا ایکن های اضافی و namespace های الکی استفاده نشدهرایگان بودهقابلیت پیاده سازی انواع جوی استیک رو داره ( داینامیک یا استاتیک )بسیار بسیار قابل شخصی سازی هست که برای جذابیت بازی خیلی مهمهحجم بسیار پایین در حد چند کیلوبایت !touch zone : با این قابلیت میتونید یک قسمت از صفحه رو به صورت منطقه قابل تاچ در نظر پگیریدپشتیبانی کامل از عمق و مراحل اجرای ui که باعث میشه راحت بشه چندین touch zone رو باهم اجرا کردتاچ های اجرا شده با این پکیج روی موبایل و کامپیوتر کاملا پشتیبانی میشن و میتونید راحت تست کنیدباگ خروج انگشت از صفحه موقع تاچ کردن در این پکیج وجود نداره و کملا حل شده است.و … https://s17.picofile.com/file/8426493576/Joystick_Pack.rar.html آموزش استفاده از پکیج virtual joystickهمچنین اگر کار با پکیج بالا برای شما مشکل بود و یا نحوه استفاده از اون رو بلد نبودید میتوانید به صورت رایگان در دوره اموزش پیاده سازی تاچ در یونیتی شرکت کنید. https://rosedev.ir/courses/%d8%af%d9%88%d8%b1%d9%87-%da%a9%d8%a7%d9%85%d9%84-%d8%a7%d9%85%d9%88%d8%b2%d8%b4-%da%a9%d8%a7%d8%b1-%d8%a8%d8%a7-%d9%be%da%a9%db%8c%da%86-virtual-joystick/ تمامی حقوق مطالب نوشته شده در این صفحه متعلق به سایت رز سافت میباشد و هرگونه کپی برداری از ان شرعا حرام و از طریق قانون قابل پیگیری است , برای خواندن مقاله های رایگان در مورد بازی سازی به ادرس زیر مراجعه نمایید.باتشکر https://rosedev.ir/%d9%85%d9%82%d8%a7%d9%84%d9%87-%d9%87%d8%a7/ </description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Tue, 16 Mar 2021 14:00:11 +0330</pubDate>
            </item>
                    <item>
                <title>ضد هک کردن بازی در یونیتی ( مقاله اختصاصی رز سافت Rosedev.ir )</title>
                <link>https://virgool.io/fboard/%D8%B6%D8%AF-%D9%87%DA%A9-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D9%85%D9%82%D8%A7%D9%84%D9%87-%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5%DB%8C-%D8%B1%D8%B2-%D8%B3%D8%A7%D9%81%D8%AA-rosedevir-z6occkwzayax</link>
                <description> https://plink.ir/66aP6 برای ساخت یک بازی کامل وقت و حوصله و حتی گاهی هذینه بسیار زیادی صرف میشه و البته تیم سازنده بازی به ازای زحمتی که برای ساخت بازی میکشه طبیعتا انتظار این رو داره که از طریق ان بازی به درامد قابل توجهی برسه و برای اینکار نیاز داریم که از طریق پرداخت درون برنامه ای به کاربر چیزهایی را بفروشیم مانند سکه , الماس , امتیاز و … اما گاهی مشاهده میشه , بازی ای که برای ساخت ان این همه تلاش شده توسط چند تازه کار با نرم افزار هایی که در اینترنت به راحتی قابل یافت هست هک شده و حتی برخی از کاربران شروع به اموزش نحوه هک بازی هم میکنن ! حال اگر همچین اتفاقی برای بازی ای که برای ان یک سال تلاش کرده اید بیوفته چیکار میکنید ؟ایا شروع میکنید که با تک تک سایت ها وبلاگ های متخلف برخورد قانونی کنید ؟ ( البته بزارید یادتون بیارم که اینجا ایرانه و باید حالا حالاها در گیر باشین تا بتوانید حقتون رو بگیرید , البته اگه بتونید ! ^_^ )بنظر من بهتره از همون اول زیرساخت های بازی رو جوری بسازید که غیر قابل هک شدن باشه , چطور ؟ پس همراه ما باشید.پرداخت درون برنامه اییکی از متداول ترین روش های هک کردن بازی استفاده از نرم افزار Lucky Patcher میباشد  , این نرم افزار در صورت روت بودن گوشی میتواند درگاه پرداخت درون برنامه  ای رو دور بزند و به نوعی بازی یا نرم افزار اندرویدی رو کرک کند , که  خوشبختانه با تدابیر امنیتی جدید پرداخت درون برنامه بازار اینکار عملا غیر ممکن شده و باخیال راحت میتوانید پرداخت درون برنامه امنی برای بازی خود پیاده سازی کنید.هک منابع بازی در حالت اجراشاید  شما هم اطلاع داشته باشید که بغیر از نرم افزار بالا , نرم افزارهای مشابه  زیادی در اینترنت وجود دارند که میتوانند منابع بازی در حال اجرا رو هک  کنند , نرم افزار هایی مانند Hack App Data , HBoy , GameCheat , GameHack و  …کارکرد  این نرم افزار ها در واقع به این صورت میباشد که دیتای بازی در حال اجرا  رو میگردند و اونها رو تغییر میدن مثلا پول بازی 1000 هست در داخل نرم  افزار عدد 1000 رو جستجو میکنند و بعد از پیدا کردن مثلا 100 عدد مشابه به  داخل بازی برمیگردند و از پول خرج میکنند مثلا مقدار پول از 1000 به 500  کاهش پیدا میکنه حالا دوباره وارد محیط نرم افزار هک میشن و اینبار در بین  100 عدد یافته شده دنبال عدد 500 میگردند و این کار را انقدر تکرار میکنند  که به یک عدد برسند و ان مقدار پول بازی است حالا مقدار اون رو عدد  99999999 قرار میدن و به راحتی از تمامی امکانات بازی استفاده میکنند , نرم  افزار های ذکر شده قادر به جستجوی متغییر های زیر هستند    int gold_i = 1000;    string gold_s = &quot;1000&quot;;    float gold_f = 1000f;    bool locked = false;متغییرهای بالا جزو پایه ای ترین اجزای سازنده کدهای بازی هستند و به این راحتی قابل هک شدن میباشند .هک فایل ذخیره شده یا save بازیبله درسته (0_0) برخی از نسخه های نرم افزار های یادشده قابلیت پیدا کردن فایل save بازی و دستکاری کردن اون رو دارند , توابعی مانند توابع زیر به راحتی هک و دستکاری میشوند.int num;num = PlayerPrefs.GetInt (&quot;num&quot;, 0); // loadPlayerPrefs.SetInt (&quot;num&quot;, num); // saveحال چاره چیست ؟حالا نوبتی هم باشه کم کم میرسیم به مبحث امنیت در بازی های یونیتی پس بریم برای ادامه مقاله …اولین قدم استفاده از پکیج Anti-Cheat Toolkit با اضافه کردن این پکیج به یونیتی چند متد امنیتی جدید به یونیتی اضافه میشه که عملا کار هک شدن به روش های بالا رو غیر ممکن میکنه و مهمتر از اون باعث کار بااون بسیار ساده بوده و همچنین باعث افت فریم ریت یا کاهش سرعت بازی نمیشود , بعد از import کردن اون به پروژه وارد اسکریپتی که میخواهیم از انتی چیت در اون استفاده کنیم میشیم شکل اولیه کد به شکل زیر میباشد :using UnityEngine;public class Save_Load : MonoBehaviour{    public int gold;    void Start()    {        LoadGold();    }    void LoadGold()    {        gold = PlayerPrefs.GetInt(&quot;gold&quot;, 100);    }    void SaveGold()    {        PlayerPrefs.SetInt(&quot;gold&quot;, gold);    }}در این حالت gold به راحتی هک میشود اما با استفاده از متد های انتی چیت ما اونو امن میکنیم , حالا به کد اصلاح شده پایین دقت کنید :using UnityEngine;using CodeStage.AntiCheat.ObscuredTypes;public class Save_Load : MonoBehaviour{    public ObscuredInt gold;    void Start()    {        LoadGold();    }    void LoadGold()    {        gold = ObscuredPrefs.GetInt(&quot;gold&quot;, 100);    }    void SaveGold()    {        ObscuredPrefs.SetInt(&quot;gold&quot;, gold);    }}به  همین راحتی متغییر gold رو امن کردیم , البته فراموش نکنید که فقط داده  هایی رو که واقعا نیازه رو با استفاده از ObscuredTypes کدگذاری کنید , با  این روش فعلا تا حدود بسیار زیادی جلوی هک شدن به وسیله نرم افزار های روت و  غیر روت رو میشه گرفت , اما هنوز تمام نشده و هنوز هم امکان هک شدن توسط  کاربران حرفه ای تر ( هکرها ) وجود داره که در ادامه به بررسی اون  میپردازیم.Decompiler هامهندسی معکوس  نرم افزارها و بازی ها دانشی که روز به روز پیشرفته تر میشه و یک خطر بزرگ  برای استارتاپ های بزرگ و کوچک محسوب میشود , حال اگر هکر یک حرفه ای باشد  چه ؟ جواب بسیار ساده است او میتواند بدون دردسر سورس کد بازی را استخراج  کند و اصلاحاتی را که میخواهد در بازی اعمال کند مثلا مقدار پول را در شروع  بازی 9999999 قرار دهد و دوباره از پروژه هک شده خروجی بگیرد و به اصطلاح  نسخه مود بازی را بسازد .راه حل مقابله با دیکامپایل شدنبرای مقابله با این نوع از هک مراحل زیر را انجام میدهیم و بعد از انجام صحیح انها درصد هک شدن بازی نزدیک به صفر خواهد بوداستفاده  از یونیتی جدید و تایید شده , منظور جدیدترین نسخه یونیتی که preview  package ها را ساپورت کند , فعلا نسخه Unity 2020.2.f1 پیشنهاد میشه.2.استفاده  از Pro Guard : یک ابزار بسیار کاربردی برای سخت تر کردن فرایند دیکمپایل و  با ترکیت اون با R8 تقریبا این فرایند رو غیر ممکن میکنه.3.  استفاده از R8 : شاید بهترین گذینه برای خروجی امن همین باشه , حالا R8  چیه ؟ در واقع R8 تمام اسکریپت ها رو از اول دوباره مینویسه و نام تمام  متدها و متغییر ها رو عوض میکنه و همچنین باعث ناخوانا شدن کدها و افزایش  سرعت بازی و کاهش حجم بازی میشه , به عنوان مثال متغییر int gold=1000 بعد  از استفاده از R8 به int H4p%5=95425 تبدیل میشه (البته این فقط یه مثال  بود )تنظیمات راجع به خروجی با R8 و Pro Guardمطابق تصویر بالا تیک سه گزینه رو میزنیم و بعد از اون ما یک خروجی بسیار  امن برای اندروید خواهیم داشت , هرگونه سوال – پیشنهاد و یا انتقاد رو از  طریق قسمت نظرات اعلام نمایید , ممنون بابت مطالعه این مقاله و امیدوارم که  مطلب مفیدی برای شما عزیزان بوده باشه.لینک سایت منبع : Rosedev.ir</description>
                <category>سالار ندایی</category>
                <author>سالار ندایی</author>
                <pubDate>Thu, 11 Mar 2021 17:59:04 +0330</pubDate>
            </item>
            </channel>
</rss>