الأعداد العشرية و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 من دون أي فقدان.
التحدي
سهليجب أن ينبض القلب: يتغير حجمه من 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);
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس أساسيات البرمجة النصية في Unity
1أول سكربت لك
مرحبًا يا Unityضع المكعبتحرّك في كل إطاراستدر كل ثانيةوجّه باستخدام المفاتيحمراجعة: قُد المكعب5التحويلات والتسلسل الهرمي
الآباء والأبناءالتحجيمالنظر إلى الأشياءالتحرك نحو نقطةمراجعة: القمر الدائر