В Unity3D округление идёт до целого. Возможны три способа округления:
Примечание: Независимо от способа округления, если дробная часть равна нулю, будет возвращено число, которое было передано в параметре.
- Округление к меньшему — округление вниз, берётся меньшее число и отбрасывается дробная часть. (2.4 → 2, -1.3 → -2)
- Округление к большему – округление вверх, берётся большее число и отбрасывается дробная часть. (2.4 → 3, -1.3 → -1)
- Округление к ближайшему целому – берётся целое число, модуль разности с которым у исходного числа меньше. (2.4 → 2, 2.7 → 3). В случае, если модули разности равны (дробная часть равна 0.5), берётся ближайшее чётное целое число. (1.5 → 2, 4.5 → 4)
Функции округления в Unity3D (C#):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//Округление вверх Mathf.Ceil(float f); //Округление вниз Mathf.Floor(float f); //Округление к ближайшему целому Mathf.Round(float f); //Такие же функции, но возвращают число типа int //Округление вверх Mathf.CeilToInt(float f); //Округление вниз Mathf.FloorToInt(float f); //Округление к ближайшему целому Mathf.RoundToInt(float f); |
Использование округления
Для чего можно использовать округление?
Например для привязки юнитов к сетке при строительстве:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using UnityEngine; public class UnitSharp : MonoBehaviour { //Будущий юнит public Transform unit; // Update is called once per frame void Update () { //Получаем позицию курсора Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition); //Устанавливаем позицию юнита, привязвая к сетеке по осям X и Z unit.position = new Vector3(Mathf.Round(pos.x), 1, Mathf.Round(pos.z)); } } |
Источник: https://poqxert.ru