المشاركة الأصلية بواسطة UDK-Team
					
						
						
							
							
							
							
								
								
								
								
									مشاهدة المشاركة
								
							
						
					
				
				
			
		إعـــــــلان
				
					تقليص
				
			
		
	
		
			
				لا يوجد إعلان حتى الآن.
				
			
				
	
شــــــــ دوال اليونتى ــــــــــرح
				
					تقليص
				
			
		
	X
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 جزانا و اياكم..من بعد فضل حضرتكM HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 شكرا يا ابو حميد ونورنى وجودك فى الموضوع المتواضع دا..المشاركة الأصلية بواسطة احمد teeka مشاهدة المشاركةsaving
 priniting
 studiing
 تسلم يمنعم انت انسان محترم جدااا وربنا يباركلك فى حياتك كلها
 بأمر الله الباقى هيكمل من انهرده ان شاء الله..
 وبالتوفيق فى اعمالكM HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 functions
 
 
 1-functionUpdate
 
 الفانكشن ابديت من اكتر الدوال اللى بنستحدمها و اللى لا غن عنها لأن وظبفتها مهمه جدا, حيث انها مسؤله عن تنفبذ كل ما تحتويه من أوامر, كل فريم من اللعبه..بمعنى انها بيتم استدعائها او طلبها كل فريم..المهم ان العنصر او الشىء اللى عليه الاسكربت شغال..بمعنى ان لو عندك اسكربت اسمو test و على GameObject اسمو مثلا sphereTest .. أهم شىء ان العنصر دا يكون Active .
 
 طيب مثال زى ايه ؟؟
 فى المثال اللى جاى دا , حاجه بسيطه جدا..هنظهر فى الكونسول عدد الفريمات الحاليه..بمعنى اننا بنقول اد ايه عدد الفريمات..طب امتا ؟؟
 اكيد كل فريم..ولذلك هنلاقى ان كل فريم بيتتم ارسال امر Debug و بكدا ممكن نعرف عدد الفريمات الحالى لأن الامر دا فى فانكشن بيتم طلببها كل فريم فى اللعبه.
 
 كود:function Update () { Debug.Log (Time.frameCount); }M HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 functions
 
 
 2-functionLateUpdate
 
 فانكشن الابديت المتأخره..باينه جدا من اسمها..هيا ابديت برده و بيتم استدعائها كل فريم من اللعبه بلا استثناء زى اللى فاتت و لكن دى بيتم طلبها لاحقا..بمعنى ؟
 لو احنا عندنا 4 اسكربتات و اسماءهم كالتالى :
 test1.JS
 test2.JS
 test3.JS
 test4.JS
 
 ازاى بيتم الطلب ؟
 هكلم عن ال Update و ال LateUpdate فقط دلوقتى ..ونركز على كلمه فقط..لأن موضوع الترتيب دا بيشمل حجات تانيه..
 يبقى الكومبايلر بتاع اليونتى هيعمل التالى :
 test1.Update
 test2.Update
 test3.Update
 test4.Update
 test1.LateUpdate
 test2.LateUpdate
 test3.LateUpdate
 test4.LateUpdate
 
 يبقى الكلام دا معناه ايه؟؟
 لا يتم طلب ال LateUpdate بعد ال Update الخاصه بالاسكربت بتاعها فقط..ولكت يتم طلب كل ال LateUpdate بعد الانتهاء من تنفيذ جميع ال Update
 طيب هل الموضوع دا مجرد فراغ ؟ او داله زياده و السلام ؟
 لأ طبعا كل شىء لازم يكون ليه فايده وان مكنشى ليه فايده يبقى المبرمج الشاطر يحاول يستغله لصالحه..طب ازاى..
 ببساطه جدا انا لكتل دلوقتى كود للأعداء علشان تلاحق اللاعب..ونركز على كلمه تلاحق دى!
 اللاعب اتحرك..بيتم تسجيل بياناته فى ال Update الخاصه بيه
 يبقى بديهى ان العدو لو هيتحرك طبيعى و بتالع اللاعب فريم-فريم..يبقى لازم يلاحقه وليس يساويه..يعنى العدو يكون بيبجث عن اللعب فى LateUpdate و يبقى التسلسل كدا
 
 playerScript.functionUpdate
 تتحرى ضغط اللاعب على الزرار علشان تحرك الشخصيه
 enemyScript.functionLateUpdate
 تتحرى مكان اللاعب الناتج عن playerScript.functionUpdate ليتم تحريك العدو.
 و كذلك معظم الاسكربتات الخاصه بالكاميرات اللى بتلاحق اللاعب..نفس فكره الملاحقه..
 واى حسابات انت عاوز تحسبها بدقه ناتجه عن الابديت..يبقى تخطها فى ال LateUpdate ودى مالهاش تأثير على الاداء هى و اللى فاتت.
 
 و مثالنا ممكن نخليه هو هو نفس المثال :
 بس غى حاجه حلوه نعملها هنا تأكد لنا الكلام دا..احنا ممكن نكتب اسكربت بيطبع الارقام فى الكونسول ..مره فى الابديت ومره فى الليت ابديت..هتلاقى ان كل فريم بيكتب مرتين و يظهر الرسايل اللى احنا حددناها و اللى بيها هتلاقى دايما فريم ال Update بيجى الاول ..زى كدا :كود:function Update () { Debug.Log (Time.frameCount); }
 
 هتلافى الناتج حاجه زى كدا :كود:#pragma strict function Update () { Debug.Log ("this is Update number "+Time.frameCount); } function LateUpdate () { Debug.Log ("this is LateUpdate number "+Time.frameCount); }
 
 كود:this is Update number 1 this is LateUpdate number 1 this is Update number 2 this is LateUpdate number2 this is Update number 3 this is LateUpdate number 3 this is Update number 4 this is LateUpdate number 4 this is Update number 5 this is LateUpdate number 5 this is Update number 6 this is LateUpdate number 6 M HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 functions
 
 
 3-functionFixedUpdate
 
 الفانكشن دى بقى عجيبه شويه..مش هنقول مكلكعه..بس هيا غريبه و غير مستقره..يعنى ملهاش وقت معين تنطلب فيه..بعكس كل الفانكشنز اللى بتبقى وانت بتكتبها عارف امتا بظبط هيبان طلبها..تعالو نسميها "الفانكشن العشوائيه"..دا مسمى خاص بيا 
 
 المهم صحيح الفانكشن العشوائه دى طلبعا الزايد عن حده ليه تأثير على الاداء ويحس بكدا اوى اى حد اشتغل يونتى-آى فون..لأنها بتبان اوى فى البروفايلر الخاص بالأكس كود على هيئه قيمتين..واحده خاصه بالفيزيكس و التانيه خاصه بالفانكشن نفسها انطلبت اد ايه.
 
 طيب امتا بتحصل..او تقريبا امتى ؟
 بتحصل كل Fixed Framerate Frame ....لأ سهله كدا ؟!!
 هههههههههههه
 هقلكم نقطين..الاولى اى حد بيقولها فى اى درس..التانيه محدش بيجيب سيرتها لكنها هتفيد جامد جدا فى فهم الفانكشن دى..
 
 الأولى : الfixed framerate دا نت اللى بتحدده بنفسك بيكون كل اد ايه..وغالبا بيكون 0.02 فى الطبيعى ودا بتجيبه من
 Edit >>Project Settings >> Time >>>>Fixed timestep
 طيب ودا بيفيد فى ايه الرقم دا ؟؟
 دا مفيد جدا فى ظبط الاداء بتاع الفيزياء ..التصادمات و التفاعلات بين الكولايدرات و الريجيد بادى عندك...وينصح دائما انك لو عندك مشاكل فى التصادمات تبدأ تعدل القيمه دى بنسب طفيفه جدا..لأن اى تغير كبير هتلاقى اللعبه "أتشخرمت"
 
 طيب و التانيه ؟؟
 التانيه : ودى هتسهل الامر جدا..
 هتكتب اسكربت صغير يطبع لنا قيمه الوقت ال fixed اد ايه دلوقتى . زى كدا :
 هتلاقى ان القيمه اللى هيا 0.02 عماله تتغير بمرور الفريمات بطريقه شبه مستقره و ثابته..و الناتج زى كدا :كود:#pragma strict function Update () { Debug.Log ("Fixed number is "+Time.fixedTime); }
 يعنى كل فريم القيمه...بتزيد ؟!كود:this is Update number 0 this is Update number 0.02 this is Update number 0.22 this is Update number 0.26 this is Update number 0.28 this is Update number 0.3 this is Update number 0.32 
 اه بتزيد لأنها بتحسب الوقت اللى اتاخد عشان الفريم الحالى نوصل له..وخد بالك اننا مستخدمين Update عاديه
 طيب و بعد كدا ايه ؟
 
 تعالى نكرر نفس اللى فات بس نخللى الفانكشن FixedUpdate
 هتلاقى ان النتايج ابتدت تتغير وهتلاقى قيم غير منتظمه بدأ تظهر احيانا..كود:#pragma strict function FixedUpdate () { Debug.Log ("Fixed number is "+Time.fixedTime); }
 
 طيب و الفاصل ايه ؟
 اننا نقارن الFixedUpdate بالUpdate العاديه ..ونعمل حاجه زى كدا :
 لاحظ انا حطيبت بس ال ////////////// لمجرد انها تكون اوضح فى الكونسول وانا بتابع..كود:#pragma strict function FixedUpdate () { Debug.Log ("Fixed number is "+Time.fixedTime); } function Update () { Debug.Log ("/////////////////////////////////// "...; }
 هتلاقى ان الفيكسد ابديت بتيم طلبها اكتر من مره فى الفريم الواحد ( اوقات مره و اوقات مرتين و اوقات ممكن 8 مرات )..او بمعنى تانى اكتر من مره بين الابديت و الابديت التى تليها..وعشان كدا قلنا انها ليها تأثير سلبى فى استخدامها الزائد..لانها ليها حسابات كتيره جدا
 
 طيب امتا استخدمها و ايه الاسخدام الامثل ليها..
 افضل استحدام ليها هو اننا نستخدمها مع الفيزكس حيث انها اصلا مبنيه ليها..
 طب ليه الفيزكس ؟؟
 هقول مثلا اننا عندنا جسم بيتم تحريكه عن طريق RigidBody.AddForce ..انا لو نفذت الامر دا فى الابديت العاديه..ممكن فى الاوقات اللى يكون فيها الللعبه شغاله باداء (فريم رريت) عالى ..الاقى نتيجه
 ولو اللعبه ادائها كان قليل لأى سبب..هلاقى نتيجه تانيه خالص..
 لاكن انا لما بقوله الامر دا فى الفيكسد ابدت..انا شبه بخللى الموضوع يتم حسابه بناء على عددالفريم رييت بتاع اللعبه اكتر من كونه لبتم تنفيذه كل فريم و السلام..
 و يبقى حاجه زى كدا :
 يبقى اللى نستنتجه من كل دا :كود:#pragma strict function FixedUpdate () { this.gameObject.rigidbody.AddForce (1,0,0); }
 اننا نستخدم الفيكسد ابديت دى لو احنا شغالين مع الفيزكس و بنحط قوه او اى شى خاص بالفيزياء لأن اى شىء تحتويه الفانكشن دى هيتم تنفيذه فى تناغم و مرونه مع الفيزيا بتاعه المحرك..
 لكن لو استخدمت ابديت عاديه فى الموقف دا..اوقات هتلاقيها ابطأ و اوقات هتلاقيها بتنتج لى اداء اسرع..لأنها هتتوقف على سرعه اللعبه على الجهاز او الفريم رييت.
 النقطه التانيه ان الفيكسد ابديت "عشوائه" ممكن تشتغل مره فى الفريم وممكن مرتين و ممكن تلاته وممكن 10 مرات..بناء على القيمه اللى انت محددها فى Fixed Timestep و بناء على مدى التعقد للفيزياء فى المشهد بتاعك من كولايدرات "مش مؤثره اوى..المؤثر هو الميش كولايدرز" او ريجيد بودى.M HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 دا شرف ليا المشاركه بالمعلومات..يمكن تكون السبب فى مساعده اى حد فى اى شىء محتاجه..المشاركة الأصلية بواسطة UA07 مشاهدة المشاركةشكرا استاذنا على تعبك معنا ^____^M HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 اخي تقريبا كل شئ نفس الشئ -__- كل ما عليك ان تغيرالمشاركة الأصلية بواسطة M-E مشاهدة المشاركةجزاك الله خيراً بس لو تقد مشكوراً امثله للسي شارب
 function ل void
 وبدل ان تصرح المتغير هكذا var x : int غيره ليكون هكذا int x الفرق بسيط جداالحمدلله
 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 functions
 
 
 4-functionAwake
 
 الفانكشن دى تعتبر من اصغر اسرع و اهم الفانكنشز فى اليونتى.
 حيث انها تعتبر تقريبا اول فانكشن بيتم استدعائها فى المشهد..أثناء عمليه تحميل المشهد..
 لما اللاعب بيبدأ يحمل المشهد..بيبدأ المحرك فى بناء الاعناصر (الاوبجكتس) و بعدها الفانكشن دى علطول..لذلك انت ممكن تكتب اى شىء يخص اى عنصر داخلها لأنه هيكون بالفعل تم تحميله.
 الجدير بالذكر..لأن الفانكشن دى سريعه جدا و دورها بيكون قبل لدايه المشهد او اللعبه او ايا يكن الشىء اللى بيحتوى عليها...فمتقدرشى ساعتها تستحدم بداخلها اى نوع من انواع ال coroutineزى مثلا WaitForSeconds و يمكن انا نست انوه عن كدا فى الفانكشنز اللى فاتت حيث ان مثلا فانكشن Updateبيتم تنفيذها كل فريم من اللعبه "اجبارى" فمش هينفع نقوله فى فريم من الفريمات (انتظر شويه).
 
 طيب المثال بتاعنا ايه؟؟
 اى شىء بسيط :
 كود:function Awake () { // search for anything, or instantiate anything for example; }M HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 functions
 
 
 5-functionStart
 
 ودى بقى اللى تقدر تسميها الفانكشن اللى عمرها قصير..حيث ان الفانكشت دى بيتم طلبها مره واحده و بسرعه جدا زى اللى فاتت و لكن هيا فانكشن وسطيه..بمعنى انها مش اول واحده ولا اخر واجدخ..
 فانكشن ستارت بيتم طلبها بعد فانكشن Awakeو قبل فانكشن Update يعنى من الاخر بيتم استدعائها فى اول لحظه فى اللعبه و قبل اول تنفيذ لأول فريم فى الـUpdateو بتكوم نره واحده فى حياه الاسكربت عشان كدا قلنا عمرها قصير
 بيتم طلبها بعد الانتهاء من كل ال Awakeالمتاحه
 و الجدير بالذكر هنا ان الفانكشن Startلا يتم تنفيذها فى عنصر معمول له الغاء لخاصيه Active ولكن الAwake بيتم تنفيذها للعناصر دى
 مثالنا بسيط جدا..امر للكونسول بيقول ان اللعبه بدأت
 
 كود:function Start () { Debug.Log ("the game has started :) "); }M HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 انت كاتب محدش يرد بس انا مش قادر امسك نفسى جزاك الله خيرًا،، كويس ان انت زكرت ان فانكشن Update،، OnGUI جزاك الله خيرًا،، كويس ان انت زكرت ان فانكشن Update،، OnGUI
 
 مينفعش تبقى coroutine طب مفيش طريقة ممكن نستخدم WaitForSeconds مع دالة OnGUI???Insanity: doing the same thing over and over again and expecting different results
 Albert Einstein -
 
 
 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 بص اصل الداله دى بتتنفذ كل فريم..مش هينفع فيها الانتظار.....لاكن اى قاعده اتعملت عشان تتكسرالمشاركة الأصلية بواسطة Unity3D مشاهدة المشاركةانت كاتب محدش يرد بس انا مش قادر امسك نفسى جزاك الله خيرًا،، كويس ان انت زكرت ان فانكشن Update،، OnGUI جزاك الله خيرًا،، كويس ان انت زكرت ان فانكشن Update،، OnGUI
 
 مينفعش تبقى coroutine طب مفيش طريقة ممكن نستخدم WaitForSeconds مع دالة OnGUI??? 
          
 لو المطلوب انك تعمل دا فى داله Updateمثلا , يبقى بمنتهى البساطه انت تحط شرط..لو الشرط اتحقق تنفذ فانكشن و اول حاجه فى الفانكشن بتاعه النتظار..انك تلغى الشرط ..ههههههههه...طبعا الكلام الملعبك دا يتفهم احسن بسطرين كود..خد يا سيدى :
 ويبقى الكلام دا معناه ان اى حاجه تتوقف على النتظار الوهمى اللى عملناه جوا ال Update لازم يتحط فى الفانكشن بتاعه الخدعه اللى عملناها مش الفانكشن Updateكود:#pragma strict // this is the variable which control everything var fireTheCoroutine : boolean = false ; function Start (){ fireTheCoroutine = false ; //i will wait 5 seconds from // start time to make the condition true yield WaitForSeconds (5); fireTheCoroutine = true ; } // this is a normal //update function function Update () { // check if the condition is true if (fireTheCoroutine == true ){ aFunctionToWaitSeconds(); } } // this s the normal function // which contain the coroutine function aFunctionToWaitSeconds (){ fireTheCoroutine = false ; yield WaitForSeconds (10); Debug.Log (" it really works now !!!"); }
 انت تنور بأى سؤال..وبالتوفيقM HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 تعليق
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 functions
 
 
 6-functionReset
 
 دى بقى الفانكشن اللى محدش بيستخدمها كتير
 لأنها مش مطلوبه أوى . او بمعنى اصح الناتج بتاعها نادرا لما حد بيحتاجه..
 مثلا لو انا كاتب اسكربت و حاطط فى الاسكربت دا متغير اسمو "س" و المتغير دا بالطبيعى بتاعه القيمه مقلا مقلا ٢٠ …واثناء ما الاسكربت شغال فى عمليات حسابيه عماله تحصل و بنتج عنها ان المتغير قيمتع عماله تتغير و تزيد و تقل و تتضاعف و هكذا
 بمنتهى السهوله لما احب اخليها ترجع للقيمه الافتراضيه بتاعتى اللى هيا ٢٠
 بحط المتغير فى الفانكشن دى
 ولون بالنسبه لى انا احب اعمل المتغير علطول القيمه اللى تعجبنى…مهو طالما المتغير دا قيمته عماله تتغير يبقى هو من النوع ستاتيك..يبقى انا لما احب اغير القيمه..مش هتعب نفسى و اكتب فانكشن من الاول…لألألألأ علطول اقوله س بيساوى كذا..و خلاص
 
 الفانكشن دى لمعنى تانى لتحاكى زرار موجود فى الانسبكتور لأى كومبوننت عندنا..زرار ريسيت و اللى غالبا يا اما محدش عارف بوجوده..او اللى عارف بوجوده و لوظيفته..مبيستحدموش كتير
 
 الفانكشن بقى ذات نفسها (مش الزرار) مبتشتغلشى غير فى الاديتور..زى حجات كتير خاصه بالاديتور و المحرك فقط و مش هتشتغل فى اللعبه النهائيه..بيتم طلبها من (تحت لتحت أو خلف الكواليس ) لما انت بتدوس على الزرار اللى وضحناه دا..او لما انت بتسحب و تحط كمبوننت معين داخل الخانه الخاصه بيه فى الاسكربت داخل الانسبكتور..
 
 ولأنها شىء غير مهم حاليا , وانا مركز اهتمامى على الجيم بلاى فانكشنز ..ممكن ندى ليها مثال بعدين فى وقتهاM HAMMAD HAMMAD
 M.A.Moniem
 
 الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور 
 تعليق
 





تعليق