انجمن های تخصصی  فلش خور
آموزش ساخت خشاب اسلحه ( آپگرید اسلحه ) Unreal Script - نسخه‌ی قابل چاپ

+- انجمن های تخصصی فلش خور (http://www.flashkhor.com/forum)
+-- انجمن: نرم افزار های ساخت بازی (http://www.flashkhor.com/forum/forumdisplay.php?fid=13)
+--- انجمن: ساخت، ویرایش و -- بازی ها (http://www.flashkhor.com/forum/forumdisplay.php?fid=9)
+---- انجمن: UDK (http://www.flashkhor.com/forum/forumdisplay.php?fid=16)
+---- موضوع: آموزش ساخت خشاب اسلحه ( آپگرید اسلحه ) Unreal Script (/showthread.php?tid=264482)



آموزش ساخت خشاب اسلحه ( آپگرید اسلحه ) Unreal Script - امیر‌حسین - 02-03-2017

سلام دوستان

در این اموزش میخایم یه خشاب اضافه کنیم که با برخورد پلایر ( Pawn ) با اون خشاب اسلحه یا همون تیرها پر بشه . دقیقا" مثل اکثر بازیهای تیر اندازی که بعضی جاها خشاب هست .





مراحل کلی :

مرحله اول : اضافه کردن کد اضافه کردن تیر به کلاس اصلی اسلحه

مرحله دوم : ساخت یک اکتور که با برخورد با اون فانکشن مربوط به افزایش تیر فراخانی بشه





=============





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





در اینجا من ShochRifle رو انتخاب کردم

ابتدا باید یه فانکشن بنویسیم تا خشاب رو پر کنه . برای این کار چون میخایم برای ShochRifle خشاب بنویسیم اسمشو سرچ میکنیم تا کلاسهای مربوط به اونو پیدا کنیم

با سرچ کلمه ShochRifle در مسیر Development\Src با چند تا کلاس مواجه میشیم . ما باید این فانکشن رو در کلاس اصلی اصلحه که مستقیما" از UTWeapon مشتق گرفته شده بنویسیم پس میریم سراغ کلاس UTWeap_ShockRifleBase

این کلاس رو باز کنید . همونطور که گفتم میبینید که از UTWeapon مشتق گرفته شده .

این کدها رو بهش اضافه میکنیم :







1



2



3



4



5



کد:
function UpgradeWeapon()


کد:
{


کد:
AddAmmo(MaxAmmoCount);


کد:
}


توضیحات :









AddAmmo یه فانکشن هست در کلاس UTWeapon که میتونیم با استفاده ازش هر تعداد مهمات نیاز داشتیم اضافه کنیم





MaxAmmoCount یک متغیر که در کلاس UTWeapon هست که اطلاعات مربوط به حده اکثر تیر مجاز برای اسلحه در اون ذخیره میشه





در کل با استفاده از این :



1



2



کد:
AddAmmo(MaxAmmoCount);






میگیم حده اکثر تیر مجاز برای اسلحه فعلی رو اضافه کن









مرحله اول تموم شد









خوب حالا ما باید یه کلاس خودمون بنویسیم که یک اکتور باشه که با برخورد کرکتر با اون در صورتی که همین اسلحه دستش باشه تیر رو اضافه کنه و خودش حذف بشه

برای این کار این کدها رو باید بنویسید :







1



2



3



4



5



6



7



8



9



10



11



12



13



14



15



16



17



18



19



20



21



22



23



24



25



26



27



28



29



30



31



32



33



34



35



36



37



38



39



40



41



کد:
class



کد:
WeaponUpgrade extends Actor


کد:
placeable;

[ltr]
 
 
[/ltr]

کد:
event Touch(Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal)


کد:
{


کد:
if


کد:
(Pawn(Other) != none && UTWeap_ShockRifleBase(Pawn(Other).Weapon) != none)


کد:
{


کد:
UTWeap_ShockRifleBase(Pawn(Other).Weapon).UpgradeWeapon();


کد:
Destroy();


کد:
}


کد:
}

[ltr]
 
 
 
 
[/ltr]

کد:
defaultproperties


کد:
{


کد:
bCollideActors=True


کد:
Begin Object Class=DynamicLightEnvironmentComponent Name=MyLightEnvironment


کد:
bEnabled=TRUE


کد:
End Object


کد:
Components.Add(MyLightEnvironment)


کد:
Begin Object Class=StaticMeshComponent Name=PickupMesh


کد:
StaticMesh=StaticMesh


کد:
'UN_SimpleMeshes.TexPropCube_ Dup'


کد:
Materials(0)=Material


کد:
'EditorMaterials.WidgetMateri al_Y'


کد:
LightEnvironment=MyLightEnvironment


کد:
Scale3D=(X=0.125,Y=0.125,Z=0.125)


کد:
End Object


کد:
Components.Add(PickupMesh)


کد:
Begin Object Class=CylinderComponent Name=CollisionCylinder


کد:
CollisionRadius=16.0


کد:
CollisionHeight=16.0


کد:
BlockNonZeroExtent=


کد:
true


کد:
BlockZeroExtent=


کد:
true


کد:
BlockActors=


کد:
true


کد:
CollideActors=


کد:
true


کد:
End Object


کد:
CollisionComponent=CollisionCylinder


کد:
Components.Add(CollisionCylinder)


کد:
}


توضیحات :



1



2



کد:
if


کد:
(Pawn(Other) != none && UTWeap_ShockRifleBase(Pawn(Other).Weapon) != none)






دستور شرطی که میگه اگر پلایر وجود داشت و سلاح UTWeap_ShockRifle رو هم داشت فلان عملیات رو انجام بده



1



2



کد:
UTWeap_ShockRifleBase(Pawn(Other).Weapon).UpgradeWeapon();






این کد میگه برو به کلاس UTWeap_ShockRifleBase و فانکشن UpgradeWeapon رو اجرا کن که باعث میشه محمات اضافه بشه

Destroy();

اینم که خیلی ساده میگه اکتور حذف بشه





خوب این کدها داخل ایونت Touch قرار داره چون میخایم وقتی برخورد بین کرکتر با این اکتور انجام شد کدهای داخلش اجرا بشه





کدهای مربوط به بخش defaultproperties هم فکر نکنم نیازی به توضیح داشته باشه کدهایی هست که تقریبا" در هر اکتوری وجود داره و بدنه اصلی رو تشکیل میده مثل Colession یا تاثیر نورها بر اکتور یا مش اون و ...





سوالی بود درخدمتم

موفق باشین