خط الرؤية
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 39 من 71.
القرب من حارس لا يعني أن الحارس يراك؛ فوجود جدار بينكما يحجب الرؤية. لاختبار خط الرؤية، أطلق شعاعًا من العين باتجاه الهدف، وتحقق من أن أول ما يصيبه هو الهدف نفسه. الاتجاه هو موضع الهدف ناقص موضعك، والشعاع بهذا الطول يصل إلى الهدف:
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) أنه لا يوجد جدار في الطريق.
التحدي
متوسطلوّن الحارس بالأحمر ما دام يستطيع رؤية اللاعب، وإلا فبالأخضر.
- اكتب
bool CanSee(): باستخدامVector3 toPlayer = player.position - transform.position;، أعدfalseعندما يكونtoPlayer.magnitude > range. - ثم نفّذ
Physics.Raycast(transform.position, toPlayer, out RaycastHit hit, range)وأعدhit.transform == player؛ إذا لم يُصب الهدف، فأعدfalse. - في
Update()، عيّن لون البرج إلىColor.redأوColor.greenاستنادًا إلىCanSee().
اضغط «العب» وامشِ خلف الجدار. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public class Sentry : MonoBehaviour
{
public Transform player;
public float range = 8f;
void Update()
{
// أحمر ما دام الحارس يستطيع رؤية اللاعب، وأخضر بخلاف ذلك.
}
}
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity