浮点数和 Mathf
本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 16 课,共 85 课。
你在“十进制数需要 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,然后再缩小回来,大约每秒一次。然后按“检查”。
亲手试试
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 在线编辑器