Menu
CoddyTech

플로트와 Mathf

Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 67개 중 9번째.

Unity에서는 위치, 속도, 각도, Time.deltaTime이 모두 float입니다. 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을 사용하기 때문입니다.

해결 방법은 부동 소수점 리터럴에 f를 붙이고, Math의 Unity용 부동 소수점 버전인 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에서 1.5까지 커졌다가 다시 작아지며, 초당 세 번, 모든 축에서 동일하게 움직입니다. 스크립트가 컴파일되지 않습니다. Unity의 float 수학 관련 오류를 수정하되, 공식은 그대로 유지하세요.

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);
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 스크립팅 기초의 모든 레슨