ساخت انجین بازی Game engine

شروع موضوع توسط saalek110 ‏24 آگوست 2019 در انجمن منطق و الگوریتم برنامه‌نویسی

  1. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    چند روز با unity کار کردم.
    دسترسی سریع و کامل:
    فکر می کنم هر شکلی رسم می کنیم مثل unity بعدا باید سریع قابل دسترس باشه و قابل جابجایی و چرخش و حذف و دوبله شدن و غیره باشد.
    هیچ چیزی نباید از کنترل خارج باشد.

    قابل جدا شدن و ذخیره به عنوان یک پروژه:
    و هر پروژه هم قابل save در پوشه مخصوص خودش باشد.
    و بشود تمام اشیای یک پروژه را از بازی ساز جدا کرد و در پروژه و پوشه خاص خودش ذخیره کرد.
    یعنی محدوده ((بازی ساز)) و ((بازی)) کاملا از هم جدا باشد.

    استقلال هر شی:
    و هر شکل هم کاملا قابل جدا کردن از شکل های دیگر باشد و مستقل باشد.
    دسته بندی:
    ولی تعدادی از اشیا باید در یک دسته هم قرار بگیرند. مثلا اجزای یک کلبه باید همه در یک دسته قرار بگیرند که بشود کل کلبه را جابجا کرد یا کپی از کلبه گرفت و غیره.

    تکمیل تا انتها:
    همچنین فکر می کنم تا بازی ساز کامل نشده نباید مشغول ساخت بازی شد. چون سختی ها باعث خوابیدن کار می شود.
     
    آخرین ویرایش: ‏17 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏12 سپتامبر 2019
  2. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    unity_live_preview_setup.png
    تصویر unity :
    در سمت چپ لیست اشیا را داریم.
    در وسط اشیا را ملاحظه می کنیم .
    در سمت راست پنجره خصوصیات هر شی را داریم.

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

    چیزهایی که در یونیتی لیست می شود شامل:
    احجام
    نور . نورها انواع مختلف دارد. مثل دایرکشنال یا نقطه ای و غیره.
    دوربین.
    کاراکتر بازی مثل اول شخص.


    sound listener همراه دوربین اصلی است یا بعدا به کاراکتر منتقل می شود.

    کدها روی هر حجم انداخته می شود تا اجرا شود.مثلا روی یک کره انداخته می شود تا اجرا شود.
    کدها به زبان سی شارپ یا جاوا اسکریپت است. می توانید نوع فایل کد را انتخاب کنید. و با پسوند مناسب ذخیره کنید.

    در اکتیوورلد همان دنیای مجازی هم کدها داخل هر شی نوشته میشد. ولی محدودیت های بیشتری آنجا موجود بود. ولی فکر می کنم secondlife برنامه نویسی کاملتر و راحت تری دارد.
     
    آخرین ویرایش: ‏13 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏12 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  3. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    در یونیتی بعد ایجاد شی و ادیت ابعاد و محل و چرخش و تکسچر و ... می شود یک فایل کد هم روی آن انداخت.


    در یونیتی خلق اشیا در حالت اجرا هم میشه کار کرد.
     
    آخرین ویرایش: ‏12 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏12 سپتامبر 2019
  4. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    همه کارها در حالت اجرا: Run time create everything

    همین کاری که با زبان سی و opengl میشه انجام داد با unity(یا خیلی بازی سازهای دیگر) هم میشه انجام داد.
    یعنی هم در محیط سی و هم با کدنویسی یونیتی(یا خیلی بازی سازهای دیگر) به زبان سی شارپ یا جاوا اسکریپت مانندش
    می توان اشیایی را در حالت اجرا خلق کرد. در فایل یا جور دیگر ذخیره کرد و اول بازی Load کرد.

    یعنی بازی یک Loding دارد که از لیستی که ما در حالت Run time تهیه کرده ایم اشیایی را خلق می کند.

    مزایای استفاده از بازی ساز: درگیر opengl و یادگیری آن نمی شوید. شاید بشود گفت یک میان بر است.
     
    آخرین ویرایش: ‏18 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏17 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  5. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    شرح جزییات:
    برای اینکه کمی به موضوع نزدیک تر شوید کمی بیشتر شرح می دهم.
    یک مکعب خلق می کنید. فعلا 10 مشخصه داردشامل:
    اول: 3 تا مختصات x و y و z آن
    دوم : 3 تا چرخش های آن حول 3 محور
    سوم: 3 تا سایزهای 3 بعد آن
    دهم: تکسچر آن.
    البته تعداد زیادی صفات دیگر می شود اضافه کرد ولی فعلا با 10 تا شروع می کنیم.
    این صفات در فایلی نوشته می شود. با تغییر آن فایل می توان محل و ابعاد و ... آبجکت را تنظیم کرد.در یونیتی می توان فایل کدی به شی وصل کرد. در آن فایل کد خود شی فایلش را خوانده و صفات خود را تنظیم می کند.


    در موقع شروع بازی تمامی این فایلها در مرحله Loading تبدیل به اشیا می شود و هر یک در جای خود قرار می گیرد و صفات خود را دریافت می کند.
    همچنین هر شکل فایل کدش را می توان تنظیم کرد و دارای رفتار خاصی باشد. مثلا به کاراکترهای بازی واکنش نشان دهد. مثلا دری باشد که اتوماتیک باز می شود.
     
    آخرین ویرایش: ‏18 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏18 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  6. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    Unity3D:

    a10.jpg

    بعدا در مرحله Loading بازی فایلهای تکست جمع بندی و پردازش و تبدیل به اشیای ثابت یا دارای واکنش می شوند.
     
    آخرین ویرایش: ‏18 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏18 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  7. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    یونیتی از بازی شما apk هم می سازد.
    ولی دو تا خطا می گیرد. یکی ورژن sdk
    یکی هم می گوید باندل ایدنتیفایر اشتباه است. باید این طوری باشد:
    com.companyname.productname
    چون قبلا اینها را دادید و باندل ایدنتیفایر شما مثل خط بالا تنظیم نشده خطا می دهد.
    این باندل ایدنتیفایر را این طوری پیدا کنید. در همان صفحه بیلد پلیر ستینگ را بزنید...
    a1.jpg
    و بعد other setting را بزنید
    a2.jpg
    .بعد باندل ایدنتیفایر را می بینید. از کادر بالا نام کمپانی و نام محصول را کپی کنید تا مثل خط فوق باندل ایدنتیفایر خود را بسازید.

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

    تا اینکه امروز اندروید استودیو نصب کردم و پوشه sdk را به ورژن 28 ارتقا داد. البته باز یونیتی به ورژن قسمت پلت فرم تولز platform-tools خطا داد(ورژنش 20 بود میگفت 21 می خواهد. من از گوگل 29 پیدا کردم و نصب کردم.) با همان روش آن تاپیک بسته مزبور را دانلود کردم و apk ساخته شد. یعنی امروز احتمالا ترکیب آپدیتهای اندروید استودیو(یا کارهای احتمالی دیگر که در کامپیوتر من انجام داده) و ارتقای دستی من باعث ارتقای بسته های مورد نظر یونیتی شده .

    حالا بازی ام در تبلت هم اجرا شده. و این خیلی خوب است. :):):) همان اجرای کامپیوتر را در تبلت هم دارم. :green::paint: حدود 30 مگا حجم apk من شده.یک پروژه خالی هم apk کردم 15 مگا شد.
    به جای ماوس از لمس میشه استفاده کرد. ماوس کارش تغییر زاویه نگاه و مسیر حرکت بود.
    ولی بجای کلیدهای جهت که بازیکن راه میرفت فعلا جایگزین پیدا نکردم.

    :nokte:پس یک مزیت دیگر یونیتی این است که وقتی بازی را بسازید هم در کامپیوتر اجرا میشه و هم در گوشی شما. و جاهای دیگر مثل webgl که من وبی آن را هنوز امتحان نکرده ام.
     
    آخرین ویرایش: ‏19 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏19 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  8. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    چند تا عکس از آبجکتهای آماده که همین طوری بردم داخل بازی پست می زنم. از این سایتهای دانلود مجانی مدل دانلود کردم.
    s1.jpg s2.jpg s3.jpg
    هیچ یک از این مدلها را من نساختم. از سایتها دانلود کردم و در بازی وارد کردم.
     
    آخرین ویرایش: ‏26 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏19 سپتامبر 2019
  9. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    کار بازی سازی را من شامل 3 قسمت می دانم.

    اول تمیزکاری محیط
    دوم استفاده از تکنولوژی های موجود
    سوم واردات تکنولوژی

    هر 3 قسمت مهم است و و باید به موقع خودش انجام شود. در پستهای بعدی در مورد هر یک صحبت می کنیم.
     
    نوشته شده توسط saalek110 در ‏20 سپتامبر 2019
  10. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    استفاده از تکنولوژی موجود : مثلا یک درخت دارید و با تکثیر آن یک باغ می سازید. مسلما باغ با تک درخت فرق دارد ولی اینجا شما چیز جدیدی یاد نگرفته اید بلکه از امکانات موجود دارید استفاده می کنید. شاید بشه اسم این قسمت را سلیقه یا خلاقیت گذاشت.
     
    آخرین ویرایش: ‏21 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏20 سپتامبر 2019
  11. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    اما تمیزکاری محیط:
    این قسمت مهم است و اگر انجام نشود کار با مشکل مواجه می شود.

    مثلا باید مپ و نقشه برنامه خود را رسم کنید. در یک برنامه 10 خطی همه چیز جلوی چشم شماست و مپ نمی خواهد.

    کلا هرچه برنامه بزرگ تر می شود میزان وقتی که روی منظم کردن برنامه می گذاریم درصدش بالا می رود.

    اما تمیزکاری فقط تهیه مپ نیست.

    افزایش خوانایی از دیگر موارد است.
    افزایش خوانایی شامل خیلی چیزها می شود. یک قسمت مهم کار با کامنت ها است. کامنت نوشته هایی است که بین کدها می نویسیم تا برای خود یا دیگر برنامه نویس ها راهنما باشد ولی کامپیوتر توجهی به کامنت ها ندارد.
    کامنت ها هم نباید کم باشد و هم نباید زیاد و مزاحم باشد.
    یک سری کدها را ما کامنت می کنیم یعنی از کار می اندازیم. باید ببینیم آنها باید همان شکل بمانند یا به جای دیگر منتقل شوند یا کلا پاک شوند.
     
    آخرین ویرایش: ‏21 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏20 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  12. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    شاید به بحث های بالا علاقه ای نداشته باشید و فقط دنبال افزایش تکنولوژی ها باشید.
    ولی باعث اتلاف وقت میشه و مشکلات در کار ایجاد می شود. بازدهی پایین می آید.
     
    آخرین ویرایش: ‏21 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏20 سپتامبر 2019
  13. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    نمونه هایی از افزایش خوانایی :

    استفاده از متغیر گلوبال در برنامه به عنوان رابط شاید کار درستی نباشه ولی ممکنه در جایی اجتناب ناپذیر بشه. جلوی تعریف آن متغیر باید بنویسید این متغیر کدام دو قسمت را به هم وصل می کند.
    کدام کلیدها در برنامه استفاده شده. لیست کلیدهای استفاده شده در برنامه باید جایی نوشته بشه تا مبادا اشتباهی یک کلید برای دو کار در نظر گرفته نشود. مثلا حرف ایکس کیبورد دو جا برایش کار در نظر بگیرید. در برنامه های کوچک در ذهن می ماند ولی در برنامه های بزرگ باید لیست تهیه شود.
     
    نوشته شده توسط saalek110 در ‏20 سپتامبر 2019
  14. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    همه اینها را خودتان می دانستید. ولی انجام ندادن هر یک از موارد بالا در آن استیج خاص که بهش نیاز احساس میشه باعث شروع مشکل و اتلاف وقت میشه.
    پس باید بدانید در کدام مرحله کدام کار دیگه ضروری است. مثلا لیست کردن دکمه های کیبورد استفاده شده.

    پس لازمه تا لیست این نوع کارها را داشته باشید و در هر پروژه موقع هر کار که رسید آن کار را انجام دهید.
    من لیست کاملی اینجا ننوشتم این نوع کارها بیشتر از این مواردی است که من نوشتم ولی فعلا در ذهنم نیامد تا بنویسم. خودتان باید لیست کاملتر این نوع کارها را تهیه کنید و عمل کنید.

    فقط هم تهیه مپ و تمیزکاری و لیست گیری نیست.
    قسمت استفاده از تکنولوژی های موجود هم مهم است. چیزهایی که یاد گرفتید را باید خوب استفاده کنید. وگرنه باعث اتلاف است. یعنی کلی زحمت می کشید یاد می گیرید ولی می ماند خاک می خورد.
     
    آخرین ویرایش: ‏21 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏20 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  15. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    انشقاق پروژه. ترک خوردن پروژه.

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

    انشقاق یا ترک خوردن پروژه یک مورد از آفت های کنترل نداشتن روی کل پروژه است.
     
    نوشته شده توسط saalek110 در ‏20 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  16. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    فعلا این قسمت را به عنوان مقدمه بخوانید تا بعد.
     
    نوشته شده توسط saalek110 در ‏20 سپتامبر 2019
  17. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    موکول به بعد نه تخریب:

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

    حالا این چیز اضافه هر چیزی می تواند باشد. از یک درخت کج تا یک خط کد تا یک رنگ که خودتان اختراع کردید و حالا می خواهید عوض کنید.

    پس تصمیم نادرست نگیرید. تا از کاری اطمینان ندارید انجام ندهید.
    اگر مزاحمتان است به جای دیگر منتقل کنید که زیاد دم دست نباشد.
     
    نوشته شده توسط saalek110 در ‏20 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  18. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    بازی چیست؟
    شاید سوال بی معنایی به نظر برسد ولی جای بحث دارد.
    آیا هر محیط گرافیکی بازی است؟ شاید بفرمایید داستان نیاز دارد.
    آیا هر داستانی ایجاد کنیم در هر محیطی که باشد بازی محسوب می شود؟
    من بازیهایی دیدم که داستان داشت ولی بی نهایت از نظر گرافیکی ساده بود.

    داشتن لول Level و امتیاز گیری شاید جزو چیزهای اساسی بازی باشد.

    امروز توانستم به شی ساخته شده در حالت اجرا در یونیتی تکسچر هم بدهم. ولی با کپی کردن متریال یک آبجکت موجود.
    یعنی شما همین طور که در زمین در حالت اجرا می چرخی ساخت و ساز هم می کنی. یعنی مرحله طراحی و مرحله استفاده در یک زمان است.
     
    آخرین ویرایش: ‏26 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏21 سپتامبر 2019
    the_king از این پست تشکر کرده است.
  19. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    بازی یک محصول هنری است.
    مثل فیلم سینمایی.
    بازی فقط یک نرم افزار نیست.

    و وقتی صحبت از هنر می شود پای خیلی چیزها وسط می آید و دامنه بحث بسیار گسترده می شود.

    اینکه از اجرا صحبت می کنیم باز ابعاد مختلف موفقیت در اجرا مطرح است.
    مثلا یک فیلم شما را می چسباند به صندلی سینما. یا یک بازی حداکثر فشار را به شما می آورد. آیا این به معنی موفقیت است؟
    اما ابعاد دیگر موفقیت چیست؟
    از نظر من ایجاد تغییرات عمقی تر در کاربر. حالا چه سینما و چه بازی.
    ایجاد یک روحیه یا تغییر یک روحیه.
    یا آموزش پایه ای یک مهارت.
    اینها اهداف عالی تر هستند.
     
    آخرین ویرایش: ‏26 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏21 سپتامبر 2019
  20. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    پس وقتی شما در ایجاد محیط گرافیکی بازی خود موفق شدی تازه کار شروع می شود.
    من الان محیط 3 بعدی خود را ایجاد کرده ام. الان تازه بحث این است که چه اثری می خواهم بر استفاده کننده بگذارم.
    مسلما می خواهم اثرات خوبی بر خود و کاربران خود بگذارم.

    مثلا صحنه های زیبا اثرات خوبی می گذارد.


    flower-painting.jpg
     
    آخرین ویرایش: ‏26 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏21 سپتامبر 2019

به اشتراک بگذارید