Menu
CoddyTech

Floats ו-Mathf

חלק מהיחידה יסודות התכנות ב-Unity במסלול ה-Unity של Coddy. שיעור 9 מתוך 67.

Unity משתמשת ב-float לספירת ערכים: מיקומים, מהירויות, זוויות ו-Time.deltaTime הם כולם מסוג float. C# מפרשת את 0.5 כ-double ולא תמיר double ל-float בלי הוראה מפורשת, כי עלול להיגרם אובדן דיוק. כמעט בכל אחד מהסקריפטים הראשונים של מתחילים, שתי שגיאות קומפילציה נובעות מכך:

  • float half = 0.5; גורם לשגיאה CS0664: Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix.
  • float s = Math.Sin(x); גורם לשגיאה CS0266: Cannot implicitly convert type 'double' to 'float', כי System.Math פועלת עם double.

הפתרונות: כתבו ערכי float עם הסיומת f, והשתמשו ב-Mathf, גרסת ה-float של Unity ל-Math (Mathf.Sin, Mathf.Abs, Mathf.Sqrt, Mathf.PI). המצוף המתנדנד הזה נכשל בגלל שתי השגיאות, והקומפילציה מצליחה לאחר התיקון:

// לפני: float y = 1 + Math.Sin(Time.time * 2) * 0.5;
float y = 1 + Mathf.Sin(Time.time * 2) * 0.5f;
transform.position = new Vector3(0, y, 0);

מספרים שלמים כמו 1 ו-2 אינם זקוקים לסיומת: int הופך ל-float ללא אובדן דיוק.

challenge icon

אתגר

קל

הלב אמור לפעום: הגודל שלו עולה מ־1 עד 1.5 וחוזר, שלוש פעמים בשנייה, באופן זהה בכל ציר. הסקריפט לא מתקמפל. תקן את השגיאות בחישובים עם float של Unity, ושמור על אותה נוסחה.

לחץ על Play כדי לראות את השגיאות ב־Console, תקן אותן ואז לחץ על Check.

נסו בעצמכם

using System;
using UnityEngine;

public class Pulse : MonoBehaviour
{
    void Update()
    {
        float size = 1 + Math.Abs(Math.Sin(Time.time * 3)) * 0.5;
        transform.localScale = new Vector3(size, size, size);
    }
}
quiz iconבחנו את עצמכם

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

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