Menu
CoddyTech

מצלמת מסלול

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

כדי להקיף נקודה, שומרים זווית, מסובבים בה היסט קבוע ומוסיפים את התוצאה לנקודה. כפל סיבוב בווקטור מבצע את הסיבוב: 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 מכוון אותה שוב אל הפסל מכל מיקום חדש.

זווית שנייה מרימה את המצלמה: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) מסובב את הכיוון לאחור כלפי מעלה ב-pitch (סיבוב חיובי סביב x מטה את (0, 0, -1) כלפי מעלה), ואז מסתובב סביב הציר ב-yaw, כך שהמצלמה נשארת במרחק distance בכל זווית.

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

challenge icon

אתגר

בינוני

אפשר לשחקן להטיס את המצלמה סביב המגדל.

  1. בתוך Update(), החצים ימינה ושמאלה משנים את yaw במהירות turnSpeed, והחצים למעלה ולמטה משנים את pitch במהירות tiltSpeed, כפול Time.deltaTime.
  2. לאחר מכן משאירים את pitch = Mathf.Clamp(pitch, 10f, 60f);.
  3. בתוך LateUpdate(), מגדירים את transform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, ולאחר מכן את transform.LookAt(target);.

לחצו על „שחק” והטיסו את המצלמה סביב המגדל. לאחר מכן לחצו על „בדיקה”.

נסו בעצמכם

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 וכוון אותה לעברו.
    }
}

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

תרגלו בעצמכם: Unity אונליין