浮動小数点数と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に変換されます。
チャレンジ
簡単ハートのスクリプトをコンパイルできるようにして、もう一度脈打たせましょう。
sizeの行で、Math.AbsとMath.SinをMathf.AbsとMathf.Sinに変更します。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プレイグラウンド