Menu
CoddyTech

קנה מידה

חלק מהיחידה יסודות הסקריפטים ב-Unity במסלול ה-Unity של Coddy. שיעור 33 מתוך 85.

transform.localScale מכפיל את גודלו של אובייקט לאורך כל אחד מהצירים שלו. אורך כל אחת מצלעותיו של קובייה כברירת מחדל הוא יחידה אחת, לכן קובייה עם localScale (4, 1, 0.5) תהיה ברוחב 4 יחידות, בגובה יחידה אחת ובעומק חצי יחידה. כדי לשנות את הגודל באופן אחיד, מכפילים את Vector3.one, שהוא (1, 1, 1). בועת הסבון הזאת גדלה ב־0.3 יחידות לשנייה עד שרוחבה מגיע ל־3 יחידות:

public float size = 1f;

void Update()
{
    size = Mathf.Min(size + 0.3f * Time.deltaTime, 3f);
    transform.localScale = Vector3.one * size;
}

Mathf.Min(a, b) מחזירה את המספר הקטן מבין השניים, לכן size גדל עד שהוא מגיע ל־3, ואז נשאר 3.

קנה המידה משתנה סביב נקודת הציר של האובייקט, שנמצאת במרכז בצורות המובנות של Unity. מרכז של קובייה שצלעה באורך יחידה אחת ומונחת על הקרקע נמצא בגובה y = 0.5. אם משנים את גובהה ל־3 יחידות, היא מגיעה לגובה 1.5 ול־1.5 מתחת למרכז, כך שחצי ממנה שוקע בקרקע. כדי שהיא תעמוד על הקרקע, המרכז שלה חייב להיות במחצית גובהה: y = 1.5.

גודל של אובייקט-בן מוכפל בגודל של ההורה שלו: אובייקט-בן עם localScale (1, 1, 1) תחת הורה שקנה המידה שלו 2, יוצג בגודל כפול. transform.lossyScale מחזיר את הגודל הסופי שלו בעולם, והוא לקריאה בלבד; את localScale מגדירים.

challenge icon

אתגר

בינוני

המיסו את קוביית הקרח עד לגודל 0.4, תוך שמירה על כך שתישאר על הקרקע.

  1. הוסיפו שדה float size = 1f;. בתוך Update(), הגדירו size = Mathf.Max(size - melt * Time.deltaTime, 0.4f);.
  2. הגדירו transform.localScale = Vector3.one * size;.
  3. שמרו על תחתיתה בגובה y = 0: הגדירו את ערך ה-y של המיקום ל-size / 2, תוך שמירה על x ו-z.

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

נסו בעצמכם

using UnityEngine;

public class Melt : MonoBehaviour
{
    public float melt = 0.2f;

    void Update()
    {
        // להקטין ב-melt בכל שנייה, עד ל-0.4, כשהחלק התחתון נשאר על הקרקע
    }
}

כל השיעורים ביחידה יסודות הסקריפטים ב-Unity

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