Menu
CoddyTech

רדוף אחרי השחקן

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 50 מתוך 63.

אויב שרודף אחרי השחקן זקוק ל־Rigidbody, כך שקירות יעצרו אותו והוא יוכל לדחוף ולהידחף. המרדף עצמו מתבצע באמצעות מהירות המכוונת אל השחקן, ומוגדרת פעם אחת בכל צעד פיזיקה. הזומבי הזה הולך לעבר כל מה שנמצא במשבצת player שלו:

[SerializeField] private Transform player;
[SerializeField] private float speed = 2.5f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    Vector3 toPlayer = player.position - rb.position;
    toPlayer.y = 0f;
    Vector3 dir = toPlayer.normalized;
    rb.linearVelocity = new Vector3(dir.x * speed, rb.linearVelocity.y, dir.z * speed);
}

player.position - rb.position מצביע מהזומבי אל השחקן. ערך ה־y שלו מוגדר ל־0, כך שהזומבי הולך במישור גם כשהשחקן עומד גבוה או נמוך יותר, ו־normalized נותן לו אורך של 1, כך שהזומבי הולך במהירות speed בין שהשחקן נמצא במרחק של 2 יחידות ובין שהוא נמצא במרחק של 20. המהירות החדשה משמרת את מהירות ה־y הישנה, כך שכוח הכבידה עדיין מושך את הזומבי למטה כשהוא יורד ממדרגה. האפשרות Freeze Rotation מופעלת ב־Rigidbody שלו, כך שהוא לא נוטה כשהוא הולך.

מהירות שאת מגדירה יוצרת הולך שמתחיל ללכת ומסתובב מיד. אפשר לדחוף אויב כבד באמצעות AddForce בתוך אותו FixedUpdate: הוא צובר מהירות, שומר על התנופה שלו וממשיך מעבר לשחקן כשהשחקן זז הצידה. הימנעי מהזזת ה־Transform של רודף: כך הוא עלול להימצא בתוך קיר באותה קלות כמו בכל מקום אחר, ומנוע הפיזיקה יכול רק לדחוף אותו החוצה לאחר מכן.

challenge icon

אתגר

בינוני

סלע מתגלגל בעקבות השחקן. כתבו את הסקריפט Boulder עבור הסלע, שהוא כדור עם Rigidbody. ה-Inspector מקצה לו את player (השחקן) ואת force (6). הסקריפט Player מוכן: החצים מזיזים את השחקן.

  • בכל צעד פיזיקלי, דחפו את הסלע לעבר השחקן באמצעות AddForce, בעוצמה של force בין שהשחקן קרוב ובין שהוא רחוק.
  • דחפו לאורך הקרקע בלבד, בלי רכיב למעלה או למטה, גם כשהשחקן עומד על הקצה.
  • אל תזיזו את ה-Transform שלו ואל תקפיאו את הסיבוב שלו: החיכוך גורם לו להתגלגל.

לחצו על Play, התרוצצו במעגלים סביב הסלע, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;

public class Boulder : MonoBehaviour
{
    [SerializeField] private Transform player;
    [SerializeField] private float force = 6f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // דחוף את הסלע לעבר השחקן לאורך הקרקע
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה פיזיקה ומשחקיות