الباب
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 71 من 71.
يختتم هذا التحدي القسم: أطباق تعمل كمُشغِّلات، وشيفرة محفوظة في نص برمجي واحد، وباب تتحكم فيه مهمة روتينية مشتركة تنتظر حتى يخلو المدخل.
التحدي
صعبافتح الباب عند Unlocked، وأغلقه مرة أخرى لاحقًا، دون أن يكون اللاعب في طريقه أبدًا.
- اكتب
IEnumerator OpenDoor():door.SetActive(false);، ثمyield return new WaitForSeconds(openTime);. - ثم استخدم
while (Physics.CheckSphere(doorway.position, 1f, LayerMask.GetMask("Player")))، وyield return null;. - أخيرًا، استخدم
door.SetActive(true);وسجّلDoor closed. ابدأها باستخدامStartCoroutine(OpenDoor());بعد تسجيلUnlocked.
اضغط «العب»، وافتح الباب واخرج. ثم اضغط «تحقق».
جرّب بنفسك
using System.Collections;
using UnityEngine;
public class CodeLock : MonoBehaviour
{
[SerializeField] private Renderer[] plates;
[SerializeField] private GameObject door;
[SerializeField] private Transform doorway;
[SerializeField] private float openTime = 4f;
private int next = 1;
public void Press(int number)
{
if (number == next)
{
Debug.Log("Plate " + number);
next++;
if (next > 3)
{
Debug.Log("Unlocked");
next = 1;
}
}
else
{
Debug.Log("Wrong plate");
next = 1;
StartCoroutine(Flash());
}
}
IEnumerator Flash()
{
foreach (Renderer plate in plates)
{
plate.material.color = Color.red;
}
yield return new WaitForSeconds(1f);
foreach (Renderer plate in plates)
{
plate.material.color = Color.gray;
}
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity