(درس)..Unity 3D
عمل شاشة تحميل قبل بدأ اللعبة أو المرحلة
“الجزء الأول"
السلام عليكم ورحمة الله وبركاته
اليوم إن شاء الله سوف نشرح طريقة عمل شاشة تظهر قبل بداية المرحلة أو اللعبة
بعدة طرق مختلفة طبعا سيكون الشرح لبرنامج اليونيتي بلغة الجافا سكربت وإن شاء الله سوف أشرحها من البداية للنهاية...
بطريقة تجعل المبتدئين تفهمها بكل سهولة إن شاء الله وأرجو أن أوفق في ذالك
وسوف أبدأ بهذا الدرس على شكل محاور أو نقاط نبدأ على بركة الله
1- الأساس :-
وهو الكود الذي ترتكز عليه كل الطرق وهو :
إن شاء الله .........
كل ما هو مكتوب هنا من تأليفي وكتابتي لذالك أرجو عدم النقل إلا بذكر المصدر
شكرا...
عمل شاشة تحميل قبل بدأ اللعبة أو المرحلة
“الجزء الأول"
السلام عليكم ورحمة الله وبركاته
اليوم إن شاء الله سوف نشرح طريقة عمل شاشة تظهر قبل بداية المرحلة أو اللعبة
بعدة طرق مختلفة طبعا سيكون الشرح لبرنامج اليونيتي بلغة الجافا سكربت وإن شاء الله سوف أشرحها من البداية للنهاية...
بطريقة تجعل المبتدئين تفهمها بكل سهولة إن شاء الله وأرجو أن أوفق في ذالك
وسوف أبدأ بهذا الدرس على شكل محاور أو نقاط نبدأ على بركة الله
1- الأساس :-
وهو الكود الذي ترتكز عليه كل الطرق وهو :
كود:
[LEFT][B]private var loading_time = 12.0;[/B] [B]function Update () {[/B] [B]if (Time.time > loading_time) {[/B] [B]Application.Loadlevel (n);[/B] [B]} }[/B][/LEFT]
يعمل الكود كالتالي أولا
كود:
[B]private var loading_time = 12.0;[/B]
هنا نقوم بتعريف متغير عددي يخزن في ذاكرة البرنامج وقيمته 12.0 وسوف يكون هو الوقت الذي تبقى فيه شاشة التحميل قبل الإنتقال للعبة أو المرحلة وهنا أنا حددتها على أنها 12 ثانية
ثانيا نعرف أو نستدعي إذا صح التعبير الدالة Update تقوم هـذه الدالة بعمل الأمر الذي بداخلها في كل فريم من فريمات اللعبة ثم كتبت بداخلها الأمر التالي :
ثانيا نعرف أو نستدعي إذا صح التعبير الدالة Update تقوم هـذه الدالة بعمل الأمر الذي بداخلها في كل فريم من فريمات اللعبة ثم كتبت بداخلها الأمر التالي :
كود:
[LEFT][B]if (Time.time > loading_time) {[/B] [B]Application.Loadlevel (n);[/B] [B]}[/B] [/LEFT]
ملاحظة مهمة : لاتنسى كتابة كل حرف كما هو فالجافا سكريبت لغة حساسة لحالة الأحرف
طيب الآن لنفصل الكود في الأول أنا قمت بكتابةif وهي للدلالة على كتابة جملة شرطية ويكتب الشرط بين قوسين بعدها () ويكتب جواب الشرط بين {} ولاتنسى كتابة ; بعد الإنتهاء من كتابة جواب الشرط طيب أوكي الآن بعد كتابة ال if نقوم بكتابة الشرط وهو (Time.time > loading_time) لنفصله الآن في الأول قمنا بالإشتراط على البرنامج أنه في حال كان الوقت بالثواني أكبر من قيمة المتغير loading_time وذالك بكتابة Time.time وذالك لإحتساب الوقت بالثواني ثم loading_time < وذالك لمقارنته بــ المتغير تبعنا الي كتبنا فيه عدد الثواني قبل إختفاء نافذة جاري التحميل أي loading_time وهل هو أكبر من المتغير –أي الوقت (عدد الثواني)- أو لا بعد كتابة كل ذالك صار الكود لدينا هكذا
طيب الآن لنفصل الكود في الأول أنا قمت بكتابةif وهي للدلالة على كتابة جملة شرطية ويكتب الشرط بين قوسين بعدها () ويكتب جواب الشرط بين {} ولاتنسى كتابة ; بعد الإنتهاء من كتابة جواب الشرط طيب أوكي الآن بعد كتابة ال if نقوم بكتابة الشرط وهو (Time.time > loading_time) لنفصله الآن في الأول قمنا بالإشتراط على البرنامج أنه في حال كان الوقت بالثواني أكبر من قيمة المتغير loading_time وذالك بكتابة Time.time وذالك لإحتساب الوقت بالثواني ثم loading_time < وذالك لمقارنته بــ المتغير تبعنا الي كتبنا فيه عدد الثواني قبل إختفاء نافذة جاري التحميل أي loading_time وهل هو أكبر من المتغير –أي الوقت (عدد الثواني)- أو لا بعد كتابة كل ذالك صار الكود لدينا هكذا
كود:
[LEFT][B]private var loading_time = 12.0;[/B] [B]function Update () { [/B][B]if (Time.time > loading_time [/B][B])[/B] [/LEFT]
طيب الآن بعد كل هذا هل البرنامج سوف يقارن ويكشف أن الوقت صار أكبر بعد تخطيه حاجز ال12.0 ثانية وأنتهينا طبعا لا لأنه حتى الآن لايوجد جواب للشرط أي ما سيفعله البرنامج إذا زاد الوقت عن 12.0 ثانية لذالك قلت لك أنه يجب وضع الفعل أو جواب الشرط بين {} بعد الشرط وهنا في المثال أنا كتبت جواب الشرط
كود:
[B]{[/B] [B]Application.Loadlevel (n);[/B] [B]}[/B]
وكالمرة السابقة هيا بنا نفصل الكود وهو كالتالي في الأول كتبنا طبعا {} ثم كتبنا بداخلهاApplication.Loadlevel (n);ومعناها أولا هنا تم توجيه الأمر للبرنامج مباشرة- وليس لمجسم في مرحلة أو ماشابه- عن طريق الأمر Application وأعتقد أنه ممكن يفهم أنه معني بالبرنامج من إسمه المهم تم توجيه هذا الأمر أي بالعربية ممكن نقول (يا برنامج) ثم يأتي الفعل وهو ما سيفعله البرنامج وهو كالتالي .Loadelevel(n); ويعني (حمل المرحلة
-يكتب رقم المرحلة بين القوسين-(n) وحرف الn هنا يعني رقم المرحلة)
ملاحظة : من الممكن كتابة إسم المرحلة أيضا بدلا من حرف الn إن أردت وأنتبه على حالة الأحرف .
وفي نهاية جواب الشرط نكتب; للدلالة على نهاية الجواب وهي تكتب في نهاية كل كود ثم نغلقه ب } ثم نكتب مرة أخرى } لإغلاق دالة الUpdate لأن الأكواد في الدوال تكتب بين {} أيضا.
الآن إنتهينا من الكود وصار لدينا الكود كالتالي:
-يكتب رقم المرحلة بين القوسين-(n) وحرف الn هنا يعني رقم المرحلة)
ملاحظة : من الممكن كتابة إسم المرحلة أيضا بدلا من حرف الn إن أردت وأنتبه على حالة الأحرف .
وفي نهاية جواب الشرط نكتب; للدلالة على نهاية الجواب وهي تكتب في نهاية كل كود ثم نغلقه ب } ثم نكتب مرة أخرى } لإغلاق دالة الUpdate لأن الأكواد في الدوال تكتب بين {} أيضا.
الآن إنتهينا من الكود وصار لدينا الكود كالتالي:
كود:
[B]private var loading_time = 12.0;[/B] [B]function Update () {[/B] [B]if (Time.time > loading_time) {[/B] [B]Application.Loadlevel (n);[/B] [B]}[/B] [B]}[/B]
طيب أنت ممكن تقول أن هذا خطأ لأن ذالك يعني أن الشاشة ستبقى ولن تذهب بما أن دالة Update تعمل في كل فريم أقول لك لأ هنا أنت سوف تعمل مرحلة جديدة ولن تضع فيها إلا الكاميرا وتضع هاذا السكربت فيها ثم تكتب رقم المرحلة الأخرى المطلوب الإنتقال إليها وعند تشغيل اللعبة ستجد أن هناك شاشة زرقاء غامقة تظهر ثم بعد 12.0 ثانية تنتقل إلى اللعبة وهذه هي أول شاشة تحميل لك مبارك .
الآن بعد قراءة كل ماسبق أنت جاهز لعمل شاشات تحميل أكثر إحترافية وجمالية لذالك أنزل لأسفل واستعد ...
الآن بعد أن قمت بعمل أول شاشة تحميل لك دعنا نتطور قليلا ونقوم بإضافة بعض الحياة أو الرونق الجمالي لها وذالك سيحدث بطريقتين...
1- ثابت : أ- نصي ب- صوري.
2- متحرك : أ- نصي ب- صوري..
الأولى : وهي الثابته أو غير المتحركة بما معناه أنه تكون تلك الشاشة الزرقاء وفيها نص مثل loading… أو صورة أو ماشابه وهو نوع سهل وغير متعب على عكس المتحرك الذي يؤدي إلى زيادة الأكواد وسوف نبدأ بالأولى لسهولتها إن شاء الله.
3- النص والصورة (غير متحرك) :-
وذالك يمكن بإستخدام دالْة جديدة ألا وهيOnGUI وهي تستخدم لعرض الصور أو النصوص على الشاشة وما إلى ذالك وسوف يكون التعديل في الكود كالتالي لعمل النصوص في الشاشة
الآن بعد قراءة كل ماسبق أنت جاهز لعمل شاشات تحميل أكثر إحترافية وجمالية لذالك أنزل لأسفل واستعد ...
الآن بعد أن قمت بعمل أول شاشة تحميل لك دعنا نتطور قليلا ونقوم بإضافة بعض الحياة أو الرونق الجمالي لها وذالك سيحدث بطريقتين...
1- ثابت : أ- نصي ب- صوري.
2- متحرك : أ- نصي ب- صوري..
الأولى : وهي الثابته أو غير المتحركة بما معناه أنه تكون تلك الشاشة الزرقاء وفيها نص مثل loading… أو صورة أو ماشابه وهو نوع سهل وغير متعب على عكس المتحرك الذي يؤدي إلى زيادة الأكواد وسوف نبدأ بالأولى لسهولتها إن شاء الله.
3- النص والصورة (غير متحرك) :-
وذالك يمكن بإستخدام دالْة جديدة ألا وهيOnGUI وهي تستخدم لعرض الصور أو النصوص على الشاشة وما إلى ذالك وسوف يكون التعديل في الكود كالتالي لعمل النصوص في الشاشة
كود:
[LEFT] [B]private var loading_time = 12.0;[/B] [B]function Update () {[/B] [B]if (Time.time > loading_time) {[/B] [B]Application.Loadlevel (n);[/B] [B]}[/B] [B]}[/B] [B]Function OnGUI () {[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B] [B]}[/B][/LEFT]
مالذي أضفناه في الكود من أجل عرض كلمة Loading… في الشاشة ؟
قمنا بإضافة الكود التالي :
قمنا بإضافة الكود التالي :
كود:
[LEFT][B]Function OnGUI () {[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B] [B]}[/B][/LEFT]
هيا لنفصله
أولا قمنا بتعريف الدالة الخاصة بعرض البيانات على الشاشة وهي OnGUI ثم قمنا بكتابة الأوامر بين {} الخاصة بها والأوامر هي :
أولا قمنا بتعريف الدالة الخاصة بعرض البيانات على الشاشة وهي OnGUI ثم قمنا بكتابة الأوامر بين {} الخاصة بها والأوامر هي :
كود:
[LEFT][B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B][/LEFT]
أولا قمنا بتعريف الأوامر الخاصة بالدالة OnGUI بــ GUI. ثم قمنا بتعريف نص من نوع عنوان بــLabel () ثم بين القوسين الخاصين بالــLabel () نكتبنوع الشكل الذي سيكتب به العنوان وهنا بالتأكيد مستطيل ولكن لن نكتب إسمه بالإنجليزية كاملا وإنما أختصاره( (Rect
ثم نكتب مكانه في الشاشة وأبعاده بين القوسين هنا أنا لم أكتب مكانه في الشاشة وإنما قمت بعمل كود يجعل الكلمة في منتصف الشاشة تلقائيا أي مهما تغيرت أبعاد الشاشة تتغير الكلمة لتبقى في منتصفها كالتالي :
ثم نكتب مكانه في الشاشة وأبعاده بين القوسين هنا أنا لم أكتب مكانه في الشاشة وإنما قمت بعمل كود يجعل الكلمة في منتصف الشاشة تلقائيا أي مهما تغيرت أبعاد الشاشة تتغير الكلمة لتبقى في منتصفها كالتالي :
كود:
[LEFT][B](Screen.width/2-(n),Screen.height/2[/B][/LEFT]
أولا هنا في الكود تجد بداية إستدعاء لأوامر الخاصة بالشاشة بكتابة كلمةScreen ثم بتحديد البعد أفقيا بكلمة width ثم بقسمتها على 2 بــ /2 وذالك لقسمة بعد الشاشة على 2 لإيجاد منتصفها لكن كما تلاحظ هنا أنها بعد قسمتها على إثنين سوف تكون أول حرف من النص هو في المنتصف ويكون النص متجها إلى اليمين أكثر من توسطه لذالك نوجد الفرق (n) وهو نصف طول النص أو الصورة بالبيكسل كالنص هنا فنقدره تقديريا ونرى لكن أعتقد أن -20 كافيه جرب وأختار ما يناسبك بعد ذالك أنتهينا من التحديد الأفقي نأتي للعمودي ونفصله بفاصلة (,) ثم نكتب الكود التالي لنضع النص في منتصف الشاشة عموديا أيضا,Screen.height/2ثم بعد ذالك نقوم بكتاية حجم المستطيل الذي سيحتوي على النص أفقيا وعموديا بما يناسبنا مثلي أنا كتبته أفقيا 100 وعموديا 40 ثم نغلق القوس الأول ونكتب الفاصلة مرة أخرى (,) ثم نقوم بكتابة النص الذي نريده أن يظهر بين علامتي الإقتباس ("loading…") مثلا ثم نغلق القوس الآخر وفي النهاية نضع الفاصلة المنقوطة بعد أن أنتهينا من كل شيئ (... مبارك
طيب لو أردنا جعل بدل النص صورة ؟؟؟
أمر محير .... لا أبدا لن قوم سوى بالتالي : هذا هو الكود قبل التغيير :
طيب لو أردنا جعل بدل النص صورة ؟؟؟
أمر محير .... لا أبدا لن قوم سوى بالتالي : هذا هو الكود قبل التغيير :
كود:
[LEFT] [B]private var loading_time = 12.0;[/B] [B]function Update () {[/B] [B]if (Time.time > loading_time) {[/B] [B]Application.Loadlevel (n);[/B] [B]}[/B] [B]}[/B] [B]Function OnGUI () {[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B] [B]}[/B][/LEFT]
وبعد التغيير يصير هكذا
كود:
[LEFT][B]Var loading : Textuer;[/B] [B]private var loading_time = 12.0;[/B] [B]function Update () {[/B] [B]if (Time.time > loading_time) {[/B] [B]Application.Loadlevel (n);[/B] [B]}[/B] [B]}[/B] [B]Function OnGUI () {[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40), Loading);[/B] [B]}[/B][/LEFT]
ماذا أضفنا ؟؟ ..شيئ بسيط جدا :
قمنا بتعريف متغير من نوع تكتشرvar : Textuer وطبعا هنا لن نكتب علامة المساوة وإنما ( : ) لأننا لن نعطي قيمة مباشرة له أو شيئ من هذا القبيل وبعد إضافة التكتشر قمنا بتغيير
الكلمة في الكود
قمنا بتعريف متغير من نوع تكتشرvar : Textuer وطبعا هنا لن نكتب علامة المساوة وإنما ( : ) لأننا لن نعطي قيمة مباشرة له أو شيئ من هذا القبيل وبعد إضافة التكتشر قمنا بتغيير
الكلمة في الكود
كود:
[LEFT][B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40), “Loading…”);[/B][/LEFT]
إلى :
كود:
[LEFT][B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40), Loading);[/B][/LEFT]
أي قمنا بتغيير الكلمة إلى إسم المتغير وقمنا بإلغاء علامتي الإقتباس لأننا نعرف شيئ معين ولسنا نكتب نص
أكرر*****:
أنتبه من حالات الحروف فاللغة حساسة لذالك.
تم بحمدلله إكمال الجزء الأول من السلسة إن صح التعبير وهو لكيفية عمل الشاشة تحميل قبل بداية اللعبة أو المرحلة لكن من دون حركة وجاري إتمام الجزء الثاني أكرر*****:
أنتبه من حالات الحروف فاللغة حساسة لذالك.
إن شاء الله .........
كل ما هو مكتوب هنا من تأليفي وكتابتي لذالك أرجو عدم النقل إلا بذكر المصدر
شكرا...
IMB
إبراهيم باوزير
إبراهيم باوزير
تم إضافة الجزء الثاني رابط الدرس:
http://www.maxforums.net/showthread.php?t=217563
تعليق