Числа с плавающей точкой и Mathf
Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 9 из 67.
В Unity используются значения типа float: координаты, скорости, углы и Time.deltaTime — всё это числа с плавающей точкой. C# воспринимает 0.5 как double и не преобразует значение типа double в float без явного указания, поскольку при этом может потеряться точность. Из-за этого почти в первых скриптах каждого новичка возникают две ошибки компиляции:
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 и используй Mathf — версию Math для float в Unity (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 без потери точности.
Задание
ЛегкоСердце должно пульсировать: его размер меняется от 1 до 1.5 и обратно три раза в секунду, одинаково по каждой оси. Скрипт не компилируется. Исправь ошибки в вычислениях с числами с плавающей точкой в 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);
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы скриптинга в Unity
1Ваш первый скрипт
Привет, UnityРазместите кубДвигайте каждый кадрПоворачивайте каждую секундуУправляйте клавишамиПовторение: управляйте кубом2Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт5Преобразования и иерархия
Родители и детиМасштабПосмотри на объектыДвигайся к точкеПовторение: Луна на орбите6Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказать и скрытьПовторение: выключатель света