PDA

نسخه کامل مشاهده نسخه کامل : موزش ساخت خشاب اسلحه ( آپگرید اسلحه ) Unreal Script



Reza Azimy_RW
25-02-2012, 12:45
سلام دوستان
خیلی وقت بود فعالیت چندانی نداشتم گفتم بهتره امروز یه آموزش بنویسم [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در این اموزش میخایم یه خشاب اضافه کنیم که با برخورد پلایر ( Pawn ) با اون خشاب اسلحه یا همون تیرها پر بشه . دقیقا" مثل اکثر بازیهای تیر اندازی که بعضی جاها خشاب هست .

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

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

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

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





function UpgradeWeapon()
{
AddAmmo(MaxAmmoCount);
}


توضیحات :



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

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

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

AddAmmo(MaxAmmoCount);

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



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


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


class WeaponUpgrade extends Actor
placeable;

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).UpgradeW eapon();
Destroy();
}
}


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)
}

توضیحات :


if(Pawn(Other) != none && UTWeap_ShockRifleBase(Pawn(Other).Weapon) != none)


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


UTWeap_ShockRifleBase(Pawn(Other).Weapon).UpgradeW eapon();


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

Destroy();

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

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

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

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

rezarrrr
25-02-2012, 13:02
میتونی یکم ساده تر توضیح بدی که بدونم چی گفتی؟ هیچی متوجه نشدم

Reza Azimy_RW
25-02-2012, 13:20
خوب کجاشو متوجه نشدی ؟ بگو تا کامل توضیح بدم
سعیمو کردم تا حد ممکن جوری بنویسم همه متوجه بشن

rezarrrr
25-02-2012, 15:26
در اینجا من ShochRifle رو انتخاب کردم
ابتدا باید یه فانکشن بنویسیم تا خشاب رو پر کنه . برای این کار چون میخایم برای ShochRifle خشاب بنویسیم اسمشو سرچ میکنیم تا کلاسهای مربوط به اونو پیدا کنیم
با سرچ کلمه ShochRifle در مسیر Development\Src با چند تا کلاس مواجه میشیم . ما باید این فانکشن رو در کلاس اصلی اصلحه که مستقیما" از UTWeapon مشتق گرفته شده بنویسیم پس میریم سراغ کلاس UTWeap_ShockRifleBase
این کلاس رو باز کنید . همونطور که گفتم میبینید که از UTWeapon مشتق گرفته شده .
این کدها رو بهش اضافه میکنیم :






function UpgradeWeapon()
{
AddAmmo(MaxAmmoCount);
}



سرچ رو کجا انجام بدم ؟
وقتی تو گیم هستیم یا چی؟
بعد اگه ممکنه یه اموزش تصویری بیشتر کمک میکنه

Reza Azimy_RW
25-02-2012, 16:03
اموزش تصویری که واسه کد نویسی نیاز نیست
ببین سرچ تو آدرسی که نوشتم . قصد اصلی پیدا کردن کلاسهای مربوطه هست .
برو به آدرسی که یو دی کی رو نصب کردی بعد پوشه Development\Src اونجا تمام کلاسها هست تو اون پوشه رو منظورم بود سرچ کنی
بازم جایی مشکل داشتی بگو

rezarrrr
25-02-2012, 17:32
اها حالا افتاد :دی
الان میرم تو نخش
ممنون