PDA

نسخه کامل مشاهده نسخه کامل : اموزش جامع کار با سیستم جمعیت در انریل انجین 3



silsin
15-03-2012, 22:05
واقعا که این انجمن شده اینهو قبرستون ماشالله توی قبرسوت هم یاز فعالیتی هست ولی اینجا نه :31: :41:
اینم به خاطر اینکه که بگیم انجمن هنوز به طور کامل سوت و کور نشده

از طرف سایت [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
البته نویسنده اش خودمم:31:

اموزش جامع کار با سیستم جمعیت در انریل انجین 3
Crowd system
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

سیستم جمعیت در انریل انجین 3
تکنولوزِی جمعیت یا همان Crowded تکنولوژی جدیدی است که در انجین ها یا ابزار بازی سازی جهت نمایش و یا کنترل یک جمعیت خاص به کار گرفته میشود. از مزایای این سیستم این است که دیگر کارکتر فوق به عنوان یک Pawn یا بازیگر به حساب نمیاید همانطور که می دانید در صورتی که کارکتر مورد نظر از خانواده Pawn به حساب بیاید دارای بارپردازشی جدایی خواهد بود به عنوان مثال بار پردازشی جهت کنترل هوش مصنوعی / انیمیشن ها / فیزیک و غیره ... و همان سربار پردازشی که بازیکن یا کارکتر اصلی بازی بر پردازشکر مرکزی وارد می کند را نیز این کارکتر به وجود می اورد . حال در نظر بگیرید که این بار چند برابر بشود و به جای یک کارکتر با 20 یا 30 کارکتر مواجه شویم . ان وقت بار پردازشی به شدت افزایش خواهد یافت و در اینجاست که به اصطلاح افت فریم بسیار شدیدی اتفاق خواهد افتاد . در انریل انجین 3 این امر به طور کلی پیش بینی شده و با معرفی سیستم جدید جمعیت نوع جدیدی از تکنیک طراحی بازی را به وجود اورده است . در انریل انجین 3 این امر یعنی کنترل جمعیت به صورت ایجاد به اصطلاح یک Agent به وجود می اید . توجه کنید که این Agent ها Pawnیا یک بازیگر نیستند. و از فیزیک PHYS_Walking استفاده نمی کنند . انها تنها مدل هایی هستند با انیمیشن که با استفاده از قوانین خاصی حرکت می کنند. تنها می توان انها با دستورات بسیار ساده ای کنترل کرد . توجه کنید حتی اینا در مواردی نیز حتی Collision هم ندارند !همانگونه که مطرح شد هدف کنترل یک سری جمعیت د بازی می باشد که معمولا از کنترل آنها یک سری جمعیت خاص با اهداف مشخصی به وجود میایند . مثلا در بازی AssassinCreed هدف حرکت اینها در راستای یک منطقه بوده است . نکته قابل توجه در این گونه کارکتر ها این است که اگر توجه کنید رفتار آنها تقریبا مشابه یک دیگر است و تنها بازی سازان جهت پوشاندن این موضوع اقدام به ایجاد چند گروه مختلف با رفتارهای متفاوت می نمایند تا از بروز مشکل یکسانی رفتارها جلوگیری کنند.
با این حال سیستم جدید بسیار بسیار در امر ایجاد جمعیت ها مانند رفت امد در خیابان / حرکت ارتش ها / حیوانات و حتی ماشین ها نیز کاربرد فراوانی دارد . همچنین از کاربردهای مثال زدنی آن در نمایش سکانس های شهری و رفت و آمد در خیابان ها و همچنین حمله دشمنان را نیز می توان اشاره کرد .
از نکاتی که باید در طراحی اینگونه کارکترها توجه کنید هرجه کمتر بودن میزان پلی گان کارکتر فوق می باشد . قصد اصلی ما در استفاده از این سیستم هرچه بیشتر کردن تعداد کارکتر ها می باشد پس این بسیار طبیعی است که نباید برای کارکترهای سیستم جمعیت کیفیت زیادی را در نظر گرفت .
جهت شروع باید در نظر داشته باشید که موضوع کنترل این جمعیت بسیار مهم است تا حرکات غیر عادی از آنها سر نزند . بنابراین شما به راحتی می توانید از NavigationMesh نیز جهت هدایت آنها نیز به خوبی استفاده کنید .
جهت شروع باید با تعدادی از نودهای مورد نیاز جهت استفاده و اجرای این سیستم آشنا بشویم :
ابزارهای کنترل جمعیت در کیسمت
Crowd population manager
اعمالی که در کیسمت جهت کنترل و یا وارد کردن جمعیت به کار می رود فقط شامل خاموش و یا روشن کردن آن می باشد .
در ضمن استفاده از این ابزار فقط جهت کنترل یک توده از جمعیت می باشد عملکرد آن بدین صورت می باشد که تلاش اصلی آن فقط برای پر کردن محیط مورد نظر خود می باشد و در تلاش برای ایجاد و فراخوانی Agent ها هر کدام را در امتداد دیگری با فاصله چندین ثانیه ایجاد می کند. نکته قابل توجه دیگر در استفاده از این سیستم تعیین مسیر شروع و مسیر پایان می باشد . که با
کامپیوننت و ابزار درون برنامه به نام GameCrowdDestinations مسیر شروع و مسیر پایان نمایش و علامت گذاری می شود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
جهت شروع کار ابتدا باید یک لیست از Agent ها را تشکیل بدهیم .
در خود کلاس های UDK در پنجره CLASSES قسمت ContentBrowser این Agent قرار دارد البته ما به خوبی می توانیم Agent مورد نظر خودمان را با ویژگی های خودمان را نیز اضافه کنیم که در انتهای مقاله مختصرا در رابطه با روند این کار توضیح داده خواهد شد . در نرم افزار به قسمت Actor Class بروید و در قسمت جستجو نام Crowd و همچنین تیک use actor as parent رو نیز غیر فعال کنید
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بعد از انجام این کار نتایجی برای شما نمایان خواهد شد . در اینجا و در ابتدا ما نیاز به فقط دو عنوان از این نتایج داریم
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
توجه کنید برای استفاده از این ابزار باید به قالب Archtype تبدیل شوند برای این کار بر روی هر کدام راست کلیک و CreateArchtype را زده و در کادری که جهت پرسیدن نام ظاهر می شود نام مناسب و مسیر مناسبی به آن بدهید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این کار را برای دومین عنوانی که مشخصی کرده ایم انجام دهید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بعد از انجام این کار حال باید مسیر های مورد نظر را مشخص کرد برای این کار باید از Game Crowd Destination استفاده کرد که معمولا ابتدایی ترین نقطه به عنوان شروع تولید و انتهایی ترین نقطه جهت پایان در نظر گرفته میشود.
جهت انجام این کار در قسمت Actor Class ابزار مورد نظر را انتخاب و بر روی نقشه بیاورید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بعد از انجام این کار نقطه پایانی را نیز با انجام کار مشابه بر روی صحنه مشخص کنید
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بعد از انجام این باید نقطه اتصال را نیز مشخص کرد . جهت انجام این کار باید نقاط عقبی را به جلویی و همینطور به تریتیب تا انتها را به هم وصل کرد جهت انجام این کار نقطه ایک ه می خواهید از انجا شروع کنید را انتخاب و وارد تنظیمات Game Crowd Destination که به عنوان نقاط راه نما انتخاب کرده اید بشوید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در اینجا کادر را قفل کرده و مقادیر NextDestination را با مقدار بعدی پر کنید .
نکته : تیکی در اینجا با نام Kill Wen Reched وجود دارد که استفاده از آن باعث میشود Agent ها با رسیدن به این نقطه از بین بروند .
بعد از انجام این کار حال به سراغ کیسمت می رویم تا فراخوانی را به وجود بیاوریم .
در کیسمت نود :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] را فراخوانی کنید .
این نود دارای ورودی های Start : جهت شروع فراخوانی / Stop جهت پایان فراخوانی . / Warmup جهت کنترل درصدی از جمعیت در هنگام فراخوانی / KillAgent تعیین زمان و هنگام نابودی Agent ها / و Stop & Kill نیز جهت متوقف کردن در مکان خاص و همچنین نابود کردن به کار می رود.
جهت استفاده از این ابزار باید ابتدا لیست از Agent ها را وارد کنید . درحال حاظر ما این عمل را انجام نداده ایم پس باید اقدام به انجام آن بکنیم . برای این کار به مکانی که دو Archetype خودرا به وجود اورده اید رفته و وارد تنظیمات شیئ CrowdAgentList بشوید :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و با گسترش دادن آن Agent خود را که نیز به صورت Archetype در اورده اید را وارد کنید .
همچنین می توانید از MaxAllowed جهت تعیین مقدار لیست استفاده کنید .
بعد از انجام این کار آن را ذخیره کرده و وارد UTCrowdSpawner. بکنید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال با اتصال محرکی جهت شروع مانند یک Trigger و یا یک نود Level Loaded به Start این نود و همچنین اتصال نقطه شروعی که بر روی نقشه قرار داده اید به قسمت Spawn Point می توانید اولین نتیجه کار خودتان را مشاهده بکنید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

نکته : در صورتی که Agent ها فراخوانی نشدند توجه کنید که مقادیر فراخوانی آنها را کم کنید . و درصورتی که باز هم اجرا نشدند بررسی کنید که ایا نقاط راهنما یا همان Destanation را به درستی به یکدیگر و به UT CrwodSpawn متصل کرده اید یا خیز.

نتیجه کار :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

تبریک تا اینجای کار شما توانستید اولین نمونه خود را با استفاده از این سیستم پیاده سازی کنید .
همانطور که در بالا گفته شد مبنای حرکتی Agent ها بر اساس هوش مصنوعی تعریف شده آنها می باشد . پس قاعدتا با این تفاسیر باید بتوان در محیط اعمالی معمول هوش مصنوعی را بر روی آنها انجام داد. البته دقت کنید اعمال رفتاری هوش مصنوعی تنها شامل عکس العمل های از پیش تعریف شده و به قول معروف اسکریپتی می باشد ما در اینجا بر روی هوش مصنوعی در قالب مسیر یابی بحث خواهیم کرد و در ادامه مبحث هوش مصنوعی رفتاری را مورد بررسی قرار خواهیم داد.
در قالب هوش مصنوعی مسیر یابی هدف و مبنا یافتن مسیر مناسب جهت رفت و آمد است .
ابتدا باید توجه کنید که در سیستم مسیر یابی انریل انجین دو شاخص وجود دارد .
1-Navigation Mesh
2-Path Node
در اینجا سیستم Path Node به علت وجود نقاط Destanation کاربردی نداشته و غیر قابل استفاده می باشد .
اما در سیستم Navigation mesh این این امکان وجود دارد تا کاربر بتواند محیط پیش روی Agent را به اون معرفی کند و حتی کاربرد این سیستم تا انجایی پیش می رود که Agent مورد نظر قابلیت تشخیص ObstractMesh را نیز دارا می باشد .
کار بر روی این سیستم را با مثالی شروع می کنیم . فرض کنید در محیطی قرار دارید که قرار است گروهی از Agent های شما مسیر الف را به سمت مسیر ب پیشمایش بکنند و طراح مرحله شما مسیر فوق را با انواع و اقسام موانع متعدد مانند خانه های خراب / ماشین ها / موانع طبیعی و غیره ... پر کرده است . توجه کنید که در ابتدای مقاله قید شده که Agent ها نمی توانند دارای
Collison باشند بنابراین در طی محیط از درون موانع عبور خواهند کرد بنابراین کل صورت مسئله به خطر خواهد افتاد بنابراین استفاده از سیستم NavigationMesh به شدت الزامی می باشد جهت انجام اینکار نکاتی الزامی است :
1-جهت استفاده از این قابلیت ابتدای به امر نیاز است تا دو تیک مربوط به Force Obstract Mesh جهت انالیز محیط Navigation mesh برای پیدا کردن موانع و Force Nav Mesh Paing نیز جهت تشخیص این نوع محیط در محیط بازی زده شود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

2- جهت ایجاد موانع یا همان Obstract ها باید از اشیائ استاتیک استفاده کنید موارد Skeletalmesh خود Navigation محسوب میشوند وAgent ها قادر به استفاده از این گونه اشیائ را دارا نمی باشند.

جهت ساخت سطوح Navigation Mesh ما باید از شیئ Pylon استفاده بکنیم . برای دسترسی به این شیئ مانند تصویر زیر عمل کنید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بعد از ایجاد این شیئ در محیط که با ایکون P در محیط نمایش داده می شود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ساختار مربعی شکی در ابتدا در شعاع از پیش تعیین شده این شیئ تشکیل می شود. بعد از فراخوانی این شیئ اکنون نیاز داریم تا آن را به وجود بیاوریم برای این کار باید AI Path را از نو Bulid کنید بر روی Bulid Ai Path کلیک کنید
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بعد از انجام اینکار Navigation mesh مربوطه به وجود می اید . برای مشاهده آن در ادیتور کلید P را فشار دهید بعد از انجام این کار می توانید محیط در نظر گرفته شده برای NavigationMesh را مشاهده کنید
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در این محیط زنگ سبز محیط قابل حرکت و رنگ قرمز همان Obstract یا همان موانع می باشند .
حالا شیئ مورد نظر خودتان را که از نوع StaticMesh می باشد را در صحنه وارد کرده و بار دیگر Build AI Path را بزنید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همانطور که می بینید موانع قرمز به دور این اشیائ نیز کشیده شده اند.
در این مثال ما این شیئ را که به عنوان مانع به کار رفته را در مسیر حرکت دو گروه قرار دادیم
مرحله را اجرا کرده و نتیجه را مشاهده کنید . همانطور که می بینید Agent ها به جای حرکت مستقیم هنگام رسیدن به این شیئ ان را دور می زنند.

تا اینجا با نوع پیچیده تری از کنترل جمعیت در این سیستم اشنا شدیم نیاز است تا نکاتی را در ادامه مقاله بررسی کنیم :

1-در مقاله تاکید شد که درست که Agent مورد نظر وجودیت Pawn را ندارد اما تمامی اعمال / رفتار / و ویژگی های طبیعی آن باید همانند بازیکن باشد . دو ویژگی که این سیستم در اختیار ما قرار میدهد cast Shadow جهت ایجاد سایه برای Agent که متقابلا ایجاد بار پردازشی می کند و LightEnvironment که جهت فعال کردن روشنایی در Agent مورد نظر به کار می رود .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
توجه کنید که در صورتی که بعد از ایجاد Agent ها . Agent ها قابل دیدن نباشند البته از نظر نور و روشنایی بررسی کنید که ایا این دو تیک مربوطه زده شده اند یا خیر.

قبل از ادامه دادن بهتر است پارمترهای موجود در تنظیمات شیئ UT Crowd Spawn را بررسی کنیم .

bClearOldArchetypes : در صورتی که True باشد مقادیر قدیمی را از لیست جمعیت پاک می کند.
SpawnRate : چه تعداد از Agent ها در هر ثانیه فراخوانی شوند.
MaxAgents : حداکثر چه تعداد Agent می تواند در یک زمان به اصطلاح زنده باشند.
WarmUp Population Pact: کنترل درصدی از جمعیت بلافاصله بعد از فراخوانی


PlayAgentAnimation

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

توجه کنید که نقاطی که جهت نشانه گذاری برای اجرای انیمیشن به کار می روند همگی از نوع Destanation بوده که تا پیش از این در مسیر به عنوان نشانه مسیر استفاده می کردیم .
جهت انجام این کار ابتدا نقطه ای که می خواهید انیمیشن مورد نظر در هنگام رسیدن به آن اجرا شود را مشخص کنید .
نقطه Destanation مورد نظر را انتخاب و در کیسمت Agent Reached آن را وارد کنید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این محرکی مانند Triger جهت فعال سازی قسمت انیمیشن مورد نظر می باشد که Agent ها با رسیدن به این نقطه باعث فعال شدن نود انیمیشن خواهد شد .
اکنون نود Play Agent Animation را وارد کنید
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و نود های خروجی را تنظیم کنید .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تا اینجای کار قسمت اجرای انیمیشن و به اصطلاح محرک اجرا آن را به وجود اورده اید . در ادامه محتویات و پارامترهای تنظیمات
نود PlayAgentAnimation را مورد بررسی قرار می دهیم . :
دیدیم که ورودی هایی از سمت پایین به نود ما متصل شده است .
Target : محرکی است جهت تعیین زمان و مکان اجرا
Action Focus : هنگام فراخوانی و اقدام برای اجرای انیمیشن Agent های مورد نظر به اصطلاح در مواجه با خروجی این پارامتر اعمال را انجام دهند .
همچنین در تنظیمات این نود :
AnimationList: جهت تعیین انیمیشن مورد نظر جهت اجرا . توجه کنید که فقط باید نام سکانس مورد نظر در انمیشن را وارد کنید . به عنوان مثال در صورتی که انیمیشن مربوط به پریدن Jump می باشد در اینجا نیز برای فراخوانی آن باید Jump را وارد کرد

BlendInTime : زمانی که صرف رسیدن به اجرای انیمیشن بعدی صرف خواهد شد .
BlendOutTime : زمان خروج از انیمیشن فعلی
bUseRootMotion : تعیین اجرای RootMotion در انیمیشن ها
bLooping : تکرار چرخش انیمیشن ها
bFaceActionTargetFirst : در صورتی که فعال شود هدف مورد نظر قبل از اجرای انیمیشن انجام میشود.
LoopIndex : تعیین کننده تکرار کدام یک از انیمیشن ها .
LoopTime : تعیین زمان و تعداد تکرار انیمیشن ها در صورتی که مقدار 1 شود زمان انیمیشن به صورت نامحدود اجرا خواهد شد

نود Crowd population manager
نودی جهت اجرای سیستم کنترل جمعیت در Agent ها و به اصطلاح خاموش و یا روش کردن این سیستم . توجه کنید که این سیستم فقط یک بار می تواند استفاده شود. همچنین این نود قابلیت مدیریت و اجرای چندین نتوع مختلف از جمعیت ها را نیز دارا می باشد .

لینک های ورودی :
Start : فعال کردن سیستم کنترل و مدیریت جمعیت
Stop : غیر فعال کردن سیستم مدیریت جمعیت

و در تنظیمات این نود :
CrowdAgentList : لیست از Agent های مورد نظر که باید در این سیستم قرار گیرند .
bClearOldArchetypes :» در صورتی که فعال باشد لیست archetype قدیمی را حذف می کند.




برنامه نویسی :
سیستم اسکریپت Agent ها به صورت یک تک کلاس مشتق شده از کلاس GameCrowdAgentSkeletal مشتق میشود و بدین صورت رفتار های آن در درون کلاس مورد نظر جایگیری می کند . تمامی ویژگی های پیش بینی شده در درون این کلاس مشتق شده قرار می گیرد . در این مقاله قصد نداریم بخش اسکریپت نویسی را به طور کامل توضیح دهیم انجام نیازمند مقاله و یا مقالاتی دیگر می باشد .
در این بخش با بررسی کلاس مربوط به Agent های پیش فرض انریل ان را مورد بررسی قرار می دهیم .



class UTGameCrowdAgent extends GameCrowdAgentSkeletal;

/** Stop agent moving and pay death anim */
function PlayDeath(vector KillMomentum)
{
if ( WorldInfo.TimeSeconds - LastRenderTime > 1 )
{
LifeSpan = 0.01;
}
else
{
SkeletalMeshComponent.SetHasPhysicsAssetInstance(t rue);
// If we had stopped updating kinematic bodies on this character due to distance from camera, force an update of bones now.
SkeletalMeshComponent.MinDistFactorForKinematicUpd ate = 0.f;
SkeletalMeshComponent.ForceSkelUpdate();
SkeletalMeshComponent.UpdateRBBonesFromSpaceBases( TRUE, TRUE);

CollisionComponent = SkeletalMeshComponent;
SetTickGroup(TG_PostAsyncWork);
SkeletalMeshComponent.SetTickGroup(TG_PostAsyncWor k);
SkeletalMeshComponent.PhysicsWeight = 1.0;
SetPhysics(PHYS_RigidBody);
SkeletalMeshComponent.SetBlockRigidBody(true);
SkeletalMeshComponent.PhysicsAssetInstance.SetAllB odiesFixed(FALSE);
SkeletalMeshComponent.SetRBChannel(RBCC_Pawn);
SkeletalMeshComponent.SetRBCollidesWithChannel(RBC C_Default,TRUE);
SkeletalMeshComponent.SetRBCollidesWithChannel(RBC C_Pawn,TRUE);
SkeletalMeshComponent.SetRBCollidesWithChannel(RBC C_Vehicle,TRUE);
SkeletalMeshComponent.SetRBCollidesWithChannel(RBC C_Untitled3,FALSE);
SkeletalMeshComponent.SetRBCollidesWithChannel(RBC C_BlockingVolume,TRUE);
SkeletalMeshComponent.SetTraceBlocking(false,true) ;

if( KillMomentum != vect(0,0,0) )
{
SkeletalMeshComponent.AddImpulse(0.5*KillMomentum, Location, '', false);
}
LifeSpan = DeadBodyDuration;
;
}
}

defaultproperties
{
Health=20
bProjTarget=true

Begin Object Name=SkeletalMeshComponent0
SkeletalMesh=SkeletalMesh'UTExampleCrowd.Mesh.SK_C rowd_Robot'
AnimTreeTemplate=AnimTree'UTExampleCrowd.AnimTree. AT_CH_Crowd'
AnimSets(0)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman _BaseMale'
Translation=(Z=-42.0)
TickGroup=TG_DuringAsyncWork
PhysicsAsset=PhysicsAsset'CH_AnimCorrupt.Mesh.SK_C H_Corrupt_Male_Physics''
End Object

RotateToTargetSpeed=60000.0
MaxWalkingSpeed=200.0
}


در این کلاس موارد به وجود امده تنها یک تابع برای تعیین نوع مردن استفاده شده است و در قسمت DefaultProperties نیز
اسکلت مربوط به Agent مورد نظر تعریف شده است .
Health جهت تعیین میزان سلامتی
RotateToTargetSpeed جهت تعیین سرعت چرخش به سمت کاربر
کلاس فوق از GameCrowdAgentSkeletal مشتق شده است پس جهت ساخت Agent جدید شما نیز می توانید کلاس خود را مانند کلاس فوق بسازید .


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


با تشکر
حسن فخاری



نویسنده اش خودمم ولی منبعش : [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

نکته جالب : زمان نگراش مقاله فوق از 9 صبح روز چهارشنبه 24 اسفند اغاز و تا 10:45 دقیقه شب همان روز به پایان رسیده است :riz277:

YAHYA-PRO
15-03-2012, 23:23
دستت درد نکنه بخاطر وقتیکه گذاشتی:10:
شما همینطوری ادامه بده بقیه دوستان هم ترقیب میشن:31:

silsin
16-03-2012, 18:14
صد البته ترغیب میشن . حالا خوب بود یه udk.ir ای بود که مقاله ای واسش بنویسیم وگرنه همین رو هم حوصله نمی کردم . چون شمایی دومی رو هم همین الان گذاشتم رو سایت :31: