Menu
CoddyTech

Числа с плавающей точкой и Mathf

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 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 точность не теряется.

challenge icon

Задание

Легко

Исправь скрипт сердца, чтобы он снова пульсировал.

  1. В строке size замени Math.Abs и Math.Sin на Mathf.Abs и Mathf.Sin.
  2. Замени 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