Menu
CoddyTech

כוונון

שיעור 8 מתוך 18 בקורס משחק Unity: הגנת מגדלים של Coddy.

מגדל פונה לעבר המטרה שלו: לא המגדל כולו, שעומד על המשטח שלו, אלא הראש שלו, אובייקט-בן שנושא את הקנה. סיבוב של אובייקט-בן מסובב את כל מה שמתחתיו ומשאיר את אובייקט-האב כפי שהוא.

האויבים הולכים נמוך יותר מהראשים, ולכן הכיוון מראש אל האויב פונה מעט כלפי מטה, וראש שהיה פונה ישר לאורכו היה נוטה קדימה. הגדרת y של הכיוון ל-0 משאירה אותו אופקי, כך שהראש מסתובב רק סביב הציר האנכי. מנורת מגדלור שעוקבת אחרי ספינה:

Vector3 toShip = ship.position - lamp.position;
toShip.y = 0f;
lamp.rotation = Quaternion.LookRotation(toShip);
Quaternion.LookRotation(direction) היא הסיבוב שפונה לכיוון הזה, ולכן המנורה מסתובבת מיד לעבר הספינה. ראש של מגדל צריך להסתובב במהירות מסוימת במקום זאת: Quaternion.RotateTowards(from, to, maxDegrees) מפרק הסיבוב מסובבת לכל היותר ב-maxDegrees, ומהירות סיבוב במעלות לשנייה כפול Time.deltaTime נותנת את החלק של כל פריים.
challenge icon

אתגר

בינוני
  1. ב־Tower, הוסף שני שדות מסודרים: head (מסוג Transform) ו־turnSpeed (מספר ממשי, מעלות לשנייה). ה־prefab של ArrowTower מספק את צאצא ה־ArrowHead שלו ואת הערך 270.
  2. כל עוד יש למגדל מטרה, סובב את הראש לכיוונה, סביב הציר האנכי בלבד, בקצב של עד turnSpeed מעלות לשנייה.
  3. כשאין מטרה, השאר את הראש כפי שהוא.

לחץ על Play, בנה מגדלים לצד השביל וצפה בהם עוקבים אחר האויבים, ואז לחץ על Check.

נסו בעצמכם

using UnityEngine;

public class Tower : MonoBehaviour
{
    public int cost = 50;
    public float range = 4f;

    private Enemy target;

    void Update()
    {
        target = FindTarget();
    }

    Enemy FindTarget()
    {
        Enemy nearest = null;
        float nearestDistance = range;
        foreach (Enemy enemy in Enemy.All)
        {
            float distance = Vector3.Distance(transform.position, enemy.transform.position);
            if (distance <= nearestDistance)
            {
                nearest = enemy;
                nearestDistance = distance;
            }
        }
        return nearest;
    }
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה משחק Unity: הגנת מגדלים