27-07-2015، 8:05
سلام دوستان
در این اموزش میخایم یه خشاب اضافه کنیم که با برخورد پلایر ( Pawn ) با اون خشاب اسلحه یا همون تیرها پر بشه . دقیقا" مثل اکثر بازیهای تیر اندازی که بعضی جاها خشاب هست .
مراحل کلی :
مرحله اول : اضافه کردن کد اضافه کردن تیر به کلاس اصلی اسلحه
مرحله دوم : ساخت یک اکتور که با برخورد با اون فانکشن مربوط به افزایش تیر فراخانی بشه
=============
خوب اول باید تصیمی بگیریم این خشاب رو برای کدوم اسلحه بسازیم
در اینجا من ShochRifle رو انتخاب کردم
ابتدا باید یه فانکشن بنویسیم تا خشاب رو پر کنه . برای این کار چون میخایم برای ShochRifle خشاب بنویسیم اسمشو سرچ میکنیم تا کلاسهای مربوط به اونو پیدا کنیم
با سرچ کلمه ShochRifle در مسیر Development\Src با چند تا کلاس مواجه میشیم . ما باید این فانکشن رو در کلاس اصلی اصلحه که مستقیما" از UTWeapon مشتق گرفته شده بنویسیم پس میریم سراغ کلاس UTWeap_ShockRifleBase
این کلاس رو باز کنید . همونطور که گفتم میبینید که از UTWeapon مشتق گرفته شده .
این کدها رو بهش اضافه میکنیم :
توضیحات :
AddAmmo یه فانکشن هست در کلاس UTWeapon که میتونیم با استفاده ازش هر تعداد مهمات نیاز داشتیم اضافه کنیم
MaxAmmoCount یک متغیر که در کلاس UTWeapon هست که اطلاعات مربوط به حده اکثر تیر مجاز برای اسلحه در اون ذخیره میشه
در کل با استفاده از این :
میگیم حده اکثر تیر مجاز برای اسلحه فعلی رو اضافه کن
مرحله اول تموم شد
خوب حالا ما باید یه کلاس خودمون بنویسیم که یک اکتور باشه که با برخورد کرکتر با اون در صورتی که همین اسلحه دستش باشه تیر رو اضافه کنه و خودش حذف بشه
برای این کار این کدها رو باید بنویسید :
[ltr]
[/ltr]
[color][size][font][ltr][size][size][font]
[/font][/size][/size][/ltr][/font][/size][/color]
توضیحات :
دستور شرطی که میگه اگر پلایر وجود داشت و سلاح UTWeap_ShockRifle رو هم داشت فلان عملیات رو انجام بده
این کد میگه برو به کلاس UTWeap_ShockRifleBase و فانکشن UpgradeWeapon رو اجرا کن که باعث میشه محمات اضافه بشه
Destroy();
اینم که خیلی ساده میگه اکتور حذف بشه
خوب این کدها داخل ایونت Touch قرار داره چون میخایم وقتی برخورد بین کرکتر با این اکتور انجام شد کدهای داخلش اجرا بشه
کدهای مربوط به بخش defaultproperties هم فکر نکنم نیازی به توضیح داشته باشه کدهایی هست که تقریبا" در هر اکتوری وجود داره و بدنه اصلی رو تشکیل میده مثل Colession یا تاثیر نورها بر اکتور یا مش اون و ...
سوالی بود درخدمتم
موفق باشین
در این اموزش میخایم یه خشاب اضافه کنیم که با برخورد پلایر ( 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]
کد:
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();
کد:
}
کد:
}
[/font][/size][/size][/ltr][/font][/size][/color]
کد:
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 یا تاثیر نورها بر اکتور یا مش اون و ...
سوالی بود درخدمتم
موفق باشین