Menu
CoddyTech

RaycastHit

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

يمكن لـ Physics.Raycast أيضًا إخبارك بما اصطدم به. أضف out RaycastHit hit بعد الاتجاه: عندما تُرجع الطريقة true، تكون قد ملأت hit بالتفاصيل. تتيح out لطريقة C# إعادة قيمة إضافية عبر متغير تقدّمه لها. يسجّل محدد المدى هذا ما يشير إليه، ومدى بُعده، عندما تضغط على Space:

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
        {
            Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
        }
    }
}

عند توجيهه نحو جدار تبعد واجهته 12 وحدة، يسجّل Wall is 12 units away. الحقول الأخرى: يشير hit.point إلى الموضع في العالم الذي لامس فيه الشعاع السطح، ويمثل hit.normal الاتجاه الذي يواجهه السطح عند ذلك الموضع ((0, 1, 0) على أرض مستوية)، ويمثل hit.transform الـ Transform للكائن الذي تم الاصطدام به. ومن خلال hit.collider.gameObject يمكنك الوصول إلى أي معلومات أخرى عنه، مثل الوسم الخاص به.

اقرأ hit داخل if فقط. عندما لا يصب الشعاع هدفًا، تُرجع Raycast القيمة false ولا يحتوي hit على أي شيء مفيد: فقيمة collider فيه هي null.

challenge icon

التحدي

متوسط

أضف إلى المسدس منظار تصويب ليزريًا: نقطة حمراء في الموضع الذي يصل إليه الليزر.

  1. في Update()، أجرِ تصادمًا شعاعيًا باستخدام Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range).
  2. عند إصابة الهدف، استدعِ dot.gameObject.SetActive(true); واضبط dot.position = hit.point;.
  3. عند عدم إصابة الهدف، استدعِ dot.gameObject.SetActive(false);.

اضغط «العب» وأدر المسدس: ستتحرك النقطة على الجدار والصناديق. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;

public class LaserSight : MonoBehaviour
{
    public Transform dot;
    public float range = 15f;

    void Update()
    {
        // ضع النقطة حيث يلتقي الليزر بسطح؛ وأخفها عندما لا يصيب الليزر أي شيء.
    }
}

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

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