Menu
CoddyTech

浮動小数点数とMathf

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 16/85。

「Decimals Need an f」では、fについて学びました。C#では0.5はdoubleとして読み取られますが、Unityではfloatで計算します。数学関数でも同じことが起こります。System.Mathはdoubleで動作するため、float s = Math.Sin(x);はCS0266: Cannot implicitly convert type 'double' to 'float'で失敗します。

Unityにはfloat版の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. sizeの行で、Math.AbsとMath.SinをMathf.AbsとMathf.Sinに変更します。
  2. 0.5を0.5fに変更し、式の残りの部分はそのままにします。

「プレイ」を押します。ハートは1から1.5まで大きくなって戻り、約1秒ごとに繰り返します。その後、「確認」を押します。

自分で試してみよう

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スクリプトの基礎のすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド