מצלמת מסלול
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-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() ממקם את המצלמה אחרי שהפסל, או שחקן, זז במהלך הפריים.
אתגר
בינוניאפשר לשחקן להטיס את המצלמה סביב המגדל.
- בתוך
Update(), החצים ימינה ושמאלה משנים אתyawבמהירותturnSpeed, והחצים למעלה ולמטה משנים אתpitchבמהירותtiltSpeed, כפולTime.deltaTime. - לאחר מכן משאירים את
pitch = Mathf.Clamp(pitch, 10f, 60f);. - בתוך
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 וכוון אותה לעברו.
}
}
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין