רדיפה בטווח
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 53 מתוך 71.
רוב האויבים מניחים לך עד שמתקרבים אליהם. מדדו את המרחק לשחקן בכל צעד פיזיקה, ורדפו אחריו רק כשהוא בטווח. הסליים הזה רודף כשהוא בטווח sightRange ונשאר במקום מחוץ לו:
void FixedUpdate()
{
Vector3 toPlayer = player.position - rb.position;
toPlayer.y = 0f;
if (toPlayer.magnitude < sightRange)
{
Vector3 dir = toPlayer.normalized;
rb.linearVelocity = new Vector3(dir.x * speed, rb.linearVelocity.y, dir.z * speed);
}
else
{
rb.linearVelocity = new Vector3(0f, rb.linearVelocity.y, 0f);
}
}החלק else חשוב: Rigidbody שומר על המהירות שלו עד שמשהו משנה אותה. בלעדיו, סליים שמאבד אותך ימשיך להחליק עד שהחיכוך יעצור אותו, ועל קרח הוא לא ייעצר לעולם. מכיוון ש־y הוגדר תחילה ל־0, הערך toPlayer.magnitude הוא המרחק לאורך הקרקע, ולכן שחקן שעומד על ארגז לצד הסליים עדיין נחשב כמי שנמצא לידו.
לטווח אחד יש נקודת תורפה. שחקן שעומד על הגבול שלו נסחף פנימה והחוצה ממנו, והסליים מתחיל ונעצר שוב ושוב. אויבים נמנעים מכך באמצעות שני טווחים: הם מבחינים בשחקן כשהוא בתוך טווח קצר, ומוותרים רק כשהוא מעבר לטווח ארוך יותר. ערך bool זוכר אם האויב רודף, ובין שני הטווחים שום דבר לא משנה אותו, כך שהאויב ממשיך לעשות את מה שעשה.
אתגר
בינוניגרמו לזאב להבחין בשחקן מקרוב ולוותר כשהוא רחוק.
- ב־
FixedUpdate(), חשבו את המרחק האופקי לשחקן: כשהוא קטן מ־noticeRange, הגדירו את השדהbool chasingלערךtrue; כשהוא גדול מ־giveUpRange, הגדירו אותו לערךfalse. - בזמן
chasing, הגדירו אתrb.linearVelocityכך שינוע לעבר השחקן במהירותspeed, תוך שמירה על ערך y. - אחרת, הגדירו את
rb.linearVelocity = new Vector3(0f, rb.linearVelocity.y, 0f);.
לחצו על "שחק", התקרבו אל הזאב ואז רוצו. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
using UnityEngine;
public class Wolf : MonoBehaviour
{
[SerializeField] private Transform player;
[SerializeField] private float speed = 3f;
[SerializeField] private float noticeRange = 4f;
[SerializeField] private float giveUpRange = 8f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// לזהות את השחקן, לוותר על המרדף אחריו, ולרדוף אחריו או לעמוד במקום
}
}
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין