الوحدة ، واحدة من محركات اللعبة الأكثر شعبية ، ويوفر للمطورين مع العديد من الأدوات القوية لخلق الألعاب. إحدى هذه الأدوات هي كوروتينس ، طرق خاصة تسمح لك بإجراء عمليات غير متزامنة باستخدام بناء جملة واضح ومريح.
ومع ذلك ، عند استخدام الكوروتين ، من الضروري أيضا معرفة كيفية إيقاف تنفيذها بشكل صحيح. يمكن أن يؤدي التوقف بشكل غير صحيح إلى تسرب الموارد أو سلوك اللعبة غير المتوقع. في هذه المقالة ، سنلقي نظرة على النصائح والأمثلة المفيدة التي ستساعدك على تعلم كيفية إيقاف الكوروتين بشكل صحيح في الوحدة.
الطريقة الأولى والرئيسية لوقف كوروتين هو استخدام الكلمة الرئيسية"كسر العائد". تقاطع هذه الكلمة الرئيسية تنفيذ كوروتين ولا تسمح لها بمواصلة عملها. من المهم أن تتذكر أنه يجب تنفيذ استدعاء "كسر العائد" داخل طريقة كوروتين. مثال:
إذا كنت بحاجة إلى إيقاف تنفيذ كوروتين حسب الشرط ، يمكنك استخدام متغير العلم. على سبيل المثال ، يمكنك إنشاء متغير منطقي "ستوبروتين" ، الذي قمت بتعيينه إلى صحيح عند استيفاء الشرط. ثم تحقق من هذا المتغير داخل حلقة كوروتين واستدعاء" كسر العائد " إذا أصبح صحيحا. مثال:
منطقي ستوبروتين = خطأ;
إينوميراتور ميكوروتين()
{
بينما (!ستوبروتين)
{
العائد العائد لاغية;
}
كسر العائد;
}
في كل مرة تستخدم فيها الكوروتين في مشروع الوحدة الخاص بك ، تذكر إيقافها بشكل صحيح. سيؤدي ذلك إلى تجنب المشاكل المحتملة وزيادة موثوقية لعبتك. اتبع التوصيات واستخدم الأمثلة التي استعرضناها في هذه المقالة.
- جوانب مهمة من كوروتين في الوحدة
- تعريف ومبدأ تشغيل كوروتين
- المشاكل المحتملة عند إيقاف كوروتين
- استخدم طريقة ستوبروتين للتوقف المتحكم فيه
- استخدم الكلمة الأساسية لكسر العائد للخروج قبل الأوان
- التعامل مع الاستثناءات لمنع "تسرب" كوروتين
- لا ننسى الكلمة العودة للخروج الصحيح
- مثال: إيقاف الكوروتين عند حدوث حالة معينة
- مثال: إيقاف أ
- كوروتين لحدث توقف ممتد ومتأخر باستخدام استدعاء
- سؤال وجواب
- كيف يمكنني إيقاف كوروتين في الوحدة?
- هل يمكنني إيقاف جميع الكوروتينات الجارية في نفس الوقت?
- ماذا يحدث إذا لم أوقف الكوروتين في الوحدة?
جوانب مهمة من كوروتين في الوحدة
1. ما هي كوروتينس في الوحدة?
الكوروتينات في الوحدة هي نوع خاص من الوظائف التي يمكن إيقافها مؤقتا واستئنافها أثناء تنفيذ البرنامج. يتم استخدامها للتحكم في وقت تنفيذ عمليات معينة ، وكذلك لإنشاء رسوم متحركة وتأثيرات.
2. كيفية إنشاء كوروتين?
لإنشاء كوروتين في الوحدة ، تحتاج إلى إعلان وظيفة مع الكلمة الرئيسية" إينوميراتور " قبل اسمها. داخل الوظيفة ، يمكنك استخدام الكلمة الرئيسية "العائد" لإيقاف التنفيذ مؤقتا وتحديد مهلة أو شروط أخرى للاستئناف. يمكن بدء تشغيل كوروتين باستخدام طريقة "ستارتكوروتين" من وظيفة أو حدث آخر.
3. كيف يمكنني إيقاف كوروتين في الوحدة?
يمكنك إيقاف كوروتين في الوحدة باستخدام طريقة" ستوبكوروتين "أو" ستوبالكوروتين". عندما يتم إيقاف كوروتين ، يتم تعليق تنفيذه ، وإذا كنت بحاجة إلى إعادة تشغيل كوروتين ، تحتاج إلى استدعاء طريقة "ستارت كوروتين" مرة أخرى.
4. جوانب مهمة لاستخدام كوروتين في الوحدة
- لا تمنع الكوروتينات التدفق الرئيسي لتنفيذ البرنامج ، مما يسمح لك بإجراء عمليات أخرى بالتوازي.
- يمكن استخدام الكوروتين لإنشاء رسوم متحركة وتأثيرات سلسة ، لأنها تسمح لك بتحديد وقت التأخير الدقيق قبل كل خطوة رسوم متحركة.
- يمكن أن تكون الكوروتينات مفيدة لإجراء عمليات طويلة ، مثل تحميل الموارد ، دون تجميد واجهة المستخدم.
- يمكن إيقاف الكوروتينات واستئنافها في أي وقت أثناء تنفيذ البرنامج ، مما يمنح قدرا أكبر من المرونة والتحكم في العملية.
- عند استخدام كوروتين ، يجب أن تكون حذرا بشأن تسرب الذاكرة ، لأن الإكمال غير الصحيح للكوروتين يمكن أن يؤدي إلى تسرب الموارد.
5. مثال على استخدام كوروتين في الوحدة
مثال على استخدام كوروتين في الوحدة يمكن أن يكون على النحو التالي:
- إنشاء وظيفة مع الكلمة الرئيسية" إينوميراتور " ، والتي ستكون كوروتين الخاص بك.
- داخل الوظيفة ، حدد الخطوات أو الإجراءات التي تريد تنفيذها مع تأخير معين. لتحديد التأخير ، استخدم الكلمة الأساسية"عائد عائد جديد(وقت الانتظار)".
- استدعاء كوروتين باستخدام طريقة" ستارتكوروتين(اسم كوروتين)".
- لإيقاف كوروتين ، اتصل بطريقة " ستوبروتين (اسم كوروتين)".
هذه ليست سوى أساسيات استخدام كوروتينس في الوحدة ، وإذا لزم الأمر ، يمكنك استكشاف مواضيع أكثر تعقيدا مثل تمرير المعلمات إلى كوروتينس ، في انتظار كوروتينس أخرى لإكمال ، الخ.
تعريف ومبدأ تشغيل كوروتين
الكوروتينات في الوحدة هي آلية خاصة تسمح للمطورين بإنشاء مهام غير متزامنة وإدارة تنفيذها. إنها وظائف يمكن إيقافها مؤقتا واستئنافها في نقاط زمنية معينة.
المبدأ الأساسي لكيفية عمل كوروتين هو استخدام الكلمة الرئيسية الخاصة" العائد " داخل الوظيفة. عندما يصل التنفيذ إلى عبارة" العائد " ، يتم تعليق تنفيذ الكوروتين ويتم نقل التحكم مرة أخرى إلى حلقة اللعبة الرئيسية. بعد استيفاء شروط معينة ، يمكن استئناف الكوروتين.
كوروتينس في الوحدة مفيدة بشكل خاص لأداء المهام التي تتطلب وقت تنفيذ طويل أو قفل البرنامج ، مثل تحميل الموارد ، والرسوم المتحركة ، والحركة السلسة للكائنات وغيرها من العمليات غير المتزامنة.
مثال على كوروتين بسيط قد يكون تحميل عملية غير متزامنة. Например, чтобы загрузить текстуру из сети, можно использовать корутину:
IEnumerator LoadTexture(string url)
{
using (UnityWebRequest request = UnityWebRequestTexture.GetTexture(url))
{
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Texture2D texture = DownloadHandlerTexture.GetContent(request);
// обработка загруженной текстуры
}
else
{
Debug.Log("Ошибка загрузки текстуры: " + request.error);
}
}
}
في هذا المثال ، يرسل كوروتين طلبا إلى الخادم باستخدام ونيتويبركست ويتم تعليقه حتى يتم تلقي استجابة. عند تلقي الاستجابة ، يمكن للكوروتين متابعة التنفيذ ومعالجة نتائج التنزيل.
تسمح الكوروتينات في الوحدة أيضا باستخدام أنواع مختلفة من التأخيرات وظروف السيرة الذاتية ، مما يجعلها أدوات أكثر مرونة وقوة لإدارة المهام غير المتزامنة.
المشاكل المحتملة عند إيقاف كوروتين
يمكن أن يتسبب إيقاف الكوروتين في الوحدة في حدوث بعض المشكلات إذا لم يتم تنفيذ هذه العملية بشكل صحيح. فيما يلي بعض المشكلات المحتملة التي يمكن مواجهتها عند إيقاف الكوروتين:
- التوقف المفاجئ: إذا لم يتوقف الكوروتين في الوقت المناسب ، فقد يؤدي ذلك إلى سلوك لعبة لا يمكن التنبؤ به. على سبيل المثال ، إذا كان الكوروتين مسؤولا عن حركة كائن اللعبة ، لكنه لا يتوقف بعد الوصول إلى الهدف ، فيمكن أن يستمر الكائن في التحرك ويتجاوز الملعب.
- فقدان رابط كوروتين: إذا لم تقم بحفظ رابط كوروتين عند بدء تشغيله ، فقد تفقد القدرة على إيقافه في المستقبل. هذا يمكن أن يؤدي إلى حقيقة أن كوروتين سيستمر في تنفيذه ، حتى لو كنت لا تريد ذلك.
- لوقف كوروتين ، قد تكون هناك مشاكل مع استقراره. على سبيل المثال ، إذا كان الكوروتين يحتوي على عملية حظر أو عملية حسابية طويلة ، فقد لا يتوقف على الفور ، ولكنه يستمر في تنفيذه حتى اكتمال الخطوة الحالية.
| نموذج التعليمات البرمجية | وصف المشكلة | مقرر |
|---|---|---|
| . | لحل هذه المشكلة ، احفظ الرابط إلى كوروتين عند تشغيله: |
باستخدام الطرق الصحيحة والاحتفاظ بالروابط إلى الكوروتين ، يمكنك تجنب المشاكل المحتملة عند إيقافها. تحليل بعناية التعليمات البرمجية الخاصة بك والتأكد من أن نهاية كوروتينس ووقف بشكل صحيح في اللحظة المناسبة لتجنب سلوك اللعبة لا يمكن التنبؤ بها وغيرها من المشاكل.
استخدم طريقة ستوبروتين للتوقف المتحكم فيه
الوحدة لديها طريقة توقف خاصة تسمح لك بالتحكم في تنفيذ كوروتين. تأخذ هذه الطريقة كمعلمة مرجعا إلى الجذر الذي يجب إيقافه.
أولا ، تحتاج إلى إعلان متغير من نوع كوروتين ، حيث سيتم حفظ إشارة إلى كوروتين قيد التشغيل:
خاصة كوروتين ميكوروتين;
ثم ، لبدء كوروتين ، تحتاج إلى تعيين نتيجته لهذا المتغير:
ميكوروتين = ستارتكوروتين(ميكوروتين ());
لإيقاف الكوروتين ، يتم استخدام طريقة التوقف ، والتي يتم تمرير الرابط المحفوظ إليها:
ستوبروتين (ميكوروتين);
وبالتالي ، سيتم إيقاف كوروتين في التكرار التالي ، بعد الانتهاء من المهمة الحالية.
Stop ستوبروتين:
باستخدام يونيتينجين;
باستخدام النظام.التحصيل;
فئة عامة كوروتينمثال: السلوك الأحادي
{
خاصة كوروتين ميكوروتين;
بداية الفراغ()
{
// Запускаем корутину
ميكوروتين = ستارتكوروتين(ميكوروتين ());
}
تحديث باطل()
{
إذا (المدخلات.جيتكيدون (كيكود.الفضاء))
{
// Останавливаем корутину
ستوبروتين (ميكوروتين);
}
}
إينوميراتور ميكوروتين()
{
بينما (صحيح)
{
تصحيح.سجل ("كوروتين قيد التشغيل");
العائد العائد لاغية;
}
}
}
في هذا المثال ، سيتم بدء تشغيل الكوروتين عند بدء تشغيل المشهد وسيستمر في العمل حتى يتم الضغط على شريط المسافة. بعد الضغط على المفتاح ، سيتم إيقاف كوروتين ، ولن تعرض وحدة التحكم الرسالة "كوروتين قيد التشغيل".
استخدم الكلمة الأساسية لكسر العائد للخروج قبل الأوان
الكلمة الرئيسية لكسر العائد هي واحدة من التركيبات الرئيسية التي يمكن استخدامها للخروج من كوروتين قبل الأوان في الوحدة. يسمح لك بالتوقف فورا عن تنفيذ الخطوة الحالية للكوروتين والخروج منها.
كقاعدة عامة ، يتم استخدام الكلمة الأساسية لكسر العائد مع تعبيرات التحكم مثل إذا أو التبديل. من خلال إضافة هذه التركيبات إلى كود كوروتين ، من الممكن تحديد الشروط التي بموجبها من الضروري إنهاء تنفيذها قبل الأوان.
مثال على استخدام الكلمة الرئيسية لكسر العائد في الوحدة:
إينوميراتور ميكوروتين () {
بينما (الشرط) {
// الخطوة 1
// الخطوة 2
// الخطوة 3
إذا (يجب كسر) {
كسر العائد ؛ / / توقف عن تنفيذ الكوروتين
}
// الخطوة 4
// الخطوة 5
}
}
في هذا المثال ، سيتم تنفيذ كوروتين طالما أن شرط الشرط صحيح. يتم تنفيذ الخطوات 1 ، 2 ، 3 داخل حلقة بينما. ومع ذلك ، إذا كان ينبغيكسر يصبح الشرط صحيحا ، ثم باستخدام الكلمة كسر العائد ، يتم إنهاء تنفيذ كوروتين على الفور.
إذا لم يتم استيفاء شرط الكسر ، فبعد الخطوة 5 ، يعود الكوروتين إلى الخطوة 1 وتستمر الدورة.
يتيح لك استخدام الكلمة الرئيسية لكسر العائد التحكم بمرونة في تنفيذ الكوروتين ومقاطعته إذا لزم الأمر. هذا مفيد بشكل خاص عندما تحتاج إلى إيقاف الكوروتين استجابة لحدث أو حالة معينة.
التعامل مع الاستثناءات لمنع "تسرب" كوروتين
في الوحدة ، غالبا ما تستخدم الكوروتينات لأداء عمليات طويلة مثل تحميل البيانات والرسوم المتحركة والمهام الأخرى التي تستغرق وقتا. ومع ذلك ، إذا لم يتم التعامل مع كوروتينس وإدارتها بشكل صحيح ، فإنها يمكن أن تؤدي إلى تسرب الذاكرة وانخفاض الأداء.
واحد من أسباب حدوث" تسرب " من كوروتينس هو الانتهاء غير صحيح. عند إنهاء كوروتين بسبب استثناء أو خطأ ، قد لا يتم حذفه من الذاكرة ، مما يؤدي إلى تسرب الموارد.
لمنع "تسرب" كوروتينس ، فمن الضروري التعامل مع الاستثناءات التي تحدث أثناء تنفيذ كوروتينس. فيما يلي بعض النصائح المفيدة:
- استخدام كتل محاولة الصيد-تضمين رمز كوروتين الخاص بك في كتلة محاولة الصيد للقبض على أي استثناء قد يحدث. في كتلة الصيد ، يمكنك تنفيذ الإجراء اللازم ، على سبيل المثال ، عرض رسالة خطأ أو تحرير أي موارد.
- استخدام كتلة أخيرا-باستخدام كتلة أخيرا يسمح لك لتنفيذ التعليمات البرمجية بغض النظر عما إذا حدث استثناء أم لا. في كتلة أخيرا ، يمكنك تحرير الموارد أو تنفيذ الإجراءات الأخرى اللازمة لإكمال كوروتين.
- أخطاء الإخراج إلى وحدة التحكم-إذا لم تقم بإجراء معالجة استثناء كاملة داخل كوروتين ، يمكنك استخدام التصحيح.لوجيرور () أو التصحيح.لوجكسيبتيون () لإخراج الأخطاء إلى وحدة التحكم الوحدة. سيسمح لك ذلك بالحصول على معلومات حول الأخطاء وتسهيل تتبعها وإصلاحها.
مثال على استخدام كتل محاولة الصيد للتعامل مع الاستثناءات في كوروتين:
| إينوميراتور ميكوروتين() | |
|---|---|
| حاول | // كود كوروتين الخاص بك |
| الصيد (استثناء ه) | // معالجة الاستثناء ، على سبيل المثال ، إخراج رسالة الخطأ |
| أخيرا | // تحرير الموارد أو تنفيذ إجراءات أخرى | العائد العائد لاغية; |
لاحظ أنه عندما ينتهي كوروتين بسبب استثناء ، سيتم تجميده ولن يتم تنفيذه حتى يتم استدعاؤه مرة أخرى أو إعادة تشغيله.
معالجة الاستثناء في كوروتينس هو جانب مهم من تنفيذها السليم. لا تنس استخدام كتل المحاولة والتعامل مع الأخطاء بشكل مناسب لتجنب تسرب الذاكرة ومشكلات الأداء.
لا ننسى الكلمة العودة للخروج الصحيح
عندما تعمل مع الكوروتين في الوحدة ، من المهم أن تضع في اعتبارك الإكمال الصحيح لكل منها. لتجنب فقدان الذاكرة والتشغيل غير الصحيح ، لا تنس استخدام الكلمة الرئيسية الإرجاع لإكمال كوروتين والخروج منه.
أثناء تنفيذ كوروتين ، يمكن تعليقه عن طريق استدعاء وظيفة العائد. نتيجة لذلك ، يتم نقل التحكم إلى طريقة أخرى أو كوروتين ، وينتظر الكوروتين الحالي تنشيطه التالي. ومع ذلك ، إذا لم تستخدم عامل الإرجاع للخروج من الكوروتين في اللحظة المناسبة ، فسيستمر العمل بعد التنشيط ، مما قد يؤدي إلى عواقب غير مرغوب فيها.
من أجل إكمال تنفيذ كوروتين بشكل صحيح ، استخدم الكلمة الرئيسية الإرجاع في الأماكن التي تريد إيقافها. يسمح لك بيان الإرجاع بالخروج من الكوروتين في أي وقت ونقل التحكم مرة أخرى إلى رمز الاتصال.
على سبيل المثال ، إذا كنت تريد إيقاف الكوروتين بعد استيفاء شرط معين ، فيمكنك استخدام عبارة الإرجاع داخل العبارة الشرطية:
إينوميراتور ميكوروتين()
{
بينما (صحيح)
{
// تنفيذ الإجراءات
// التحقق من حالة الخروج من الكوروتين
إذا (شرط)
{
// الخروج من كوروتين عندما
يتم استيفاء شرط العودة;
}
العائد العائد لاغية;
}
}
وبالتالي ، فإن استخدام الكلمة الرئيسية المرتجعة داخل كوروتين يسمح لك بالتحكم في تنفيذها ويضمن الخروج الصحيح منها.
مثال: إيقاف الكوروتين عند حدوث حالة معينة
تتمثل إحدى طرق إيقاف الكوروتين في الوحدة في التحقق من حالة معينة ومقاطعة تنفيذ الكوروتين إذا تم استيفاء هذا الشرط. يمكن أن يكون هذا النهج مفيدا عندما تحتاج إلى إيقاف الكوروتين عند حدوث حدث معين أو الوصول إلى قيمة معينة.
يصل إلى قيمة معينة ، على سبيل المثال ، 10:
إينوميراتور مثالبروتين()
{
كثافة العمليات النتيجة = 0;
بينما (النتيجة < 10)
{
// الرمز الخاص بك زيادة متغير النتيجة
// التحقق من الحالة
إذا (النتيجة > = 10)
{
كسر العائد ؛ / / مقاطعة تنفيذ كوروتين
}
العائد العائد لاغية; // وقفة بين التكرارات من
كوروتين }
}
أقل من 10.
كوروتين يقطع تنفيذه.
، ثم يتكرر مرة أخرى.
يصل أو يتجاوز 10.
مثال: إيقاف كوروتين لحدث ما
في بعض الأحيان نحتاج إلى إيقاف تنفيذ كوروتين لحدث معين. على سبيل المثال ، نريد إيقاف الكوروتين عندما يصل اللاعب إلى مكان معين على المستوى أو عندما يحدث إجراء معين في اللعبة. في مثل هذه الحالات ، يمكننا استخدام الأحداث للسيطرة على تنفيذ كوروتين.
في الوحدة ، يمكننا إنشاء الأحداث الخاصة بنا باستخدام المندوبين وأساليب الحدث. Давайте рассмотрим пример, в котором мы остановим корутину, когда игрок достигнет места с координатами (10, 0, 5).
| Код |
|---|
|
| OnPlayerReachedTarget(); |
|---|
|
{
الفراغ الخاص أونينابل()
- {
لاعب.علىلاعبالاتصالالهدف + = توقف;
}
الفراغ الخاص أونديسابل()
{
لاعب.علىلاعبالاتصالالهدف - = ستوبروتين;
}
توقف الفراغ الخاص ()