خط الرؤية
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 37 من 63.
القرب من الحارس لا يعني أنه يراك: فوجود جدار بينكما يحجب رؤيته. لاختبار خط الرؤية، أطلق شعاعًا من العين نحو الهدف، وتحقق من أن أول ما يصطدم به هو الهدف نفسه. الاتجاه هو موضع الهدف ناقص موضعك، والشعاع بهذا الطول يصل إلى الهدف:
public Transform target;
bool CanSee()
{
Vector3 toTarget = target.position - transform.position;
if (Physics.Raycast(transform.position, toTarget, out RaycastHit hit, toTarget.magnitude))
{
return hit.transform == target;
}
return false;
}تسجّل كاميرا مراقبة على عمود العبارة I see you ما دامت CanSee() صحيحة. عندما يكون الهدف في مكان مكشوف، يكون الهدف أول ما يصطدم به الشعاع. وعندما يكون الهدف خلف صندوق، يصطدم الشعاع بالصندوق أولًا، وتكون قيمة hit.transform هي قيمة الصندوق، وتكون النتيجة false. تُرجع Physics.Raycast وحدها true للصندوق أيضًا، ولهذا تتم مقارنة الجسم الذي اصطدم به الشعاع بالهدف.
يحتاج الهدف إلى مصادم كي يعثر عليه الشعاع. لا يحتاج الشعاع إلى اتجاه مُطبَّع، لأن طوله يُحدَّد بواسطة maxDistance. تسأل Physics.Linecast(from, to) السؤال بالعكس: هل يوجد أي مصادم بين نقطتين؟ وتعني !Physics.Linecast(eye, target.position, wallMask) أنه لا يوجد جدار في الطريق.
التحدي
متوسطيراقب برج الحراسة اللاعب. يوجد البرنامج النصي Sentry على البرج، ويُعيّن المفتش له player وrange بقيمة 8. يوضّح لون البرج ما يراه:
- عندما يتمكن من رؤية اللاعب، لوّن البرج بالأحمر (
Color.red)، وبالأخضر (Color.green) فيما عدا ذلك. - لا يرى اللاعب إلا عندما لا تزيد المسافة بينهما على
rangeوحدة، ولا يوجد أي شيء بينهما.
اضغط على Play وحرّك اللاعب حول الجدار باستخدام الأسهم، ثم اضغط على Check.
جرّب بنفسك
using UnityEngine;
public class Sentry : MonoBehaviour
{
public Transform player;
public float range = 8f;
void Update()
{
// أحمر ما دام الحارس يستطيع رؤية اللاعب، وأخضر خلاف ذلك.
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق