המרחק בין עצמים
חלק מהיחידה יסודות התכנות ב-Unity במסלול ה-Unity של Coddy. שיעור 21 מתוך 67.
Vector3.Distance(a, b) מציינת מה המרחק בין שתי נקודות, ביחידות, כשהוא נמדד בקו ישר לאורך שלושת הצירים. זהו אורך הצעד ביניהן, (a - b).magnitude, ולכן לסדר של a ו־b אין חשיבות. מהנקודה (0, 0, 0) לנקודה (3, 0, 4) המרחק הוא 5.
השוואת מרחק למספר מאפשרת לסקריפט לדעת מתי משהו קרוב. החניך הזה יכול לחמם את ידיו רק במרחק של עד 4 יחידות מהמדורה, שאת מיקומה מגדירים ב־Inspector:
public Vector3 campfire = new Vector3(3, 0, 4);
void Update()
{
float d = Vector3.Distance(transform.position, campfire);
if (d < 4f && Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("You warm your hands");
}
}המרחק כולל גם את הגובה: חניך שנמצא 5 יחידות מעל המדורה נמצא במרחק של 5 יחידות ממנה, ולא במרחק 0. כשלא רוצים שהגובה יילקח בחשבון, משווים בין שתי נקודות בעלות אותו ערך y.
אתגר
קלההולך חוצה ביצה. במרחק של עד 3 יחידות ממרכז הביצה, swamp (שמוגדר ב־Inspector), הוא נע במחצית מ־speed שלו; במרחק גדול יותר, הוא נע במהירות מלאה. קוד התנועה כבר כתוב: חשבו באיזו מהירות להשתמש בכל פריים, והשאירו את השדה speed עצמו ללא שינוי.
לחצו על Play והתקדמו דרך הביצה, ואז לחצו על Check.
נסו בעצמכם
using UnityEngine;
public class Walker : MonoBehaviour
{
public float speed = 4f;
public Vector3 swamp = new Vector3(0, 0.5f, 0);
void Update()
{
float s = speed;
// בטווח של 3 יחידות מהביצה, זוז בחצי מהמהירות.
Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
transform.position += direction.normalized * s * Time.deltaTime;
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות התכנות ב-Unity
1הסקריפט הראשון שלך
שלום, Unityהצב את הקובייהזוז בכל פרייםהסתובב בכל שנייהנווט בעזרת המקשיםסיכום: נהג בקובייה4וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן10מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: מתעד מחזור החיים