Menu
CoddyTech

浮動小数点数とMathf

CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 9/67。

Unity では float を使います。位置、速度、角度、Time.deltaTime はすべて float です。C# は 0.5 を double として読み取り、精度が失われる可能性があるため、指示がない限り double を float に変換しません。初心者が最初に書くスクリプトでは、ほとんどの場合、これが原因で次の2つのコンパイルエラーが発生します。

  • 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 を付け、Math の Unity 版である Mathf(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まで大きくなって戻り、1秒間に3回、すべての軸で同じように変化します。スクリプトはコンパイルできません。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スクリプティングの基礎のすべてのレッスン