Menu
CoddyTech

Số thực và Mathf

Thuộc phần Những kiến thức cơ bản về lập trình trong Unity trong hành trình Unity của Coddy. Bài học 16 trên 85.

Bạn đã gặp chữ f trong bài Số thập phân cần có chữ f: C# đọc 0.5 là double, còn Unity tính toán bằng float. Điều tương tự cũng xảy ra với phép toán. System.Math hoạt động với kiểu double, nên float s = Math.Sin(x); gây ra lỗi CS0266: Cannot implicitly convert type 'double' to 'float'.

Unity có phiên bản dùng float của thư viện này là Mathf: Mathf.Sin, Mathf.Abs, Mathf.Sqrt, Mathf.PI. Chiếc phao nhấp nhô này gặp cả hai lỗi, nhưng sau đây thì biên dịch được:

// trước đó: 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);

Các số nguyên như 1 và 2 không cần hậu tố: kiểu int chuyển thành float mà không mất dữ liệu.

challenge icon

Thử thách

Dễ

Sửa script của trái tim để code biên dịch được và trái tim đập trở lại.

  1. Trên dòng size, đổi Math.Abs và Math.Sin thành Mathf.Abs và Mathf.Sin.
  2. Đổi 0.5 thành 0.5f, giữ nguyên phần còn lại của công thức.

Nhấn Chơi: trái tim lớn dần từ 1 đến 1.5 rồi nhỏ lại, khoảng một lần mỗi giây. Sau đó nhấn Kiểm tra.

Tự làm thử

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);
    }
}

Tất cả bài học trong Những kiến thức cơ bản về lập trình trong Unity

Tự luyện tập: Playground Unity