تنفيذ الكشف عن النتائج باستخدام خرائط التجانب
بيئة التحقق
- نوافذ
-
- ويندوز ١١
- محرر الوحدة
-
- 2021.3.3f1
- حزمة نظام الإدخال
-
- 1.3.0
المتطلبات الأساسية لهذه النصيحة
تم إجراء الإعدادات التالية مسبقا كمقدمة لوصف هذه النصيحة.
ما هي المتطلبات الأساسية لهذه النصيحة؟
- إنشاء خريطة 2D من أعلى إلى أسفل باستخدام خرائط تجانب Unity القياسية
- التعامل مع الاصطدام مع الفيزياء القياسية (2D)
حول استعارة مواد الخرائط
نقوم بمعالجة الاقتراض من المواقع التالية.
تنفيذ شخصيات المشي
أولا ، قم بتنفيذ خريطة وحرف يقوم باكتشاف النتائج. يمكن نقل هذا الحرف باستخدام مفاتيح المؤشر على لوحة المفاتيح. ومع ذلك ، إذا قمت بتنفيذ نزهة مناسبة ، فستكون طويلة وبعيدة عن جوهر نصائح الكتاب ، لذلك هذه المرة سأنقل صورة واحدة بسيطة فقط.
إذا كنت ترغب في تنفيذ الرسوم المتحركة للمشي ، فراجع النصائح التالية:
بعد إنشاء المشروع، أضف صورة كائن للكائن الذي تريد نقله إلى المشروع.
حدد الصورة واضبط وحدات البكسل لكل وحدة على 32 من المفتش. هذا لأن حجم مربع واحد من شريحة الخريطة هو 32 بكسل ، لذا فهو يناسب ذلك. بمجرد التهيئة ، انقر فوق الزر "تطبيق" أدناه.
ضع الكائن في العرض.
قم بإنشاء برنامج نصي لنقل الكائن. هذا مشابه للنصائح التالية:
اترك اسم Player
البرنامج النصي ك .
الكود على النحو التالي:
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// キーボードの情報を取得
var keyboard = Keyboard.current;
// スプライトの移動処理
if (keyboard.leftArrowKey.isPressed)
{
transform.Translate(-0.1f, 0, 0, Space.World);
}
if (keyboard.rightArrowKey.isPressed)
{
transform.Translate(0.1f, 0, 0, Space.World);
}
if (keyboard.upArrowKey.isPressed)
{
transform.Translate(0, 0.1f, 0, Space.World);
}
if (keyboard.downArrowKey.isPressed)
{
transform.Translate(0, -0.1f, 0, Space.World);
}
}
}
قم بالإرفاق بالكائن الذي تريد نقله.
قم بتشغيل اللعبة وتحقق مما إذا كنت تريد تحريكها باستخدام لوحة المفاتيح.
إعداد نصائح الخريطة
بادئ ذي بدء ، سنقوم بإعداد mapchip وإنشاء خريطة. يشبه هذا الإجراء النصائح التالية: MapTips مع 2D Tilemap إضافات قادرة أيضا على اكتشاف الاصطدام ، ولكن لن يتم استخدامها في هذه المقالة لأن الإجراء سيكون طويلا.
قم بإعداد الصورة الأصلية ل MapTip وأضفها إلى مشروعك. لتسهيل فهم العملية ، يرجى إعداد "مكان يمكن المشي فيه" و "مكان غير قابل للمشي" لمواد رقاقة الخريطة.
قم بإعداده ل MapChips في المفتش وانقر فوق الزر تطبيق. بمجرد التكوين، افتح محرر الكائن.
إنها خريطة 32 بكسل ، لذا سأقسمها عند 32.
حدد علامة التبويب لوحة التجانب. إذا لم يكن كذلك ، فقم بعرضه باستخدام "Window > 2D -> Tile Palette" من القائمة. إنشاء لوحة جديدة. الاسم تعسفي ، لكن في الوقت الحالي سنسميه "MapChipPalette".
قم بإنشاء مجلد MapChipPalette في المشاهد وحدده.
أضف تلميح خريطة عن طريق سحبه إلى اللوحة. احفظه في مجلد MapChipPalette الذي أنشأته مسبقا.
إنشاء خريطة
هذه المرة ، سيتم تنفيذ حكم ضرب الخريطة بوحدات "Tilemap". لذلك ، سنقوم بإنشاء خريطتين Tilemap ، "Tilemap بدون اكتشاف النتائج" و "Tilemap مع اكتشاف النتائج".
أولا، قم بإنشاء خريطتي Tilemap في التسلسل الهرمي. يمكنك إنشاء اثنين في الشبكة. الأسماء هي "TilemapObeject" و "TilemapGround" للوضوح.
أولا ، قم بإنشاء "TilemapGround". نظرا لأنه نطاق متحرك ، يمكنك ببساطة وضع الأرض. إذا كان على الأرض ، يمكنك تغيير النمط.
بالمناسبة ، إذا كان الحرف مخفيا ، فحدد كائن الحرف واضبط ترتيب طبقة المفتش Sprite Renderer
على 2.
ترتيب الطبقات هو 0 افتراضيا و Tilemap هو 0 ، لذلك إذا قمت بزيادته فوق هذه القيمة ، عرضه في المقدمة.
ثم حدد TilemapObject وضع تلميح الخريطة الذي تريد جعله بلا حراك. اضبط ترتيب الطبقة على 1 أولا. هذا لجعله يظهر أمام الأرض.
هذا ما يبدو عليه إذا قمت بإخفاء الأرض.
بالطبع ، في هذه المرحلة ، لا توجد إعدادات متعلقة باكتشاف الاصطدام ، لذا يمكنك الركوب على أرض مرتفعة بشكل طبيعي. بعد ذلك ، سنقوم بتعيين اكتشاف الاصطدام.
إعدادات الكشف عن الاصطدام
أولا ، دعنا نعد الشخصية. هذا الإعداد هو تقريبا نفس النصائح أدناه ، لذلك سوف أتخطى التفاصيل وأشرح الإجراء بإيجاز.
حدد كائن حرف من التسلسل الهرمي وحدد Physics 2D -> Circle Collider 2D من إضافة مكون. إذا كان شكل الكائن مستطيلا ، فإن "Box Collider 2D" جيد.
وبالمثل ، أضف "Physics 2D -> Rigidbody 2D".
اضبط مقياس الجاذبية على 0 لمنع Rigidbody 2D
السقوط التلقائي.
تحقق من Z تحت القيود لمنع الكائن من الدوران عند الاصطدام.
بعد ذلك ، حدد "TilemapObject" الذي تريد الضغط عليه وحدد "Tilemap -> Tilemap Collider 2D" من "إضافة مكون".
هذا كل ما في الامر. لا تحتاج حتى إلى أي برمجة. قم بتشغيل اللعبة وحاول ضرب الكائن الذي يصبح الجدار. أعتقد أنه يمكنك التأكد من توقفه بشكل صحيح.
ومع ذلك ، عندما تضغط عليه بالفعل ، أعتقد أنه ستكون هناك نقاط قلق في السلوك. فيما يلي بعض الحلول:
سلوك غير مريح للكشف عن النتائج مع الخريطة والحلول
عندما تصطدم بالحائط ، قد تجد بعض الأشياء التي تزعجك.
إذا تحركت ضد الحائط ، فسوف تعلق في المنتصف
Box Collider 2D
أعتقد أنه سيحدث إذا كنت تستخدم كائنا.
على سبيل المثال ، من المشهد أدناه ، عندما تضغط على المفتاح في أسفل اليسار ، فأنت تريد أن يتحرك إلى اليسار على طول الجدار. ومع ذلك ، بعد بعض التقدم ، أعتقد أنه سوف يعلق في شيء ما ويتوقف.
التعرف على الخدوش في الجدران حسب الموضع
Circle Collider 2D
أعتقد أنه من السهل أن نفهم إذا كنت تعلق .
يجب أن يكون الجدار مسطحا ، ولكن إذا قمت بتحريكه على الحائط ، فسترى أن الجدار يتحرك كما لو كان غير مستو.
أسباب وحلول للعقبات والمطبات
يبدو أن سبب حدوث ذلك هو أن "تحديد النتيجة يتم على أساس رقاقة الخرائط". في الواقع ، عند تحديد TilemapObject ، يظهر خط أخضر في المكان الذي يوجد فيه اكتشاف النتيجة ، ويمكنك أن ترى أن هذا خط مرسوم بوحدات MapTip.
لذلك ، إذا كان الكائن المتحرك على خط مكافئ لشريحة خريطة واحدة بالضبط ، الحكم عليه على أنه ضرب بشريحة خريطة واحدة. إذا اصطدمت بحدود رقائق الخريطة ، ضرب شريحتين للخريطة والحكم عليهما ، وبالتالي ستزداد قوة الارتداد.
أعتقد أن أفضل طريقة لحل هذه المشكلة هي الجمع بين اكتشاف النتائج ورقائق الخرائط المرفقة. هيريس كيفية القيام بذلك:
حددTilemap Collider 2D
"TilemapObject" مع اكتشاف النتائج من المفتش وتحقق من "الاستخدام في المركب" من .
كما هو مذكور في التحذير ، هذا وحده ليس له أي تأثير ، لذا حدد "Physics 2D -> Composite Collider 2D" من "إضافة مكون".
تمت إضافة Rigidbody 2D جنبا إلى جنب مع المصادم المركب 2D.
إنه أمر محير بعض الشيء ، لكنني أعتقد أنه يمكنك تأكيد أن الخط الأخضر على الحدود بين رقائق الخرائط مع اكتشاف الضربات قد اختفى.
لا أريد أن تتحرك خريطة البلاط ، لذلك سأترك Rigidbody 2D
نوع جسم المكون على أنه "ثابت".
الآن قم بتشغيل اللعبة وحاول تحريكها. أعتقد أنه حتى لو تحركت قطريا على طول الجدار ، فلن يتم القبض عليه ويمكنك التحرك بسلاسة دون حركة وعرة.
القضاء على الشخصية يدفع مرة أخرى من الجدران
يمكنك أن ترى أنه إذا قمت بتحريك الشخصية لدفع الجدار ثم توقفت عن الحركة ، فسوف تتصرف قليلا مثل الارتداد من الحائط.
لحل هذه المشكلة ،Rigidbody 2D
حدد كائن الحرف وقم بتغيير "اكتشاف الاصطدام" إلى "مستمر" من المكون.
الفرق بين "متقطع" و "مستمر" هو كما يلي.
متقطع
اكتشاف الاصطدام هو آلية تفكر بعد الحركة. إنه نموذج يقوم بالكشف عن الاصطدام من الحالة التي يتم تحريكها وتضمينها في الحائط. من السهل أن نفهم ما إذا كنت تربطه بالترامبولين والمطاط ، ولكن كلما زاد تضمينه ، زادت القوة المثيرة للاشمئزاز ، وسيكون الارتداد أقوى. بدلا من ذلك ، يتم إجراء الحساب بعد الانتقال ، وبالتالي فإن تكلفة المعالجة منخفضة.
مستمر
تتم معالجتها أثناء تحديد ما هو في الطريق. تحديد ما إذا كان هناك جدار بين الموضع قبل وبعد الحركة ، إذا كان هناك جدار ، فسوف يحكم على الاصطدام هناك ويتوقف ، لذلك لا يوجد أي تنافر عمليا. بدلا من ذلك ، تزداد تكلفة المعالجة قليلا لأن الحساب مدرج في منتصف الحركة.
عالق في زاوية كائن الخريطة
اعتمادا على البرنامج والموقع ، يتم القبض على البعض والبعض الآخر ليس كذلك ، ولم يتغير السبب كثيرا. بالمناسبة ، يحدث ذلك مع الزوايا الزاوية مثل Box Collider 2D ، وليس مع الدوائر المستديرة.
حتى في حالة حدوث مثل هذه الظاهرة الغامضة ، من الجيد أن يكون لديك زوايا مستديرة للمصادم لتجنب العقبات. يقتصر على Box Collider 2D ، ولكن لجعله مستديرا ، يحتوي مكون Box Collider 2D الخاص بكائن الحرف على "نصف قطر حافة" وتضع قيمة هناك. إذا أدخلت 1 كوحدة عددية ، فسيحدث التقريب لحجم الكائن. يعتمد ذلك على الحجم ، لكن من الجيد وضع حوالي 0.1.
بالمناسبة ، يزداد حكم الضرب فقط بحجم الاستدارة ، لذا يرجى ضبطه إذا كان كبيرا. يحتوي Box Collider 2D على زر تحرير المصادم الذي يسمح لك بتغيير حجمه مباشرة في العرض بالنقر فوق الزر. نظرا لأن الخط الأخضر الخارجي هو اكتشاف النتيجة الفعلي ، اضبط الحجم بحيث لا يكون غير طبيعي.
بعد ذلك ، قم بتشغيل اللعبة للتأكد من عدم خدشها وإجراء التعديلات.