Menu
CoddyTech

Float ve Mathf

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 9 / 67.

Unity, konumlar, hızlar, açılar ve Time.deltaTime gibi değerleri float türünde tutar. C#, 0.5 değerini double olarak okur ve hassasiyet kaybı yaşanabileceğinden, belirtilmediği sürece bir double değeri float türüne dönüştürmez. Yeni başlayanların ilk betiklerinin neredeyse tamamında bu nedenle iki derleme hatası görülür:

  • float half = 0.5; ifadesi CS0664: Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix hatasını verir.
  • float s = Math.Sin(x); ifadesi CS0266: Cannot implicitly convert type 'double' to 'float' hatasını verir; çünkü System.Math double türüyle çalışır.

Çözümler: float sabitlerini f ile yazın ve Unity'nin Math için float sürümü olan Mathf'i kullanın (Mathf.Sin, Mathf.Abs, Mathf.Sqrt, Mathf.PI). Bu sallanan şamandıra her iki hatayı da veriyordu; aşağıdaki değişiklikten sonra derlenir:

// önce: 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 ve 2 gibi tam sayılar için sonek gerekmez: bir int, herhangi bir kayıp olmadan float türüne dönüşür.

challenge icon

Görev

Kolay

Kalp atmalı: boyutu 1'den 1.5'e kadar çıkar ve geri iner; saniyede üç kez, her eksende aynı şekilde. Betik derlenmiyor. Unity'nin float matematiğiyle ilgili hataları düzelt ve formülü aynı tut.

Console'daki hataları görmek için Play'e bas, hataları düzelt, ardından Check'e bas.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler