Menu
CoddyTech
flag Ar iconالعربيةdown icon

الأعداد العشرية و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، إصدار Unity من Math الذي يتعامل مع float (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 ثم يعود، ثلاث مرات في الثانية، بالتساوي على كل محور. لا يتم تجميع البرنامج النصي. أصلح الأخطاء المتعلقة بعمليات الحساب على القيم العشرية في 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