آموزش بازیسازی و برنامه نویسی | سجاد احمدی نیت
به جرئت میتونم بگم که نزدیک به 20 وبسایت تولید فایلهای 3D رو امتحان کردم، اما هیچکدوم به توازن #رایگان بودن و #دقیق بودن هوش مصنوعی Copilot3D نرسیدن!
بااینکه Meshy.ai با دقت بیشتری اینکارو انجام میده. اما Copilot 3D مدلها رو با حجم کمتر، بهینه تر و حتی رایگان تولید میکنه! کافیه یک عکس بدید، یا توضیح بدید چی میخواید(پرامپت) برات تولید میکنه! میتونید ازش استفاده کنید: https://copilot.microsoft.com/labs/experiments/3d-generations #ابزار
@Sajad_Ahmadi_Niat 🪔
۴:۲۸
آموزش بازیسازی و برنامه نویسی | سجاد احمدی نیت
یکی از هوش مصنوعی های خفنی که ازش استفاده کردم anything بوده.
هم مدل سه بعدی رو ریگ میکنه.
هم با پرامپت 3d model میسازه.
هم یک Game Ready SDKs برای تولید بازی داره.
هم یک کتابخانه حاوی مدلهای سه بعدی داره. پیشنهاد میکنم تستش کنید: https://www.anything.world/ #ابزار
@Sajad_Ahmadi_Niat 🪔
۴:۲۹
روش ۲: استفاده از Layers to Filesاین روش برای خروجی گرفتن تمام لایهها به فایلهای جداگانه با تنظیمات دقیقتر کاربرد داره: مسیر File > Export > Layers to Files رو دنبال کن. فرمت خروجی، پیشوند نام فایلها، و پوشه مقصد رو مشخص کن. روی OK کلیک کن تا همه لایهها بهصورت فایلهای مستقل ذخیره بشن.
روش ۲: استفاده از Artboardsاگر هر تصویر یا آبجکت رو روی یک آرتبورد جداگانه قرار بدی، میتونی از مسیر زیر خروجی بگیری: File > Export > Export for Screens انتخاب آرتبوردها یا آبجکتها تنظیم فرمت و پوشه مقصد کلیک روی Export
#ترفند
۱۴:۳۶
#ترفند
۱۴:۳۶
یک مخزن عالی و رایگان برای انیماتور ها
در این مخزن، شما مدل سه بعدی رو میدی و animation اون رو تحویل میگیری!بازیسازی داره روز به روز، در عین سختی، ساده تر از قبل میشه.
https://github.com/scottpetrovic/mesh2motion-app
#ابزار | #مخزن | #ai | #هوش_مصنوعی
@Sajad_Ahmadi_Niat 🪔
https://github.com/scottpetrovic/mesh2motion-app
#ابزار | #مخزن | #ai | #هوش_مصنوعی
۱۴:۳۶
چند وبسایت ساخت sfx با هوش مصنوعی 
اخیرا تکنولوژی در ساخت sound effects ها پیشرفت گسترده ای کرده. چند نمونه وبسایت که با هوش مصنوعی(ai) افکت صوتی میسازه رو براتون لیست کردم:
https://elevenlabs.io/sound-effects
https://soundeffectgenerator.org
https://sfxengine.com/
https://myedit.online/en/audio-editor/ai-sound-effect-generator
اکثرا پولی(با پلن رایگان) یا رایگان با محدودیت خاص هستند.ولی میتونید افکت های صوتی شون رو با camtasia ضبط کنید و ازش استفاده کنید
.
#ابزار | #sfx | #افکت_صوتی | #ai | #هوش_مصنوعی
@Sajad_Ahmadi_Niat 🪔
اخیرا تکنولوژی در ساخت sound effects ها پیشرفت گسترده ای کرده. چند نمونه وبسایت که با هوش مصنوعی(ai) افکت صوتی میسازه رو براتون لیست کردم:
اکثرا پولی(با پلن رایگان) یا رایگان با محدودیت خاص هستند.ولی میتونید افکت های صوتی شون رو با camtasia ضبط کنید و ازش استفاده کنید
#ابزار | #sfx | #افکت_صوتی | #ai | #هوش_مصنوعی
۱۴:۳۶
لطفا مطالب کانال رو فوروارد کنید عزیزانتا سایر دوستان هم از مطالب استفاده کننداکثر مطالب توسط خودم نوشته میشه. فوروارد شما هم یک کار خوب و خیرخواهانه ست، هم حمایت از مطالب کانال.
ممنونم

ممنونم
۱۴:۳۶
🧩 Zlib License مجوزی بسیار ساده و آزاد، مشابه MIT. اجازه استفاده تجاری، تغییر و توزیع را میدهد، بدون مسئولیت نویسنده. اغلب برای کتابخانههای فشردهسازی مانند zlib استفاده میشود.
#مطلب_کمکی
۵:۵۱
#سوالات_شما
چطوری در یادگیری توسعه بازی موفق باشیم؟
متاسفانه خیلی ها توسعه بازی رو فقط ساخت بازی میدونند. حتی گاها دیدگاه تخصصی و رشته ای تر ندارند.اگر میخواید توسعه بازی انجام بدید، پس قطعا بخش فنی با شماست. من اصولی ش رو خدمت همگی تون عرض میکنم، چون خیلی ها داخل ایران اصلا غیرتخصصی دارن آموزش میبینند یا آموزش رو ادامه میدن.
۱. ابتداء مبانی برنامه نویسی رو یاد بگیرید. الگوریتم و فلوچارت، حل مسئله و ...
۲. زبان و ریاضیات کامپیوتری تون رو کمی قویتر کنید طبق مباحث مهم (اجباری و متوقف کننده نیست ولی خوبه و همزمان انجام بدید). مباحث نظری بازیسازی هم اگر میتونید جمع و جور کنید تا یاد بگیرید، خوبه.
۳. یک انجین قوی رو انتخاب کنید و طبق اون برید جلو (معمولا توسعه دهندگان یونیتی که زبان سی شارپ رو پشتیبانی میکنه رو انتخاب میکنند. البته بعضی ها هم ابتداء سعی میکنند یک زبان رو به شکل قوی یاد بگیرن و بعد برن سراغ انجین که این هم خوبه، ولی خیلی وقت بره و گاها مطالب اضافی زیاد به شما یاد داده میشه، ولی از اونور برعکسش هم گاها باعث میشه شما خیلی چیزها رو یاد نگیرید)
۴. زبان برنامه نویسی و انجین رو که تا یک حدی مسلط شدید، شروع کنید پروژه های کوچک با گرافیک ساده زدن، بهبودش دادن، و یادگیری بیشتر سی شارپ و تکنیک های فنی بازیسازی
۵. همزمان کار با ابزارهای هوش مصنوعی مربوط به حوزه توسعه و کدنویسی رو هم یاد بگیرید.
۶. تکنیک های اشکالزدایی، بهینه سازی و ... رو همزمان یاد بگیرید. بااینکه پیشنهاد میکنم مباحث نظری فنی بازیسازی رو پیش از شروع بازیسازی بهتره یاد بگیرید، اما اینجا هم میتونید یاد بگیرید.
۷. تکنیک ها و tip های انجین و زبان برنامه نویسی اون رو یاد بگیرید. همزمان درخواست بدید به شرکت ها و کارآموزی کنید و تجربه تون رو افزایش بدید. لینکدین تون رو قوی کنید. همزمان پروژه هایی هم بزنید و روی گیتهاب بارگذاری کنید.
۸. بازیهای حرفه ای رو کلون کنید. حتی با گرافیک ساده. مکانیک های مختلف رو پیاده سازی کنید. مقالات و کتابهای حرفه ای حوزه فنی رو بخونید. از تجارب دیگران استفاده کنید.
۹. مهارت های فنی ارتباطی گسترش بدید. مثلا گیت و گیت لب (البته اگر وارد تیمی بشید، اینها رو یاد میگیرید از قبل)
۱۰. حوزه فنی تون رو گسترش بدید. VR ، شبکه ، ارتباط با سخت افزار ، Cloud و ...
۱۱. وارد مباحث حرفه ای مثل مهندسی معکوس، هوش مصنوعی(مثل شبکه های عصبی)، معماری شناسی بازی، دیکامپایل، هک اخلاقی بازیها و ... برای شناخت معماری بازیها و افزایش امنیت بازیها برید که معمولا اینطور موارد، بین رشته ای هست. مثلا مهندسی شبکه و مهندسی کامپیوتر و ...
۱۲. سعی کنید همزمان کمی گیم دیزاین هم بخونید. بازیسازی که گیم دیزاین میخونه و یاد میگیره، خیلی از دیگران فهیم تره.
همین موارد رو بصورت پشت سر هم یا همزمان وقت بگذارید. میانگینی ۳ ساعت در روز میتونه خوب باشه. مطالعات تون رو حتما از دست ندید، در انجمن ها و دیسکاسهای داخلی و خارجی و مجازی و حقیقی شرکت کنید، همیشه درحال آموزش دیدن و مشورت کردن باشید(خاضع باشید)، سورس پروژه بازیها رو تست و فضولی کنید، در گیتهاب و یوتیوب و مستندات انجین و زبان برنامه نویسی حتما بگردید، از هوش مصنوعی بعنوان راهنما استفاده کنید ولی بهش وابستگی ذهنی پیدا نکنید.
#تجربه_شخصی | #توصیه | #مطلب_کمکی
@Sajad_Ahmadi_Niat 🪔
متاسفانه خیلی ها توسعه بازی رو فقط ساخت بازی میدونند. حتی گاها دیدگاه تخصصی و رشته ای تر ندارند.اگر میخواید توسعه بازی انجام بدید، پس قطعا بخش فنی با شماست. من اصولی ش رو خدمت همگی تون عرض میکنم، چون خیلی ها داخل ایران اصلا غیرتخصصی دارن آموزش میبینند یا آموزش رو ادامه میدن.
۱. ابتداء مبانی برنامه نویسی رو یاد بگیرید. الگوریتم و فلوچارت، حل مسئله و ...
۲. زبان و ریاضیات کامپیوتری تون رو کمی قویتر کنید طبق مباحث مهم (اجباری و متوقف کننده نیست ولی خوبه و همزمان انجام بدید). مباحث نظری بازیسازی هم اگر میتونید جمع و جور کنید تا یاد بگیرید، خوبه.
۳. یک انجین قوی رو انتخاب کنید و طبق اون برید جلو (معمولا توسعه دهندگان یونیتی که زبان سی شارپ رو پشتیبانی میکنه رو انتخاب میکنند. البته بعضی ها هم ابتداء سعی میکنند یک زبان رو به شکل قوی یاد بگیرن و بعد برن سراغ انجین که این هم خوبه، ولی خیلی وقت بره و گاها مطالب اضافی زیاد به شما یاد داده میشه، ولی از اونور برعکسش هم گاها باعث میشه شما خیلی چیزها رو یاد نگیرید)
۴. زبان برنامه نویسی و انجین رو که تا یک حدی مسلط شدید، شروع کنید پروژه های کوچک با گرافیک ساده زدن، بهبودش دادن، و یادگیری بیشتر سی شارپ و تکنیک های فنی بازیسازی
۵. همزمان کار با ابزارهای هوش مصنوعی مربوط به حوزه توسعه و کدنویسی رو هم یاد بگیرید.
۶. تکنیک های اشکالزدایی، بهینه سازی و ... رو همزمان یاد بگیرید. بااینکه پیشنهاد میکنم مباحث نظری فنی بازیسازی رو پیش از شروع بازیسازی بهتره یاد بگیرید، اما اینجا هم میتونید یاد بگیرید.
۷. تکنیک ها و tip های انجین و زبان برنامه نویسی اون رو یاد بگیرید. همزمان درخواست بدید به شرکت ها و کارآموزی کنید و تجربه تون رو افزایش بدید. لینکدین تون رو قوی کنید. همزمان پروژه هایی هم بزنید و روی گیتهاب بارگذاری کنید.
۸. بازیهای حرفه ای رو کلون کنید. حتی با گرافیک ساده. مکانیک های مختلف رو پیاده سازی کنید. مقالات و کتابهای حرفه ای حوزه فنی رو بخونید. از تجارب دیگران استفاده کنید.
۹. مهارت های فنی ارتباطی گسترش بدید. مثلا گیت و گیت لب (البته اگر وارد تیمی بشید، اینها رو یاد میگیرید از قبل)
۱۰. حوزه فنی تون رو گسترش بدید. VR ، شبکه ، ارتباط با سخت افزار ، Cloud و ...
۱۱. وارد مباحث حرفه ای مثل مهندسی معکوس، هوش مصنوعی(مثل شبکه های عصبی)، معماری شناسی بازی، دیکامپایل، هک اخلاقی بازیها و ... برای شناخت معماری بازیها و افزایش امنیت بازیها برید که معمولا اینطور موارد، بین رشته ای هست. مثلا مهندسی شبکه و مهندسی کامپیوتر و ...
۱۲. سعی کنید همزمان کمی گیم دیزاین هم بخونید. بازیسازی که گیم دیزاین میخونه و یاد میگیره، خیلی از دیگران فهیم تره.
همین موارد رو بصورت پشت سر هم یا همزمان وقت بگذارید. میانگینی ۳ ساعت در روز میتونه خوب باشه. مطالعات تون رو حتما از دست ندید، در انجمن ها و دیسکاسهای داخلی و خارجی و مجازی و حقیقی شرکت کنید، همیشه درحال آموزش دیدن و مشورت کردن باشید(خاضع باشید)، سورس پروژه بازیها رو تست و فضولی کنید، در گیتهاب و یوتیوب و مستندات انجین و زبان برنامه نویسی حتما بگردید، از هوش مصنوعی بعنوان راهنما استفاده کنید ولی بهش وابستگی ذهنی پیدا نکنید.
#تجربه_شخصی | #توصیه | #مطلب_کمکی
۵:۵۲
*
جویسی (Juicy) در بازیسازی یعنی چی؟*
دیدم این روزا خیلی درمورد کلمه جویسی صحبت میشه. گفتم یک توضیحی بدم.اگه تا حالا یه بازی رو بازی کردی و از حرکت ساده یه دکمه یا پریدن یه کاراکتر کلی کیف کردی، احتمالاً اون بازی "جویسی(آبدار)" بوده!در #گیم_دیزاین ، جویسی یعنی اضافه کردن جزئیات بصری، صوتی و لمسی که تجربه بازی رو لذتبخشتر و زندهتر میکنه. این جزئیات ممکنه تأثیر مستقیمی روی گیمپلی نداشته باشن، ولی حس خوبی به بازیکن میدن و باعث میشن بازی "زنده" به نظر بیاد.
مثال:فرض کن تو یه بازی پلتفرمر، وقتی شخصیت میپره:
یه افکت نور کوچیک زیر پاهاش ظاهر میشه
صدای بامزهای پخش میشه
دوربین یه لرزش کوچیک داره
امتیاز با یه انیمیشن رنگی بالا میرههمه اینا باعث میشن حس کنی یه حرکت ساده، خیلی هیجانانگیز بوده. اینه قدرت جویسی!البته همه اینها به تجربه و مثالها و آزمون و خطا بستگی داره.
بازیهایی مثل Fruit Ninja یا Candy Crush پر از المانهای جویسی هستن. هر برش، هر انفجار آبنبات، یه جویسی بصریه.اگه بازیساز هستی، یادت باشه: جویسی بودن بازی، میتونه تفاوت بین یه بازی معمولی و یه بازی اعتیادآور باشه. هر جویسی، یک قلقلک ذهنی برای ادامه دادن بازی و به یادآوردن خاطره خوشه.
#مقاله | #علم_بازی | #طراحی_بازی | #game_designآموزش بازیسازی و برنامهنویسی
️:
@Sajad_Ahmadi_Niat 🪔
دیدم این روزا خیلی درمورد کلمه جویسی صحبت میشه. گفتم یک توضیحی بدم.اگه تا حالا یه بازی رو بازی کردی و از حرکت ساده یه دکمه یا پریدن یه کاراکتر کلی کیف کردی، احتمالاً اون بازی "جویسی(آبدار)" بوده!در #گیم_دیزاین ، جویسی یعنی اضافه کردن جزئیات بصری، صوتی و لمسی که تجربه بازی رو لذتبخشتر و زندهتر میکنه. این جزئیات ممکنه تأثیر مستقیمی روی گیمپلی نداشته باشن، ولی حس خوبی به بازیکن میدن و باعث میشن بازی "زنده" به نظر بیاد.
#مقاله | #علم_بازی | #طراحی_بازی | #game_designآموزش بازیسازی و برنامهنویسی
۱۶:۲۹
وقتی بازی میسازی، فقط طراحی گیمپلی و گرافیک مهم نیست؛ باید فکر پول درآوردن هم باشی! اینکه بازیات چطور پولساز بشه، یه تصمیم مهمه که روی تجربه بازیکن، میزان درآمد و حتی محبوبیت بازی تأثیر میذاره. توی این بخش میخوایم سه مدل معروف درآمدی رو بررسی کنیم که معمولا استفاده میشه: فریمیوم، پریمیوم و اشتراکی.
*
#مقاله_ | #مطلب_کمکی
۱۶:۳۰
*کمپین تولد 14 سالگی مکتبخونه! *
کمپین تولد مکتب خونه آغاز شده و تا پایان هفته ادامه خواهد داشت. حتی دوره دوره آموزش ساخت بازی Color Switch در یونیتی هم به مدت کوتاه رایگان شده!در این کمپین، کاربران میتوانند با استفاده از کد تخفیف HBD یک دوره را بهصورت کاملاً رایگان ثبتنام کرده و بدون پرداخت هیچ هزینهای یادگیری خود را آغاز کنند.
نکته مهم:برای دورههایی که گواهینامه مکتبخونه دارند، کاربران باید پیش از افزودن دوره به سبد خرید، تیک گزینهی دسترسی کامل را بردارند تا کد تخفیف بهدرستی اعمال شود.
لینک دوره آموزش ساخت بازی Color Switch در یونیتی:https://mktb.me/0mig/
لینک لندینگ همه دوره ها:https://mktb.me/i6un/
#کمپین | #تخفیف
@Sajad_Ahmadi_Niat 🪔
#کمپین | #تخفیف
۱۶:۳۰
۱۶:۳۱
آموزش بازیسازی و برنامه نویسی | سجاد احمدی نیت
* انجمن علمی دانشجویی بازیهای رایانهای دانشگاه شهید چمران اهواز با همکاری سایر انجمن های علمی کشور برگزار میکند:*
همه چی از یه دکمه Start شروع میشه...
اگه همیشه دلت میخواسته بدونی بازیها چطور ساخته میشن الان وقتشه وارد دنیای واقعی بازیسازی بشی!
* کارگاه ۱۴ جلسهای آموزش: مبانی فنی بازیسازی* با تدریس
مهندس سجاد احمدینیت (با چندین سال تجربه حرفهای در صنعت بازیسازی)
شروع دوره: ۱۷ آبان ۱۴۰۴
مکان: گوگل میت / اسکایروم
همراه با گواهی معتبر
این فقط یه کلاس نیست...شروع مسیرت برای تبدیل شدن به یه Game Developer واقعیه! این کارگاه بخشی از مجموعه دورههای توانمندسازی Level Up مخصوص علاقهمندان بازیسازی
برای ثبتنام و ارتباط با ما: Instagram: [@cgames_scu] Telegram: [@arezoo_0230]
️ آمادهای لِوِل بعدی خودتو باز کنی؟ بزن Start و وارد بازی شو! - - - - - - - - - - - - - -
انجمن علمی دانشجویی بازیهای رایانهای
@Sajad_Ahmadi_Niat 🪔
عزیزان این دوره، برای اولین بار در کشور با این تیتر و سرفصل هایی که اعلام شده درحال برگزاری است.قرار هست در این دوره به برخی از ابتداییات بخش فنی توسعه بازی بپردازیم.
مواردی که در تصویر بالا نوشته شده، سعی میشه که در دوره ان شاالله بهش اشاره بشه.
#دوره_آموزشی | #دوره_آنلاین
@Sajad_Ahmadi_Niat 🪔
مواردی که در تصویر بالا نوشته شده، سعی میشه که در دوره ان شاالله بهش اشاره بشه.
#دوره_آموزشی | #دوره_آنلاین
۱۶:۳۱
بازارسال شده از صنایع خلاق نسیم مهر
Avalaible NowOn itch.io:https://icerosestudio.itch.io/nomo-3d-apple-pack
@nasim_mehr_creative_industries
۱۶:۳۲
#پیکسل_آرت | #Pixel_Artآموزش بازیسازی و برنامهنویسی
۱۲:۴۹
#ارور_شناسی
پیغام Security Alert در یونیتی هاب ورژن های اخیر، برای هشدار مسیر دادن یونیتی هایی است که بصورت دستی(local) نصب شده اند. به این معنا، که ممکن است حاوی ویروس و trojan ها، یا تزریق وابستگی های مشکوک در ساختار نرم افزار باشند که پروژه شما و سیستم عامل و سخت افزارتان را تحت تاثیر قرار میدهند و شاید هم عامل جاسوسی باشند!
در کل این error ، مشکل خاصی نیست. صرفا یک هشدار عادی ولی قابل توجه است.
آموزش بازیسازی و برنامهنویسی
️:
@Sajad_Ahmadi_Niat 🪔
پیغام Security Alert در یونیتی هاب ورژن های اخیر، برای هشدار مسیر دادن یونیتی هایی است که بصورت دستی(local) نصب شده اند. به این معنا، که ممکن است حاوی ویروس و trojan ها، یا تزریق وابستگی های مشکوک در ساختار نرم افزار باشند که پروژه شما و سیستم عامل و سخت افزارتان را تحت تاثیر قرار میدهند و شاید هم عامل جاسوسی باشند!
در کل این error ، مشکل خاصی نیست. صرفا یک هشدار عادی ولی قابل توجه است.
آموزش بازیسازی و برنامهنویسی
۱۲:۴۹
تخفیف بلک فرایدی متخصص بازیسازی دانشجویاردوره های طلایی یونیتی(بنده) و آنریل انجین(سجاد میرشبی عزیز) رو + به همراه برخی از دوره های مهم بازیسازی سایتبا تخفیف بسیار عالی
بر روی سایت قرار گرفته. تقریبا 20 ساعت بیشتر مهلت نیست(البته احتمالا تمدید بشه)
حتما از کوپن ها استفاده کنید چون محدودیت تعداد هم دارن. فعلا که زیر 120 کوپن باقی مونده!
استفاده از تخفیف و ورود به سایت دانشجویار
آموزش بازیسازی و برنامهنویسی
️:
@Sajad_Ahmadi_Niat 🪔
حتما از کوپن ها استفاده کنید چون محدودیت تعداد هم دارن. فعلا که زیر 120 کوپن باقی مونده!
استفاده از تخفیف و ورود به سایت دانشجویار
آموزش بازیسازی و برنامهنویسی
۱۲:۴۹
بازیسازان ایرانی، سه واحد درسی باید "اخلاق حرفه ای" پاس کنند واقعا.تا نحوه استفاده از Asset ها + اخلاق استفاده از Asset های داخلی و خارجی + خط مشی پلتفرمها و انواع لایسنس ها و همه اینها رو بیاموزنحالا این بنده خدا شاید نه، ولی واقعا خیلی از کسانیکه به سرعت وارد بازیسازی ایران میشن بصورت غیرحرفه ای، اصلا از کپی رایت داخلی هم حتی چیزی نمیدونند!
#حرف_دلآموزش بازیسازی و برنامهنویسی
️:
@Sajad_Ahmadi_Niat 🪔
#حرف_دلآموزش بازیسازی و برنامهنویسی
۱۲:۴۹
مشکل Race Condition ، یکی از رایجترین اشتباهات در کدنویسی 🩺
گاها در توسعه بازی یا نرم افزار، مشاهده میکنید که کدهای شما به خوبی نوشته شده اند، اما به خوبی کار نمیکنند. گاها در وضعیتی، ممکن است اجرای کدها با یکدیگر رقابت کنند و اولویت اجرای آنها به هم بریزد.این مشکل زمانی رخ میدهد که چند پردازش یا نخ (Thread) بهطور همزمان به منابع مشترک دسترسی پیدا کنند و ترتیب اجرای آنها بر نتیجه نهایی تأثیر بگذارد. این وضعیت میتواند منجر به باگهای غیرقابل پیشبینی و (گاها) خطرات امنیتی شود.
مشکل Race Condition چیست؟مشکل Race Condition (وضعیت رقابتی) یک اشکال رایج در برنامهنویسی همزمان (Concurrent Programming) است که زمانی رخ میدهد که دو یا چند نخ (Thread) یا پردازش (Process) بهطور همزمان به یک منبع مشترک(مانند متغیر، فایل، پایگاه داده) دسترسی پیدا کنند و ترتیب اجرای آنها بر نتیجه نهایی تأثیر بگذارد. اگر این دسترسیها بهدرستی همگامسازی نشده باشند، ممکن است نتایج نادرست یا غیرمنتظرهای تولید شود.
مشکل Race Condition میتواند منجر به مشکلات زیر شود: خطاهای منطقی در برنامه: مانند محاسبات اشتباه یا دادههای نادرست. گاها یک چیزی باید اولویت داشته باشد اما در خروجی نمیتوان متوجه شد که چه روند اجرایی ای برتری پیدا کرده و شمارا به اشتباه می اندازد. آسیبپذیریهای امنیتی: هکرها میتوانند از این آسیبپذیری برای دور زدن کنترلهای امنیتی استفاده کنند. برای مثال، در برخی سیستمهای بانکی، مهاجمان با ارسال همزمان چند درخواست برداشت، موفق به برداشت چندباره از یک حساب شدهاند. خرابی دادهها: در سیستمهای چندنخی، دادههای مشترک ممکن است بهصورت ناقص یا نادرست ذخیره شوند. رفتار غیرقابل پیشبینی: برنامه ممکن است در برخی اجراها درست کار کند و در برخی دیگر نه، که اشکالزدایی را بسیار دشوار میکند.
چگونه Race Condition را تشخیص دهیم؟تشخیص Race Condition معمولاً دشوار است، اما روشهایی برای شناسایی آن وجود دارد:لاگ گیری(Log): بهترین و ساده ترین روش برای فهمیدن رقابت بین دستورات و شروط تستهای همزمانی (Concurrency Testing): اجرای چندباره برنامه با بار بالا برای آشکار شدن رفتارهای غیرمنتظره ابزارهای تحلیل استاتیک و داینامیک: مانند ThreadSanitizer، Helgrind یا ابزارهای مشابه در IDEها بررسی کد برای منابع مشترک بدون همگامسازی: اگر متغیر یا منبعی توسط چند نخ بدون قفل (Lock) استفاده شود، مشکوک به Race Condition است.
در وهله های سخت تر، برای جلوگیری یا رفع Race Condition، از تکنیکهای همگامسازی استفاده میشود:
اول Locks (قفلها): سادهترین روش برای جلوگیری از دسترسی همزمان به منابع مشترک. با استفاده از mutex یا synchronized در زبانهایی مانند Java یا threading.Lock در Python.
دوم Semaphores: برای کنترل تعداد نخهایی که به یک منبع دسترسی دارند.
سوم Atomic Operations: استفاده از عملیات اتمی که بهصورت ذاتی غیرقابل تقسیم هستند.
چهارم Thread-safe Data Structures: استفاده از ساختارهای دادهای که برای استفاده همزمان طراحی شدهاند.
پنجم Avoid Shared State: طراحی برنامه بهگونهای که نیاز به اشتراک منابع بین نخها به حداقل برسد.
(شرط اتمی (Atomic Condition) یا عملیات اتمی (Atomic Operation) به عملیاتی گفته میشود که بهصورت کامل و بدون امکان توقف یا مداخله توسط نخ یا پردازش دیگر انجام میشود. یعنی این عملیات یا بهطور کامل انجام میشود یا اصلاً انجام نمیشود، و هیچ حالت میانی یا ناقصی ندارد.)
🧪 مثال ساده از Race Conditionفرض کنید دو نخ بهطور همزمان مقدار یک متغیر counter را افزایش دهند:
counter = 0
def increment(): global counter for in range(1000):
counter += 1
در این حالت، مقدار نهایی counter ممکن است کمتر از مقدار مورد انتظار باشد، چون عملیات counter += 1 اتمی نیست. برای رفع این مشکل باید تکنیک زیر را انجام داد:
import threading
counter = 0
lock = threading.Lock()
def increment():
global counter
for in range(1000): with lock: counter += 1
البته گاها مشکل Race Conditon (شرط رقابتی) با جابجا کردن کدها در توابع اولویت دار حل میشود. ممکن است اسکریپتی بالاتر یا پایینتر باشد، یا در تابعی باشد که زودتر اجرا میشود، یا تابعی باشد که شرط اجرای آن دیرتر از تابعی دیگر اجرا میشود و ... که یکی از مهمترین مشکلها در بازیسازی و توسعه نرم افزار است و باید کمی وقت گذاشته شده و با log گیری حل شود.
#مطلب_کمکی | #مطلب_آموزشیآموزش بازیسازی و برنامهنویسی
️:
@Sajad_Ahmadi_Niat 🪔
گاها در توسعه بازی یا نرم افزار، مشاهده میکنید که کدهای شما به خوبی نوشته شده اند، اما به خوبی کار نمیکنند. گاها در وضعیتی، ممکن است اجرای کدها با یکدیگر رقابت کنند و اولویت اجرای آنها به هم بریزد.این مشکل زمانی رخ میدهد که چند پردازش یا نخ (Thread) بهطور همزمان به منابع مشترک دسترسی پیدا کنند و ترتیب اجرای آنها بر نتیجه نهایی تأثیر بگذارد. این وضعیت میتواند منجر به باگهای غیرقابل پیشبینی و (گاها) خطرات امنیتی شود.
مشکل Race Condition چیست؟مشکل Race Condition (وضعیت رقابتی) یک اشکال رایج در برنامهنویسی همزمان (Concurrent Programming) است که زمانی رخ میدهد که دو یا چند نخ (Thread) یا پردازش (Process) بهطور همزمان به یک منبع مشترک(مانند متغیر، فایل، پایگاه داده) دسترسی پیدا کنند و ترتیب اجرای آنها بر نتیجه نهایی تأثیر بگذارد. اگر این دسترسیها بهدرستی همگامسازی نشده باشند، ممکن است نتایج نادرست یا غیرمنتظرهای تولید شود.
مشکل Race Condition میتواند منجر به مشکلات زیر شود: خطاهای منطقی در برنامه: مانند محاسبات اشتباه یا دادههای نادرست. گاها یک چیزی باید اولویت داشته باشد اما در خروجی نمیتوان متوجه شد که چه روند اجرایی ای برتری پیدا کرده و شمارا به اشتباه می اندازد. آسیبپذیریهای امنیتی: هکرها میتوانند از این آسیبپذیری برای دور زدن کنترلهای امنیتی استفاده کنند. برای مثال، در برخی سیستمهای بانکی، مهاجمان با ارسال همزمان چند درخواست برداشت، موفق به برداشت چندباره از یک حساب شدهاند. خرابی دادهها: در سیستمهای چندنخی، دادههای مشترک ممکن است بهصورت ناقص یا نادرست ذخیره شوند. رفتار غیرقابل پیشبینی: برنامه ممکن است در برخی اجراها درست کار کند و در برخی دیگر نه، که اشکالزدایی را بسیار دشوار میکند.
در وهله های سخت تر، برای جلوگیری یا رفع Race Condition، از تکنیکهای همگامسازی استفاده میشود:
(شرط اتمی (Atomic Condition) یا عملیات اتمی (Atomic Operation) به عملیاتی گفته میشود که بهصورت کامل و بدون امکان توقف یا مداخله توسط نخ یا پردازش دیگر انجام میشود. یعنی این عملیات یا بهطور کامل انجام میشود یا اصلاً انجام نمیشود، و هیچ حالت میانی یا ناقصی ندارد.)
🧪 مثال ساده از Race Conditionفرض کنید دو نخ بهطور همزمان مقدار یک متغیر counter را افزایش دهند:
counter = 0
def increment(): global counter for in range(1000):
counter += 1
در این حالت، مقدار نهایی counter ممکن است کمتر از مقدار مورد انتظار باشد، چون عملیات counter += 1 اتمی نیست. برای رفع این مشکل باید تکنیک زیر را انجام داد:
import threading
counter = 0
lock = threading.Lock()
def increment():
global counter
for in range(1000): with lock: counter += 1
البته گاها مشکل Race Conditon (شرط رقابتی) با جابجا کردن کدها در توابع اولویت دار حل میشود. ممکن است اسکریپتی بالاتر یا پایینتر باشد، یا در تابعی باشد که زودتر اجرا میشود، یا تابعی باشد که شرط اجرای آن دیرتر از تابعی دیگر اجرا میشود و ... که یکی از مهمترین مشکلها در بازیسازی و توسعه نرم افزار است و باید کمی وقت گذاشته شده و با log گیری حل شود.
#مطلب_کمکی | #مطلب_آموزشیآموزش بازیسازی و برنامهنویسی
۱۲:۵۰