المشاركة الأصلية بواسطة UDK-Team
مشاهدة المشاركة
إعـــــــلان
تقليص
لا يوجد إعلان حتى الآن.
شــــــــ دوال اليونتى ــــــــــرح
تقليص
X
-
MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
-
المشاركة الأصلية بواسطة احمد teeka مشاهدة المشاركةsaving
priniting
studiing
تسلم يمنعم انت انسان محترم جدااا وربنا يباركلك فى حياتك كلها
بأمر الله الباقى هيكمل من انهرده ان شاء الله..
وبالتوفيق فى اعمالكMHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
functions
1-functionUpdate
الفانكشن ابديت من اكتر الدوال اللى بنستحدمها و اللى لا غن عنها لأن وظبفتها مهمه جدا, حيث انها مسؤله عن تنفبذ كل ما تحتويه من أوامر, كل فريم من اللعبه..بمعنى انها بيتم استدعائها او طلبها كل فريم..المهم ان العنصر او الشىء اللى عليه الاسكربت شغال..بمعنى ان لو عندك اسكربت اسمو test و على GameObject اسمو مثلا sphereTest .. أهم شىء ان العنصر دا يكون Active .
طيب مثال زى ايه ؟؟
فى المثال اللى جاى دا , حاجه بسيطه جدا..هنظهر فى الكونسول عدد الفريمات الحاليه..بمعنى اننا بنقول اد ايه عدد الفريمات..طب امتا ؟؟
اكيد كل فريم..ولذلك هنلاقى ان كل فريم بيتتم ارسال امر Debug و بكدا ممكن نعرف عدد الفريمات الحالى لأن الامر دا فى فانكشن بيتم طلببها كل فريم فى اللعبه.
كود:function Update () { Debug.Log (Time.frameCount); }
MHAMMAD
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 ودى مالهاش تأثير على الاداء هى و اللى فاتت.
و مثالنا ممكن نخليه هو هو نفس المثال :
كود: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
MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
functions
3-functionFixedUpdate
الفانكشن دى بقى عجيبه شويه..مش هنقول مكلكعه..بس هيا غريبه و غير مستقره..يعنى ملهاش وقت معين تنطلب فيه..بعكس كل الفانكشنز اللى بتبقى وانت بتكتبها عارف امتا بظبط هيبان طلبها..تعالو نسميها "الفانكشن العشوائيه"..دا مسمى خاص بيا
المهم صحيح الفانكشن العشوائه دى طلبعا الزايد عن حده ليه تأثير على الاداء ويحس بكدا اوى اى حد اشتغل يونتى-آى فون..لأنها بتبان اوى فى البروفايلر الخاص بالأكس كود على هيئه قيمتين..واحده خاصه بالفيزيكس و التانيه خاصه بالفانكشن نفسها انطلبت اد ايه.
طيب امتا بتحصل..او تقريبا امتى ؟
بتحصل كل Fixed Framerate Frame ....لأ سهله كدا ؟!!
هههههههههههه
هقلكم نقطين..الاولى اى حد بيقولها فى اى درس..التانيه محدش بيجيب سيرتها لكنها هتفيد جامد جدا فى فهم الفانكشن دى..
الأولى : الfixed framerate دا نت اللى بتحدده بنفسك بيكون كل اد ايه..وغالبا بيكون 0.02 فى الطبيعى ودا بتجيبه من
Edit >>Project Settings >> Time >>>>Fixed timestep
طيب ودا بيفيد فى ايه الرقم دا ؟؟
دا مفيد جدا فى ظبط الاداء بتاع الفيزياء ..التصادمات و التفاعلات بين الكولايدرات و الريجيد بادى عندك...وينصح دائما انك لو عندك مشاكل فى التصادمات تبدأ تعدل القيمه دى بنسب طفيفه جدا..لأن اى تغير كبير هتلاقى اللعبه "أتشخرمت"
طيب و التانيه ؟؟
التانيه : ودى هتسهل الامر جدا..
هتكتب اسكربت صغير يطبع لنا قيمه الوقت ال fixed اد ايه دلوقتى . زى كدا :
كود:#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 و بناء على مدى التعقد للفيزياء فى المشهد بتاعك من كولايدرات "مش مؤثره اوى..المؤثر هو الميش كولايدرز" او ريجيد بودى.MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
المشاركة الأصلية بواسطة UA07 مشاهدة المشاركةشكرا استاذنا على تعبك معنا ^____^MHAMMAD
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; }
MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
functions
5-functionStart
ودى بقى اللى تقدر تسميها الفانكشن اللى عمرها قصير..حيث ان الفانكشت دى بيتم طلبها مره واحده و بسرعه جدا زى اللى فاتت و لكن هيا فانكشن وسطيه..بمعنى انها مش اول واحده ولا اخر واجدخ..
فانكشن ستارت بيتم طلبها بعد فانكشن Awakeو قبل فانكشن Update يعنى من الاخر بيتم استدعائها فى اول لحظه فى اللعبه و قبل اول تنفيذ لأول فريم فى الـUpdateو بتكوم نره واحده فى حياه الاسكربت عشان كدا قلنا عمرها قصير
بيتم طلبها بعد الانتهاء من كل ال Awakeالمتاحه
و الجدير بالذكر هنا ان الفانكشن Startلا يتم تنفيذها فى عنصر معمول له الغاء لخاصيه Active ولكن الAwake بيتم تنفيذها للعناصر دى
مثالنا بسيط جدا..امر للكونسول بيقول ان اللعبه بدأت
كود:function Start () { Debug.Log ("the game has started :) "); }
MHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
انت كاتب محدش يرد بس انا مش قادر امسك نفسىجزاك الله خيرًا،، كويس ان انت زكرت ان فانكشن Update،، OnGUI
مينفعش تبقى coroutine طب مفيش طريقة ممكن نستخدم WaitForSeconds مع دالة OnGUI???Insanity: doing the same thing over and over again and expecting different results
Albert Einstein -
تعليق
-
المشاركة الأصلية بواسطة Unity3D مشاهدة المشاركةانت كاتب محدش يرد بس انا مش قادر امسك نفسىجزاك الله خيرًا،، كويس ان انت زكرت ان فانكشن Update،، OnGUI
مينفعش تبقى coroutine طب مفيش طريقة ممكن نستخدم WaitForSeconds مع دالة OnGUI???
لو المطلوب انك تعمل دا فى داله 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 !!!"); }
انت تنور بأى سؤال..وبالتوفيقMHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
-
functions
6-functionReset
دى بقى الفانكشن اللى محدش بيستخدمها كتير
لأنها مش مطلوبه أوى . او بمعنى اصح الناتج بتاعها نادرا لما حد بيحتاجه..
مثلا لو انا كاتب اسكربت و حاطط فى الاسكربت دا متغير اسمو "س" و المتغير دا بالطبيعى بتاعه القيمه مقلا مقلا ٢٠ …واثناء ما الاسكربت شغال فى عمليات حسابيه عماله تحصل و بنتج عنها ان المتغير قيمتع عماله تتغير و تزيد و تقل و تتضاعف و هكذا
بمنتهى السهوله لما احب اخليها ترجع للقيمه الافتراضيه بتاعتى اللى هيا ٢٠
بحط المتغير فى الفانكشن دى
ولون بالنسبه لى انا احب اعمل المتغير علطول القيمه اللى تعجبنى…مهو طالما المتغير دا قيمته عماله تتغير يبقى هو من النوع ستاتيك..يبقى انا لما احب اغير القيمه..مش هتعب نفسى و اكتب فانكشن من الاول…لألألألأ علطول اقوله س بيساوى كذا..و خلاص
الفانكشن دى لمعنى تانى لتحاكى زرار موجود فى الانسبكتور لأى كومبوننت عندنا..زرار ريسيت و اللى غالبا يا اما محدش عارف بوجوده..او اللى عارف بوجوده و لوظيفته..مبيستحدموش كتير
الفانكشن بقى ذات نفسها (مش الزرار) مبتشتغلشى غير فى الاديتور..زى حجات كتير خاصه بالاديتور و المحرك فقط و مش هتشتغل فى اللعبه النهائيه..بيتم طلبها من (تحت لتحت أو خلف الكواليس ) لما انت بتدوس على الزرار اللى وضحناه دا..او لما انت بتسحب و تحط كمبوننت معين داخل الخانه الخاصه بيه فى الاسكربت داخل الانسبكتور..
ولأنها شىء غير مهم حاليا , وانا مركز اهتمامى على الجيم بلاى فانكشنز ..ممكن ندى ليها مثال بعدين فى وقتهاMHAMMAD
M.A.Moniem
الله--سبحان الله وبحمده سبحان الله العظيم--المستعانقال الأنيمتور المناضل منعم كامل :لو لم أكن أنيمتور لوددت أن أكون أنيمتور
تعليق
تعليق