Menu
CoddyTech

מצלמת מסלול

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

כדי להקיף נקודה, שמרו זווית, סובבו בעזרתה היסט קבוע והוסיפו את התוצאה לנקודה. כפל סיבוב בווקטור מבצע את הסיבוב: Quaternion.Euler(0, angle, 0) * offset מסובב את ההיסט סביב ציר y, ואורכו וגובהו נשארים זהים. המצלמה הזאת מקיפה פסל במהירות של 20 מעלות לשנייה, תמיד בגובה 3 יחידות ובמרחק 6 יחידות ממנו:

public Transform statue;
public float speed = 20f;
float angle;

void LateUpdate()
{
    angle += speed * Time.deltaTime;
    Vector3 offset = new Vector3(0, 3, -6);
    transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
    transform.LookAt(statue);
}

בזווית 0 ההיסט הוא (0, 3, -6), ולכן המצלמה נמצאת מאחורי הפסל. בזווית 90 ההיסט הוא (-6, 3, 0), בצד ה־-x של הפסל, ובזווית 180 הוא (0, 3, 6), מלפניו. הזזת המצלמה אינה מסובבת אותה, ולכן LookAt מכוונת אותה בחזרה אל הפסל מכל מיקום חדש.

הזווית נשמרת בשדה משלכם, כמו בזוויות אוילר: היא יכולה לגדול מעבר ל־360 או לרדת מתחת ל־0 בלי קפיצה, ואפשר להגביל אותה או לשנות אותה מהמקלדת. ביצוע הפעולה בתוך LateUpdate() מציב את המצלמה אחרי שהפסל, או השחקן, זז במהלך הפריים.

challenge icon

אתגר

בינוני

אפשר לשחקן להטיס את המצלמה סביב המגדל, תמיד במרחק של distance (8) יחידות ממיקום המגדל ותמיד כשהיא מביטה אליו. הסקריפט שומר שתי זוויות ב-yaw וב-pitch:

  • yaw מציין עד כמה המצלמה הסתובבה סביב המגדל. החץ ימינה מגדיל את הזווית והחץ שמאלה מקטין אותה, בקצב של turnSpeed (90) מעלות לשנייה. כשה-yaw הוא 0, המצלמה נמצאת בצד -z של המגדל; כשה-yaw הוא 90, היא נמצאת בצד -x.
  • pitch מציין בכמה מעלות המצלמה מורמת מעל לגובה המגדל, מנקודת מבטו של המגדל. החץ למעלה מגדיל את הזווית והחץ למטה מקטין אותה, בקצב של tiltSpeed (45) מעלות לשנייה, והיא נשארת בין 10 ל-60.

היא מתחילה ב-yaw של 0 וב-pitch של 30, מה שממקם אותה 4 יחידות מעל מיקום המגדל ו-6.93 יחידות מאחוריו. לחץ על הפעלה, הטס את המצלמה מסביב ואז לחץ על בדיקה.

נסו בעצמכם

using UnityEngine;

public class OrbitCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 8f;
    public float turnSpeed = 90f;
    public float tiltSpeed = 45f;
    public float yaw = 0f;
    public float pitch = 30f;

    void Update()
    {
        // מקשי החצים משנים את yaw ואת pitch.
    }

    void LateUpdate()
    {
        // מקם את המצלמה סביב target וכוונן אותה כך שתביט בו.
    }
}
quiz iconבחנו את עצמכם

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

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