@levonvlad
Разработчик игр

Как сделать правильное перемещение дороги в игре?

Всем привет при создании (очередной) игры у меня возникла проблема с "бесконечной дорогой".
Конкретно дорого едет на игрока, а он стоит на месте(логично) и когда она доходит до координаты z = -40f, то она телепортируется в конец дороги к координате z = 140f. И когда поставить например скорость 10, спустя один (круговорот этой дороги (их 9)) начинаются щели между частями дороги и спустя время они становятся всё шире и шире. Проблема в том что когда она перемещается то z координата показывает такие числа: z = 123.06784 , z = 54.428342. А мне нужно чтоб было: z = 23 , z = 106. Я ловлю эту координату так:
if ( z < finish || z == finish)
        {      
            road.transform.position = new Vector3(0f, 0f, statrt); // start = 140f это начало
        }

И я хочу чтоб при любой скорости у меня было z = не float а int. Помогите пж, а то я уже задолбался фиксить эту проблему.
Вот весь код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class moveplat : MonoBehaviour
{
    public int speed;
    public GameObject road;
    public float z;
    public float finish = -40f;
    public float start = 140f;
    
  
    void Start()
    {
        speed = PlayerPrefs.GetInt("DataRoadSpeed"); // это я беру скорость с меню
    }


    void Update()
    {

        road.transform.Translate(Vector3.back * speed * Time.deltaTime);// перемещение дороги
        z = road.transform.position.z; // узнаю координату z дороги

        if ( z < finish || z == finish) // пытаюсь словить дорогу вот-так
        {      
            road.transform.position = new Vector3(0f, 0f, start); // тепехаю её в конец
        }
    }
  
}
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
DanceM
@DanceM Куратор тега Unity
Кто хочет -ищет способ, кто не хочет -ищет причину
z == finish
Float'ы сравнивать нельзя, потому, как вы уже заметили, цифры в них прыгают. Разве что используя Mathf.Approximately()

Float'ы можно ковертировать в int'ы, с округлением в нужную сторону. Если нужно.

Проблема вашего кода в том, что при проверке, при разных значениях z, вы после сдвигаете объект в одну координату. Потому и не работает как надо. Проблема не чисел, а логики в вашем коде.

Если надо из -40 сделать 140, то делайте z += 180f;. Тогда каждый раз сдвиг будет на правильную (разную) величину.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы