المشاركة الأصلية بواسطة Lover Game
مشاهدة المشاركة
إعـــــــلان
تقليص
لا يوجد إعلان حتى الآن.
شــــــــ دوال اليونتى ــــــــــرح
تقليص
X
-
Lover Game : جزاك الله كل خير على المجهود الرائع..فى الحقيقه انا انبهرت بانه بقى ملف سهل التدوال..بكدا اى حد جديد او مش كويس فى الانجليزى , بأمر الله هيلاقى شىء يساعده..مش كل الناس عندها انترنت..جزاك الله كل خير.
هحاول قدر الامكان انهى الموضوع كله قبل نهايه فبراير ان شاء الله..علشان لو فى اى شىء جديد هنبدأ نتناقش فيهMHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
functions
10-OnControllerColliderHitبسم الله..
عدنا من جديد..وجزاكم الله كل خير على الردود المشجعه و على الدعوات الحلوه..
الفانكشن دى OnControllerColliderHit هيا عباره عن فانكشن OnTrigger أو فانكشن OnCollision ولكن من نوع خاص. يعنى لو اتكلمنا على الاستخدام او الفائده منها. فهى هيا نفس الفائده من الاتنين اللى فاتو. ولكن هنا بيكون الشرط من تحققها هو غريب شويه :
-احد الاجسام يحمل Collider من اى نوع
-الجسم الاخر يحمل character Controller - ودا للى ميعرفشى..عباره عن كومبوننت بيستخدم لمحاكاه نظام التحكم فى اللاعب.
وممكن نستخدم الفانكشن دى فى حجات كتير , زى بظبط ما بنستخدم الOnCollision أو OnTrigger .
يبقى نراجع مراجعه سريعه عشان نقدر نفرق بين الثلاث حالات :
OnCollision : تشترط احتواء كل من الجسمين على Collider من اى نوع (بدون تفعيل التريجر )
OnTrigger : تشترط احتواء كل من الجسمين على Collider من اى نوع ( ولا بد من تفعيل التريجر فى احد الجسمين بالاضافه لاحتواء احدهم او كلاهما على RigidBody )
OnControllerColliderHit : تشترط ان يكون احد الجسمن عباره عن CharacterController و الاخر يحتوى على Collider (ولا يشترط تفعيل التريجر فى الكولايدر )
معلومه سريعه :
كومبوننت الـ CharacterController عندما يضاف لجسم ما..فكأنك اضفت الى هذا الجسم :
RigidBody
Capsul Collider
Trigger
Movement Script
وعشان كدا وجود كومبوننت الcharacter controller كأحد اطراف تحقيق فانكشن OnControllerColliderHit يعادل الشروط الموجوده فى OnCollision و OnTrigger
ناخد مثال بسيط :
فنفترض اننا عملنا عنصر و حطينا عليه الكركتر كنترولر و عملنا اسكربت بسيط للحركه. كل ما علينا هو اننا نربط الاسكربت البسيط بتاعنا فى الشخصيه و عند التصادم هنلاقى النتيجه. زى كدا :
كود:function OnControllerColliderHit (hit : ControllerColliderHit) { if (hit.gameObject.name == "enemy"){ Debug.Log ("the character hit an enemy now "); } }
MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
functions
11-OnJointBreak
بسم الله..
هنكلم دلوقتى عن فانكشن قليل جدا لما حد بيستخدمها ولكنها فانكشن سريعه جدا و قويه جدا. اللى بيستهدم الفانكشن دى غالبا بيكون اللعبه بتاعته فيها شخصيات او حبال او راجدولل..
فانكشن OnJointBreak بتستخدم لما بيحصل كسر للوصلات او المفاصل..طيب يعنى ايه ؟؟
تعالو نكلم بإيجاز عن موضوع الوصلات دا..
فلنفترض انك فى اللعبه بتاعتك عاوز تعمل بندول ساعه او حبل او سلسله جنزير ؟؟ و يكون بيتحرك اتوماتيك بناء على القوه اللى موجوده فى المشهد سواء ان كانت رياح او سواء ان كانت اطلاق نار او حتى شخصيه بتتخبط فيه زى لعبه Limbo
انت بتقوم ببناء مجموعه من الcapsul colliders و بتحط على كل منها Rigid body و بعد كدا كومبوننت مهم وهو joint و الكمبوننت دا بيختلف بناء على نوف الوصلات اللى انت عاوز تستخدمها لأن فى منه حوالى ٤ او ٥ انواع على حسب ما اتذكر.
المهم هنا بقى : انك ممكن تحدد كل وصله بأن ليها حد اقصى و بعد كدا يتم كسرها..
فلو فرضنا ان مصلا احنا عندنا ١٢ وصله او ١٢ هقله للسلسله بتاتنا. وجينا فى العقله رقم ٦ و حددنا القيمه الثصوى اللى بيحصل عندها الكسر Break Force وخليناها قيمه معينه. لما بتشتغل اللعبه هتلاحظ عند وصول القيمه دى هيتم فصل السلسه من المنتصف .
طيب هنا بيجى دور الفانكشن دى. اننا ممكن نكتب اسكربت نقوله لما يحصل الكسر..يتم تنفيذ سلسله من الاوامر.
تعالو نتخيل مع بعض اننا بنلعب Limbo و ان قدامنا لغز و ليكن اننا لازم نخللى اللاعب يتشغلق فى السلسله و يتأرجح و بعد فتره ميعنه يتكسر السلسله. وبعد كسرها يتم انهاء المرحله (رساله كونسول )
يبقى واحنا بنبى المرحله نفسها و بنبنى السلسله نفسها بنحدد قوه معينه عندها يتم الكسر(اللى عملناه دلوقتى تعالو نسميه الخطوه M ) . و بعد كدا نحط الاسكربت بتاعنا على عنصر السلسله اللى مقصود كسره :
كود:function OnJointBreak() { Debug.Log("the player destroyed the chain & should load another level "); }
خد بالك بقى اننا كمان ممكن نمرر القيمه بتاعها كسر السلسه نفسها من خلال الفنكشن () .زى ما بنمرر حجات كتير . و تمرير القيمه ممكن يكون مفيد فلو مثلا احنا لعبتنا بتعتند على انها بتدى اللاعب اسكور او درجات بناء على القوه اللى هو كسر بيها.
كود:function OnJointBreak(theForceOfBreaking : float) { Debug.Log("the player broke the chain with force equal" + theForceOfBreaking ); }
كود:the player broke the chain with force equal 333
MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
حياك الله اخي محمد وان شاء الله راح اعدل على الملف لحتى اضيف الشروحات الجديدة ^_^
---------------------------------------------------
كل القلوب الى الحبيبي تميل *** ومعي بهذا شاهد ودليل
اما الدليل اذا ذكرت محمدا *** صارت دموع العارفين تسيل
هذا رسول الله نبراس الهدى *** هذا لكل العالمين رسول
تعليق
-
functions
12-OnParticleCollision
بسم الله..
اظاهر كدا ان كل الفانكشنز اللى هنكلم عليها الفتره دى من نفس النوعلأن فانكشن انهرده برده زى الكام واحده اللى فاتو. حيث انها بتطلب حدوث تصادم من نوع ميعن بين جسمين. ولكن التصادم المره دى بيكون بين Collider و Particle .
يبقى الفانكشن بتاعتنا OnParticleCollision يتم استدعاؤها عند حدوث تصادم بين جزئ Particle مع اى جسم يحمل Collider من أى نوع. ولا يشترط ان يكون هذا الcollider من النوع Trigger طيب بالرغم من الكلام دا الا انه لسه فى شرط مهم جدا واجب توفره لتحقيق التصادم الناجح.
لابد واحنا بنصمم ال Particle Emitter اننا فى الانسبكتور نحدد فى الخصائص الخاصه بيه فى قسم WorldParticleCollider اننا نحدد الاختيار sendCollisionMessage و الاختيار دا لما بنوافق عليه. معناه اننا بنقول للباعث Emitter ان اى جزئ Particle خيهرج من خلاله, له القدره على انه يحثث تصادم مع اى Collider موجود داخل المشهد, وعند حدوث التصادم دا , اجنا نريد ان نرسل رساله معينه او تنفيذ سلسله أوامر معينه.
طيب فى الحاله دى بنعمل اسكربت و نحطه على البارتكل نفسه علشان اول لما يحصل تصادم من اى ذره فى البارتكل يتم ارسال الرساله. مثالنا البسيط هو رساله للكونسول زى كدا :
كود:function OnParticleCollision (other : GameObject) { var hittedObject : Rigidbody = other.rigidbody; if (hittedObject) { Debug.Log ("the particle hitter an object have a rigid body and the object called " + hittedObject.name); } }
كود:the particle hitter an object have a rigid body and the object called cube002
MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
functions
13-OnBecame:Visible & Invisible
بسم الله..
معانا دلوقتى ٢فانكشنX ١ .. زى كدا الشامبوهات بتاعه الشعرهنشرح واحده و التانيه هيا هيا بظبط ولكن بالمقلوب
نتوكل على الله.
الفانكشن OnBecameVisible بيتم استدعاء محتوايتها لما الهنصر اللى بيحمل الاسكربت يظهر فى الكاميرا. او بمعنى اصح لما الهنصر يظهر فى مجال رؤيه اللاعب. بمعنى تانى لو الفانكشن دى كانت محتوايتها انها تطبع رساله فى الكونسول. وكان العنصر خارج مجال الكاميرا. اول لما العنصر يدخل فى مجال الكاميرا يتم تحقيق الفانكشن علطول.
يبقى لو فرضنا اننا عندنا الاسكربت التالى لطباعه امر الكونسول :
كود:function OnBecameVisible () { Debug.Log ("the object inside the player view now"); }
لكن اذا اصبح العنصر زى الحاله ٢ و اللى معناها ان العنصر اصبح مرئيا داخل اللعبه او الكاميرا او نطاق اللاعب او ابا كان المسمى. فهيتم طباعه الامر للكونسول:
ولو حتى جزء بسيط جدا من العنصر اصبح مرئيا زى الحاله ٣ . دا لليونتى بيعنى ان العنصر ككل اصبح داخل الحسبان و ان العنصر ككل اصبح مرئى و برده هيتم طباعه الرساله فى الكونسول :
ناخد بالنا بقى من ملحوظتين مهمين بخصوص الفانكشن دى:
-أولا : ان بيتم استدعاء محتوايتها غند ظهرو العنصر فى منفذ رؤيه اى كاميرا. ولنفرض اننا عندنا فى المشهد الحالى ٣٤ كاميرات. لما بيتم ظهور العنصر لأى كاميرا منهم بيتم تطبيق الاوامر. يعنى لو العنصر اصبح مرئى ل ٣ كاميرات فقط هتلاقى الرساله تم طباعتها ٣ مرات فى نفس الوقت. وزى ما واضح فى الصوره ان العنصر واضح للكاميرات اللى متحدده باللون الاصفر ومختفى بالنسبه للكاميرا الحمراء ودا معناه ان هيتم تنفيذ الاسكربت ٣ مرات لأنه واصح فى ٣ كاميرات :
ثانيا : ان طول منتا شغال داخل المحرك نفسه Unity Editor الكاميرا بتاعه المشهد نفسها بتعامل نفس المعامله و كأنها كاميرا اللعبه. يعنى ال Scene نفسه لما بيبان فيه العنصر بيتم استدعاء الفانكسن برده..ودا غباء و ذكاء من اليونتى فى نفس الوقت :
نيجى بقى للفانكشن OnBecameInvisible فهى نفس الوظيفه و مكانيكيه العمل ولكن المره دى بيتم استدعائها لما العنصر يكون (خارج) نطاق الرؤيه. يعنى العنصر يصبح خارج الكاميرات.سواء كاميرات اللعبه او الاديتور.
شكرا على المتابعه و أرجو من الله ان يكون الشرح مبسط و واضح
الحمدللهMHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
functions
14-OnLevelWasLoaded
مشكورين شباب على الردود الجميله..
oussama23: هى لا تقوم على اساس اى منهم ولكنها (تكافئ) OnTriggerEnter أو OnCollisionEnter ولكن ليها حاله خاصه. تعالى نكلم عنها. عنفسى احي اسميها OnTouchAndButtonPressed . جرب انك تعمل كركتر كنترولر. و اعمل مكعب اى شىء و سميه enemy و ركب الاسكربت السابق على الكركتر كنترول. اللى هو الاسكربت دا :
كود:function OnControllerColliderHit (hit : ControllerColliderHit) { if (hit.gameObject.name == "enemy"){ Debug.Log ("the character hit an enemy now "); } }
١-ضغط مستمر على الزرار المسؤل عن تحريك الكنترولر
٢-عمليه تلامس او تصادم بين الكنترولر و الجسم المطلوب
٣-سيظل يتم طباعه الرساله مرار و تكرار
طيب لو اختل احد الشروط رقم ١ أو ٢ . هيتوقف بالطبع طباعه الرساله. يعنى:
-لو الجسمين متلامسين ولا يتم الضغط المستمر فلن يتم طباعه شىء.
-لو الجسمين عير متلامسن و هناك ضغط مستمر على زرار التحريك فلن يتم طباعه شىء ايضا.
عشان كدا بحب اسميهاOnTouchAndButtonPressed .جرب تعمل المثال اللى قلنا عليه ولو العمليه مش واضحه ممكن اعملك المثال و ارفعه او اسجله فيديو . ايهما يكون اسهل.
*نيجى بقى لموضوع دلوقتى وهو فانكشن OnLevelWasLoaded . عارفين اللى بحبه فى اليونتى او بمعنى تانى المحركات بتاعه اليومين دول. انها بعيده عن الاختصارات. زمان كان فى تعقيد لكن دلوقتى معظم الفانكشن بيتم شرحها من خلال اسمها
زى ما واضح من اسم الفانكشن انها بيتم استدعائها فور الانتهاء من تحميل المرحله. ومن خلال الفانكشن بنمرر رقم المرحله و اللى بنقدر نجيبه من ال BuildSettings على اليمين جنب كل مرحله بيكون مكتوب الرقم index بتاعها واللى متحدد فى الصوره باللون الاصفر. لاحظ انك لو غيرت ترتيب اى مرحله رقم ال index بتاعها بيتغير. يعنى الرقم دا مش تابع للمرجله لكنه تابع لترتيبها فى القائمه
يبقى لو الاسكربت بتاعنا اللى جاى دا . هيتم طباعه امر الكونسول اول بما يتم تحميل المرحله رقم "٨" فى ترتيب المراحل داخل ال buildSettings و اللى هيا من الصوره اللى فاتت اسمها Zone1Level5_revised
كود:function OnLevelWasLoaded (level : int) { if (level == 8) { Debug.Log ("the level number 8 successfully loaded"); } }
الحمدللهMHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
functions
15-On: Enable & Disable
برده معانا انهرده فانكشن اتنين X واحد ..يعنى هنشرح واحده و التانيه زيها بالظبط ولكن العكس. تعالو نكلم عن اول واحده واللى هيا OnEnable بيتم استدعاء الفانكشن دى بمنتهى البساطه لما يكون الجيم اوبجكت بتاعنا فى الوضع دا فى الانسبكتور :
وعشان الاوبجكت يكون كدا احنا بنعمل حاجه من الاتنين يا اما بندوس بالماوس عليها ودا فى ال Editor mode او اننا بنتحكم فيها عن طريق الاسكربت اثناء اللعبه GamePlay mode ودا بيكون بالأمر اللى كلنا عارفينه :
كود:gameObject.active = true ;
كود:function OnEnable () { Debug.Log("the object is enabled now"); }
وطبعا بيكون شغلها لما الاوبجكت يكون مختفى (ليس من مجال الرؤيه) ولكن يكون مختفى نهائى حتى من الهيراركى بتاع العناصر. و المثال نفسه ولكن بتغير اسم الفانكشن يتم تنفيذه عن ازاله علامه الـ"صح" من العنصر سواء من الانسبتكور مباشره او من خلال اسكربت زى :
كود:gameObject.active = false ;
كود:function OnDisable () { Debug.Log("the object is enabled now"); }
MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
بطريقة او باخرى جميع الفانكش فيهم On: Enable & Disable بطريقة مخفية
ملاحظه مهم لا يمكن للفانكش function OnDisable ان اتعمل الا اذا كان الاوبجكت في الاساس مفعل ... ثم ....يلغى تفعيله فتعمل الفانكش
يعني لو وضعت هذا الفانكش على اوبجكتغير مفعل بالاساس فانها لن تعمل .... اقصد ابوجكت مثل الي بالصوره
http://www.maxforums.net/attachment....3&d=1359602899اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
وتفتك باعدائك اعداء الدين
تعليق
تعليق