Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> ساخت بازی با نرم افزار Unity -> یک ترفند برای جلوگیری از افت فریم بر اثر پلی زیاد
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي
برو به صفحه 1, 2  بعدي

یک ترفند برای جلوگیری از افت فریم
نويسنده
پيغام
alpine
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 2 شنبه 23 آذر 1388
تعداد ارسالها: 431


5 شنبه 11 شهريور 1389 - 21:58
پاسخ بصورت نقل قول
سلام .
من دیروز بعد از این که یک مدل رو داخل مکس طراحی کردم و به موتور ایمپورت کردم متوجه شدم که به علت گستردگی محلی که ساخته بودم و زیاد بودن مجموع پلیگانهای موجد در اون صحنه کارم دچار افت فریم شده . همین بود که به فکر افتادم اگر بشه یک کار کوچیک کرد که در طول بازی مشها تا زمانی که به آنها نیاز ندارم رندر نشون و جی پی یو رو مشغول نکنند میتونه خیلی کار رو روونتر کنه .
برای این کار بعد از چندی فکر کردن یک روش خیلی خیلی ساده پیدا کردم و خوش بختانهجواب داد (به خصوص اگر در کارتون از سایه استفاده میکنید خیلی میتونه کمکتون کنه.)

(البته در همه نوع بازی و صحنه اگر بخواهید استفاده کنید ممکنه کارتو زیاد جالب در نیاد. بیشتر در کارهای اول شخص و سوم شخص و کلا کارهایی که در اونها به طور کامل به کل صحنه اشراف ندارید میخوره)

ببینید شما ممکنه نخواهید همه ی اجسام بازیتون شامل این نوع رندر بشه پس اول یک Game Object/ Creat Empty بسازید و اسم اون رو Render بگذارید . حالا هر ابجکت یا چیزی که میخواهید شامل این کد بشه رو زیر مجموعه ی Render کنید مثل خانه ها - زمینها - درو دیواره ... خلاصه هرچیز که ساختید و پلی داره. (توجه! بازیکن اصلی یا همو پلایر رو زیر مجموعه نکنید .)
خب یک جاوا اسکریپت بسازید و کد زیر رو در اون کپی کنید .
كد:

var Player:Transform;
var Fasele:int;
function FixedUpdate () {
   var object=gameObject.GetComponentsInChildren(Renderer);
   for(var meshs:Renderer in object){
      if(Vector3.Distance(meshs.transform.position,Player.position)>Fasele){
         meshs.enabled=false;
      }else{
         meshs.enabled=true;
      }
   }
}

درسته کدهاش کم بودEmbarassed
خب کد رو به Render بدید و به متغییر Player بازی کن اصلی رو نسبت بدید.

متغیر Fasele هم تعیین میکنه که اگر مش چه مقدار دروتر از بازیکن بود دیگه غیر فعال بشه.

خب همین .
(باز میگم اگه از سایه استفاده میکنید میتونه خیلی کمک کنه . و در حالی به فریم ریت کمک میکنه یه مقدار به کار CPU اضافه میکنه ! کم. اینو گفتم که دیگه تکمیل بشه).

لطفا بعد از استفاده بگید که جواب گرفتید یا خیر

خدا نگهدار.

_________________
Email:b_c.info@Yahoo.com
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
Moha-k
در حال رشد
در حال رشد


تاريخ عضويت: 3 شنبه 3 آذر 1388
تعداد ارسالها: 54
محل سكونت: اصفهان


جمعه 12 شهريور 1389 - 04:26
پاسخ بصورت نقل قول
فکر خوبیه من هنوز امتحان نکردم

_________________
www.falaghsoft.ir
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر
 

نويسنده
پيغام
vahidpoor
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: 4 شنبه 31 تير 1388
تعداد ارسالها: 531
محل سكونت: مشهد


جمعه 12 شهريور 1389 - 04:37
پاسخ بصورت نقل قول
این یک جورایی همون LOD در حالت صفر و یکش
در بازی های اول شخص بیشترین کاربرد رو داره مخصوصا بازی هایی که از زمنیهای با دید زیاد استفاده میکنن

_________________
همیشه زمانی برای شروع است
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر
 

نويسنده
پيغام
Xhizors
مدیر انجمن
مدیر انجمن


تاريخ عضويت: 1 شنبه 19 ارديبهشت 1389
تعداد ارسالها: 251
محل سكونت: 127.0.0.1


جمعه 12 شهريور 1389 - 04:45
پاسخ بصورت نقل قول
درسته. در كل از Lod يه صورت chain استفاده مي‌شه و براي كمك هم از fog. ولي اين كد فكر كنم بيشتر براي بازي‌هاي ايزومتريك كاربرد داشته باشه.
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر
 

نويسنده
پيغام
miladigs
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 5 شنبه 24 ارديبهشت 1388
تعداد ارسالها: 435


جمعه 12 شهريور 1389 - 10:22
پاسخ بصورت نقل قول
البته يه كد كاملتر از اين توي فروم يونيتي هست كه LOD رو پیاده کرده.

موفق باشی.

_________________
براي بدست آوردن چيزي كه تا به حال نداشتم بايد كسي شوم كه تا به حال نبودم!
WWW.BARMANDEV.COM
WWW.ZANAGAMES.COM
مرجع معرفی،نقدوبررسی اپلیکیشن های موبایل
www.appreview.ir
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
محمد روحیان
بازی ساز
بازی ساز


تاريخ عضويت: 3 شنبه 15 دي 1388
تعداد ارسالها: 137
محل سكونت: قم


جمعه 12 شهريور 1389 - 12:30
پاسخ بصورت نقل قول
alpine من كه باهاش خيلي حال كردم با افت فريم خيلي مشكل داشتم!! Very Happy Very Happy Very Happy
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي
 

نويسنده
پيغام
alpine
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 2 شنبه 23 آذر 1388
تعداد ارسالها: 431


جمعه 12 شهريور 1389 - 15:54
پاسخ بصورت نقل قول
نقل قول:
این یک جورایی همون LOD در حالت صفر و یکش
در بازی های اول شخص بیشترین کاربرد رو داره مخصوصا بازی هایی که از زمنیهای با دید زیاد استفاده میکنن

درسته .

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

_________________
Email:b_c.info@Yahoo.com
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
Unity3D
مدیر انجمن
مدیر انجمن


تاريخ عضويت: 2 شنبه 23 آذر 1388
تعداد ارسالها: 1034


جمعه 12 شهريور 1389 - 20:54
پاسخ بصورت نقل قول
سلام

alpine, كدي كه نوشتي خيلي سنگينه ، و تو بيشتر موارد كار رو برعكس كندتر ميكنه !!! يه سرچ بزن قبلا سيستم LOD رو برا یونیتی نوشتن ...
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
alpine
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 2 شنبه 23 آذر 1388
تعداد ارسالها: 431


جمعه 12 شهريور 1389 - 21:38
پاسخ بصورت نقل قول
Unity3D, جان یک امتحان بکن کد رو خیلی قشنگ جواب میده. به امتحانش میرزه

فقط به خاطر حلقه ی for یک مقدار ممکنه روی کار Cpu اثر بگذاره. که این هم در اول کار تذکر دادم

بله اگر سیستم LOD رو بخوای با سرچ تو اینترنت پیدا کنیم زیاد هست فقط گفتم یک چیز ساده بنویسیم که هم کاربرد خودش رو داشته باشه هم بفهمیم قطعه کدی که نوشتیم چیکار میکنه نه این که از اینترنت کد رو بگیریم و بدون این که بفهمیم استفاده کنیم.

در هر صورت این کد خیلی خیلی ساده هست و نباید ازش انتظار داشت ولی یقینن کار رو سنگینتر نمیکنه!

_________________
Email:b_c.info@Yahoo.com
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
Unity3D
مدیر انجمن
مدیر انجمن


تاريخ عضويت: 2 شنبه 23 آذر 1388
تعداد ارسالها: 1034


شنبه 13 شهريور 1389 - 13:02
پاسخ بصورت نقل قول
alpine, بله اگه اين كد رو شما به 2 يا 3 تا آبجكت فوق Highpoly نسبت بدی شاید قشنگ کار کنه ولی وقتی تعداد آبجکتهایی که این اسکریپت رو بهش نسبت میدی زیادتر بشه ... خودت متوجه میشی که بازیت سبک نمیشه هیچ سنگینتر هم میشه !!
پیاده سازی یه سیستم بهینه ساز چیزی نیست که با چند خط کد بشه انجام داد ...

برای کار بهینه سازی این قسمت از manual رو مطالعه بفرمایید :
Unity Manual > Advanced > Optimizing Graphics Performance
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 1 از 2 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد
برو به صفحه 1, 2  بعدي


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |