Menu
CoddyTech

Physics.Raycast

جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 35 من 71.

يطلق فحص الأشعة خطًا غير مرئي من نقطة باتجاه معيّن، ويُبلغ عمّا إذا كان قد اصطدم بمصادم. تُرجع Physics.Raycast(origin, direction, maxDistance) القيمة true عندما يكون هناك مصادم على الخط ضمن مسافة maxDistance وحدة، وتُرجع false خلاف ذلك. تكبح هذه السيارة عندما يكون أي شيء على بُعد أقل من وحدتين أمام مقدمتها:

public float brakeDistance = 2f;

void Update()
{
    if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
    {
        Debug.Log("Brake!");
    }
}

يدور transform.forward مع السيارة، لذا يتجه الشعاع دائمًا إلى خارج مقدمتها؛ أما Vector3.forward فيشير دائمًا على امتداد محور z للعالم. يبدأ الشعاع من مركز السيارة، داخل مصادمها، والشعاع لا يُبلغ أبدًا عن مصادم يبدأ من داخله، لذا لا ترى السيارة نفسها. إذا حذفت maxDistance فسيستمر الشعاع إلى ما لا نهاية: وستكبح السيارة بسبب جدار على الجانب الآخر من الخريطة.

ترصد الأشعة المصادمات، لا ما يتم رسمه: فالجسم الذي يحتوي على Renderer ولا يحتوي على مصادم يكون غير مرئي لها، ويُحتسب مصادم المشغّل اصطدامًا. أثناء الاختبار، يرسم Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) الشعاع في نافذة Scene في Unity.

challenge icon

التحدي

متوسط

اجعل باب المتجر يفتح عندما يقف شخص تحت المستشعر.

  1. في Update()، اختبر Physics.Raycast(transform.position, Vector3.down, reach): شعاعًا يتجه مباشرةً إلى الأسفل، طوله reach وحدة، ويتوقف فوق الأرض.
  2. عندما تكون النتيجة صحيحة، استدعِ door.SetActive(false);، وفي else، door.SetActive(true);.

اضغط على «العب» وامشِ بالزائر إلى تحت المستشعر: يفتح الباب، ثم يُغلق خلفه. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;

public class DoorSensor : MonoBehaviour
{
    public GameObject door;
    public float reach = 3f;

    void Update()
    {
        // افتح الباب ما دام الشعاع المتجه إلى الأسفل من Sensor يصطدم بشيء ما.
    }
}

جميع دروس الفيزياء وأسلوب اللعب

تدرّب بنفسك: Playground لـ Unity