플로트와 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로 변환됩니다.
챌린지
쉬움하트가 맥박치듯 움직여야 합니다. 크기는 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);
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.