تسلم ايدك نفس الفكرة دي كنت بفكر فيها..
إعـــــــلان
تقليص
لا يوجد إعلان حتى الآن.
شــــــــ دوال اليونتى ــــــــــرح
تقليص
X
-
موضوعك من افضل المواضيع بالمنتدئ
ومن احسن الدروس واستفدت منه كتير
جزاك الله
سارفعه للاعلا للاستفاده
وننتظر رجوعك يابطللا اله الا الله واشهد ان محمد رسول اللهاللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمينوتفتك باعدائك اعداء الدين
تعليق
-
functions
7-functionOnMouse
بسم الله الرحمن الرحيم
أولا وقبل كل شىء احبائى الكرام و اخوتى فى الله..اسف على التقصير و التأخير على حضراتكم ولكن بعض اللخبطه فى الوقت..أتمنى تسامحونى..ومتنسوش الدعاء اللى امنتكم عليه فى بدايه الموضوع...نكمل موضوعنا الشيق
انهرده بأمر الله هكلم عن فانكشنز OnMouse ودى طبعا مش فانكشن واحده..دا اسم العائله الكريمه..زى عائله "كان" و عائله "إن" بتوع اللغه العربيه الجليله..طيب مين هما الافراد الحاليين لعائله OnMouse ؟؟
زى ما عائلات و اسر حضراتكم بتتغير من وقت للتانى بميلاد بعض الافراد مما يؤدى لزياده اليله او توفى بعض الافراد..هنا برده نفس الحال..و اللى اشتغل يونتى من ايام اما كان اسمو Unity iPhone هيعرف الكلام دا كويس جدا جدا..الترتيب التالى هو بناء على يونتى 4 ولكن مفيش اختلاف كبير بينه وبين 3.x .. طيب يالا نشوف :
-OnMouseEnter
-OnMouseOver
-OnMouseExit
-OnMouseDown
-OnMouseUp
-OnMouseUpAsButton
-OnMouseDrag
*قاعدتين مهمين بخصوص الاخوات كلهم :
-الفانكشنز دى بكل اخواتها لا يتم استخدامهم فى اجهزه التاتش (IOS - Android ) لانها بتعتمد اعتماد كللى على "مؤشر" الماوس.
-كلنا طبعا عارفين الـ Layers و الـ Tags .. فى كام Layer كدا بيكونو اساسين فى اى مشروع وبيكونو اجباريين..فى واحده منهم بيكون اسمها IgnoreRaycast . لازم تكون عارف ان العنصر بتاعك لو كان محطوط فى اللير دى. فهو مش هيستجيب للفانكشنز دى .!
===========function OnMouseEnter
===========
الفانكشن دى بمنتهى البساطه مسؤله عن تنفيذ محتواها (بمجرد) مرور Mouse Pointer مؤشر الماوس من على العنصر اللى بيحمل الاسكربت. و مش اى عنصر يا اما عنصر بيحمل Collider يا اما هنصر من نوع GUI لأن فى الحالتين يمكن استشعار مكان الماوس ووجود وهل الماوس اخترق المجال ولا لأ.
*معلومه عالطاير :
على فكره ال GUI كللهم فيهم كولايدرات ولكنها زى مانقول كدا كولايدرات خفيه ومبنتعاملشى معاها مباشره ..ولكنها موجوده تحت غطاء المحرك..وليست مثل اى Cube أو Spheere بيكون ليك الخيار وضع كولايدر او ترجر او لأ ! لأن العناصر ممكن تستخدم لاكتر من هدف وانت بتسخرها بناء على احتياجك. لكن ال GUI ملهاش غير هدف واحد وهو انها تخللى اللاعب يتعامل معا التطبيق..لأنها فى الغالب او بنسبه 99% بتكون زراير او سلايدرات او تكست بوكس.......الخ
طيب ناخد مثالنا المعتاد بتاع الطباعه فى الكونسول و هيكون ان لما سهم الماوس يمر على العنصر. يتم طباعه الرساله.
كود:function OnMouseEnter () { Debug.Log ("the mouse pointer is here"); }
===========function OnMouseOver
===========
الفانكسن دى الى حد كبير تشبه اللى فاتت ولكن الفرق بسيط :
OnMouseEnter : بيتم تنفيذها "مره واحده فقط" و هى عند لحظه دخول المؤشر فى المنطقه الخاصه بالعنصر الحامل للكود
OnMouseOver : بيتم تنفيذها "كل فريم" بيكون فيه المؤشر موجود فى المنطقه الخاصه بالعنصر الحامل للكود
ومثالنا هو نفس المقال ولكن بمجرد تغير اسم الفانكشن هنلاحظ فى الكونسول ان الرساله بتظهر كل فريم..وليس مره واحده فقط!
كود:function OnMouseOver () { Debug.Log ("the mouse pointer is here every frame"); }
===========function OnMouseExit
===========
وهى تشبه الاولى OnMousseEnter من حيث ان تنفيذها بيتم مره واحده فقط. ولكن بيتم تنفيذها اثناء خروج المؤشر من منطقه العنصر..يعنى احنا لو عندنا زرار ابيض بيتلون احمر اثناء وجود المؤشر عليه و بيرجع ابيض تانى اثناء خروج المؤشر . يبقى مخططنا كالتالى:
أبيض -------------------------------------------------------------------->> أحمر ----------------------------------------------------------->>أبيض
أبيض -----------عند وقوف المؤشر عليه يتحول الى-------------->> أحمر --------عند خروج المؤشر من فوقه------------------->>أبيض
أبيض -----------function OnMouseEnter-------------->> أحمر -------function OnMouseExit------------------->>أبيض
ومقالنا هو نفسه ولكن هنلاحظ الرساله بتظهر بعد خروج المؤشر من فوق العنصر:
كود:function OnMouseExit () { Debug.Log ("the mouse pointer is here"); }
===========function OnMouseDown
===========
بيتم تنفيذ محتواها اول لم يتم الضغط على زرار الماوس (الزرار الشمال طبعا ) اثناء التواجد فى منطقه العنصر (المؤشر فوق العنصر ). وهى نسبيا تعادل استخدام Input.GetKeyDown
ومثالنال التالى :
كود:function OnMouseDown () { Debug.Log ("the mouse pointer is Pressed now"); }
===========function OnMouseUp
===========
ودى الفانكشن المكلمله للفانكشن السابقه. حيث ان اى شخص بيدوس على الزرار..فيوم من الايام مسيره يشيل ايده من على الزرارفدى الفانكشن المسؤله عن تنفيذ شىء معين بمجرد رفع الايد من على الزرار..وفى نفس الوقت اثناء التواجد فوق العنصر بالمؤشر بتاع الماوس. ومثالنا هو هو رساله بسيط هتظهر بمجرد الضفط ثم رفع الضغط.
كود:function OnMouseUp () { Debug.Log ("the mouse pointer is Released now"); }
===========function OnMouseUpAsButton
===========
دى زى اللى فاتت بظبط ولكن الفرق بيكون انها لن يتم تنفيذها الا اذا رفعنا صابعنا و المؤشر ما وال واقف على نفس العنصر اللى دوسنا عليه بالزرار.. يبقى هنا هيتم استدعء محتوى الفتكشن اذا تم الضغط و الرفع على نفس العنصر.
ومثالنا هو نفسه لكن يتم اختياره كالتالى. أولا تنشا عنصرين وسميهم 1 و 2 . بعد كدا تضع الكود على احدهم. و ابدأ اللعبه جرب انك تضغط على العنصر اللى فيه الكود و بعد كدا تحرك المؤشر بعيد عن العنصر. وترفع صابعك من على الزرار وانت واقف على العنصر التانى. لن يتم طباعه الامر فى الكونسول.
لكن اذا قمت بالضغط و الرفع من على العنصر الىل فيه الكودز عيتم طباعه الامر للكونسول :
كود:function OnMouseUpAsButton () { Debug.Log ("the mouse pointer is Released now"); }
===========function OnMouseDrag
===========
بيتم طلبها كل فريم (زى OnMouseOver ) ولكن دى مش شرط تكون واقف فوق العنصر. لأنها بتبدأ فى تنفيذ نفسها من لحظه الضغط. طيب بمعنى ايه. بسبطه...لو انا عاوز اعمل مثلا مثلا محرر مراحل ببنى جواه مراحل للعبه بتاعتى ومن المطلوب ان اللاعب بيجرك العناصر و يرتبها وي بنى المرحله. يبقى انا لحط فى ان الوضع Position بتاع العنصر دا بيساوى الPosition بتاع مؤشر الماوس. ودا بيتم داخل الOnMouseSrag بمعنى ان اثناء السحب و التحريك..يتم فعلا السحب و التحريك.
(ملحوظه) دى مش الطريقه الوحيده و لا المثلى لتحريك العناصر مع مؤشر الماوس و لاكن دى الاسهل و الاقرب الى الذهن و افضل مقال توضيحى.
الحمدلله
m;MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
الله يديك ووالديك الصحة والعافية
وموضوع فعلا مفيد جدااا
والله يعطيك العافية
---------------------------------------------------
كل القلوب الى الحبيبي تميل *** ومعي بهذا شاهد ودليل
اما الدليل اذا ذكرت محمدا *** صارت دموع العارفين تسيل
هذا رسول الله نبراس الهدى *** هذا لكل العالمين رسول
تعليق
-
functions
8-functionOnTrigger
ودى برده عائله..او بلاش عائله..دى أسره صغيره من 3 افراد. لكنها من ارقى الاسر و اهمها داخل اليونتى..وداخل اى محرك..جزأ كبير جدا من برمجه الالغاب من قديم الازل قائم على موضوع ال triggers وهو مبدأ هام جدا..حيث ان دا زى ما نقول كدا ببساطه..الشىء المسؤا عن تنفيذ الاوامر لو حصل شرط معين.
مثال بسيط لو عندنا الشخص فى اللعبه اول لما بيوصل لمكان معين اللعبه تتوقف و يبدأ فى عرض Cinematic زى العاب الاكشن. اهو بيكون فى Trigger او لما اللاعب يوصل له يتم توقف التحكم و يبدا الفلم. بمعنى تانى ان التريجرز دى حجات "مختفيه" عند ملامستها بيتم تفعيل الاوامر المراد تنفيذها.
طيب مين افراد العائله ؟
-OnTriggerEnter
-OnTriggerStay
-OnTriggerExit
الفروقات بينهم كالتالى :
OnTriggerEnter : مسؤله عن تنفيذ محتوايتها (مره واحده فقط) عند بدايه دخول منطقه التريجر.
OnTriggerStay : مسؤله عن تنفيذ محتوايتها (كل فريم) عند التواجد داخل منطقه التريجر.
OnTriggerExit : مسؤله عن تنفيذ محتوايتها (مره واحده فقط) عند الخروج منطقه التريجر.
طيب ناخد مثال بسيط يفهنا الموضع دا.
بس قبل ما ناخد مثال لازم نوضح حاجه مهمه..ازاى ممكن اخللى اى عنصر يعتبر Trigger ?
لتحقيق الشرط دا وهو ان يكون عندى عنصرين قادرين على التعامل بمبدأ التريجر:
-أولا انا الكود بتاعى بحطه على عنصر يحتوى على "أى نوع" كولايدر و هذا الكولايدر مفعل فيه اختيار Trigger..و العنصر الاخر يحتوى على كولايدر فقط
-ثانيا ان احد الجسمين اللى بيحصل بينهم العمليه دى. لازم يكون فيه كومبوننت RigidBody .
طيب ناخد بالنا فى حاجه ان الفانكشن دى هتبدأ نكتبها بطرقه مختلفه. حيث اننا لازم نمرر قيمه...! نمرر قيمه ؟ ايه الكلام الغريب دا ؟؟
بصو يا جماعه دلوقتى انا بقولو اذا حصل تداخل من عنصر الى العنص اللى بيحمل الكود..نفذ سلسله من الاوامر.طيب بفرض ان انا عندى 50 عنصر بيحيط بالتريجر بتاعى. وعاوز كل عنصر يلمس التريجر يكون ليه رد فعل مختلف و سلسله اوامر مختلفه ..اويا كدا غريبه اوى..طب هنعمل ايه ؟
هنمرر قيمه بعنى بدال ما هنكتب الفانكشن كدا :
كود:fucntion OnTriggerEnter (){ // contents }
كود:fucntion OnTriggerEnter (col : Collider){ // contents }
فيما بعد نقدر اننا بقى نتحكم بمليون طريقه طالما قدرنا اننا نمسك اى عنصر و نديله (اسم) حركى نقدر نستدعيه من خلاله. ويكون بقى الشغل كالتالى :
- نقول مثلا اذا كان col اسمه "عنصر مجهول1" قوم بتنفيذ الخطوات 1 و 2 و 3
- و اذا كان col اسمه "عنصر مجهول2" قوم بتنفيذ الخطوات 4 و 5 و 6
- و اذا كان col اسمه "عنصر مجهول3" قوم بتنفيذ الخطوات 6 و3 و 1
وهكذا ونقدر نعمل حجات كتير جدا جدا جدا بالموضوع دا.
طيب ناخد المثال :
هتعمل مشهد و تحط فى المشهد دا 4 مكعبات. واحد منهم هنعمله Trigger قثط
و التلاته الباقين هنعمل لهم RigidBody و نسميهم Box1 و Box2 و Box3
وبعدين نكتب الكودا التالى و نحطه على المكعب الاصلى
كود:fucntion OnTriggerEnter (col : Collider){ if (col.gameObject.name == "Box1"){ Debug.Log ("box 1is here"); } if (col.gameObject.name == "Box2"){ Debug.Log ("box 2 is here"); } if (col.gameObject.name == "Box3"){ Debug.Log ("box 3is here"); } }
كود:fucntion OnTriggerExit (col : Collider){ if (col.gameObject.name == "Box1"){ Debug.Log ("box 1is here"); } if (col.gameObject.name == "Box2"){ Debug.Log ("box 2 is here"); } if (col.gameObject.name == "Box3"){ Debug.Log ("box 3is here"); } }
كود:fucntion OnTriggerStay (col : Collider){ if (col.gameObject.name == "Box1"){ Debug.Log ("box 1is here"); } if (col.gameObject.name == "Box2"){ Debug.Log ("box 2 is here"); } if (col.gameObject.name == "Box3"){ Debug.Log ("box 3is here"); } }
m;MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
الله يعطيك العافية اخي
وجزاك الله كل خير
وراح احفظ كل شروحاتك في مجلد لحتى تدوم عندي ^_^
---------------------------------------------------
كل القلوب الى الحبيبي تميل *** ومعي بهذا شاهد ودليل
اما الدليل اذا ذكرت محمدا *** صارت دموع العارفين تسيل
هذا رسول الله نبراس الهدى *** هذا لكل العالمين رسول
تعليق
-
functions
9-functionOnCollision
ودى كمان اسره بسيطه زى اللى فاتت بظبط او نقدر نقول هيا هيا اللى فاتت..الفرق بينهم هو هو الفرق بين اسرتين بيكونو من نفس الاعضاء و نفس العدد و نفس المهام و الوظائف (تقريبا المهام هى هى الوظائف بس كلمتين لهدف واحد ودا دليل على البلاغه فى اللغه العربيه)..الفرق الوحيد بينهم ان الاسره اللى فاتت-ترجر- كان كل اعضائها عندهم شنب"شارب" , اما اعضاء الاسره دى فهما من غير شنب ..!
الشنب دا تعريفه : هو خاصيه التريجر Trigger لأن الموضوع هنا بيتوقف على عامل واحد..وهو حدوث تصادم بين الجسمين..وليس ان احد الجسمين يدخل منطقه الـ Trigger الخاصه بالاخر زى اللى فاتت.
الأسرتين بيشتركو فى حاجه مهمه جدا وهو ان احد العنصرين اللى هيحصل بينهم التصادم , لابد وان يكون حامل لكمبوننت RigidBody ايضا كما سبق.
طيب يبقى المثال بتاعنا ايه ؟ هو هو ؟؟
أيوه هو هو بالمللى و نفس التركيب و نفس العمل كمان الا ان الفانكشن دى (بالنسبه لى و بالنسبه لناس كتير ولا يوجد ما يثبت كدا فى الدوكيمنتس بتاعه اليومنتى . عشان كدا اكلمت من وجهه نظرى البسيطه) أسرع من اللى فاتت..لأن شرط حدوثها هو التصادم فقط. أما فنكشن OnTrigger شرط حدوثها هو حدوث عمليه ال Trigging نفسها و هذه العمليه تتطلب حدوث التصادم اولا..يعنى :
OnCollision : تشترط حدوث Collision
OnTrigger : تشترط حدوث Collision ثم حدوث Trigger
طيب تعالو نحول الأمثله بس قبل مانحولها هنقول ايه بس اللى هيتغير :
١-اسم الفنكشن من OnTrigger الى OnCollision
٢-نوع المتغير اللى بيسجل عنصر التصاد هيحول من Collider الى Collision ...طب ايه الفرق بين الكلمتين ؟؟!! لألألألأ الفرق كبير :
الفرق بين Collider و Collision :
Collider : هو عنصر نفسه يحمل الكمبوننت بتاع Collider ايا كان نوعه و ايا كان خصائصه (يشترط فى حالتنا دى انه يكون محدد فيه خاصيه ال Trigger ). ولا يشترط انو يقوم بعمليه التصادم...لأن تصادماته لا تحسب بطريقه كبيره (هو ما زال فى تصادمات ولكن بتأثسر انو Trigger التصادمات بتقتصر على انها تقول حصل تصادم او لأ )..زى لو قلنا كوره وقعت على الارض. هتخترقها لأنها Trigger لاكن فى نفس الوقت هتقول حصل تصادم سريع لكنه لم يؤثر على حركه او مكان الجسم.
Collision : هو عمليه التصادم نفسها لعنصر يحمل الكمبوننت بتاع Collider و كمان بيعمل تصادمات مع العناصر المحيطه بيه..يعنى مش شايل الكمبوننت عياقه..يعنى بيقوم بعمليه التصادم نفسها. و لأنه لا يحمل Triggerفليه حسابات كتير للتصادم..زى مصلا كوله و قعت على الارض هتخبط فى الارض و تعد تتنطط لحد ما تدخل مرحله السكون..وكل دى حسابات.
||الموضوع دا لو مش مفهوم ممكن نعمله فيديو او مثال توضيحى عالسريع||
يبقى شىء بديهى كدا :
OnCollisionEnter : بتحدث عند بدء التصادم بين عنصرين احدهما أوى كلاهما يحمل Rigidbody
OnCollisionStay : بتحدث عند استمرار التصادم بين عنصرين احدهما او كلاهما يحمل Rigidbody
OnCollisionExit : بتحدث عند انتهاء التصادم بين عنصرين احدهما او كلاهما يحمل Rigidbody
*و يبقى لو اخدنا نقس المثال هيبقى بالشكل التالى :
كود:fucntion On}CollisionEnter (collision : Collision){ if (col.gameObject.name == "Box1"...{ Debug.Log ("box 1is here"...; } if (col.gameObject.name == "Box2"...{ Debug.Log ("box 2 is here"...; } if (col.gameObject.name == "Box3"...{ Debug.Log ("box 3is here"...; } }
كود:fucntion OnCollisionStay (collision : Collision){ if (col.gameObject.name == "Box1"...{ Debug.Log ("box 1is here"...; } if (col.gameObject.name == "Box2"...{ Debug.Log ("box 2 is here"...; } if (col.gameObject.name == "Box3"...{ Debug.Log ("box 3is here"...; } }
كود:fucntion OnCollisionExit (collision : Collision){ if (col.gameObject.name == "Box1"...{ Debug.Log ("box 1is here"...; } if (col.gameObject.name == "Box2"...{ Debug.Log ("box 2 is here"...; } if (col.gameObject.name == "Box3"...{ Debug.Log ("box 3is here"...; } }
و بالتوفيق
الحمدلله
m;MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
الله يعطيك العافية ويجزيك كل الخير
ويعطي والديك الصحة والعافية
---------------------------------------------------
كل القلوب الى الحبيبي تميل *** ومعي بهذا شاهد ودليل
اما الدليل اذا ذكرت محمدا *** صارت دموع العارفين تسيل
هذا رسول الله نبراس الهدى *** هذا لكل العالمين رسول
تعليق
-
---------------------------------------------------
كل القلوب الى الحبيبي تميل *** ومعي بهذا شاهد ودليل
اما الدليل اذا ذكرت محمدا *** صارت دموع العارفين تسيل
هذا رسول الله نبراس الهدى *** هذا لكل العالمين رسول
تعليق
تعليق