Страница 1 из 1

Рандомное перемещение объекта по оси У

СообщениеДобавлено: 17 янв 2021, 13:44
Otselot
Здраствуйте! Как реализовать рандомное перемещение объекта по оси У, в заданных пределах minY=-3.5, maxY=3.5, через равный или тоже рандомный промежуток времени, который например составляет от 2 до 5 секунд?
Пробовал сам но ничего не работает.
Синтаксис:
Используется csharp
private Vector2 targetPos;

    public float Yincrement;

    public float speed;
    public float maxHeight;
    public float minHeight;

    public GameObject Boss;



    void Update()
    {
        targetPos.y = Random.Range(-3.5f, 3.5f);
    }

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 17 янв 2021, 15:58
Saltant
Update срабатывает каждый фрейм. Для ожидания используй корутины https://habr.com/ru/post/216185/

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 17 янв 2021, 17:01
Otselot
Saltant писал(а):Update срабатывает каждый фрейм. Для ожидания используй корутины https://habr.com/ru/post/216185/

Спасибо, попробую разобраться.

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 17 янв 2021, 17:04
Otselot
Пробовал так и тоже ничего не двигается.
Синтаксис:
Используется csharp
public float speed;
   
    void Start()
    {
        speed = Random.Range(0.01f, 0.1f);
    }

    void Update()
    {
        transform.Translate(0, speed * Time.deltaTime, 0);
        if (transform.position.y > 3.5f)
        {
            speed = -speed;
        }
        if (transform.position.y < -3.5f)
        {
            speed = Random.Range(0.01f, 0.1f);
        }
    }

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 17 янв 2021, 18:37
1max1
Он не может не двигаться, ты плохо смотришь значит либо скрипта нет на объекте, либо скорость слишком маленькая. И раз уж ты используешь локальный транслит, то используй локальную позицию transform.localPosition.

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 17 янв 2021, 18:55
Otselot
1max1 писал(а):Он не может не двигаться, ты плохо смотришь значит либо скрипта нет на объекте, либо скорость слишком маленькая. И раз уж ты используешь локальный транслит, то используй локальную позицию transform.localPosition.

Ты прав на счет скорости. Перепроверил скорость, поставил значение больше и он начал перемещаться. Изначально думал что с такой скоростью будет очень быстро перемещаться, поэтому и ставил диапазон такой маленький. Спасибо за подсказку, оказалась ерундовая проблема.)

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 22 фев 2021, 17:58
Otselot
при использовании этого кода было замечено что объект бывает застряет в верхней части экрана вылазя за границу 3,5 и не может опуститься обратно, будто его что т там держит.... внизу такого не происходит. Что это могло бы быть?
Синтаксис:
Используется csharp
public float speed;
   
    void Start()
    {
        speed = Random.Range(2f, 7f);
    }

    void Update()
    {
        transform.Translate(0, speed * Time.deltaTime, 0);
        if (transform.position.y > 3.5f)
        {
            speed = -speed;
        }
        if (transform.position.y < -3.5f)
        {
            speed = Random.Range(2f, 7f);
        }
    }

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 22 фев 2021, 19:49
Xtir
Синтаксис:
Используется csharp
if (transform.position.y > 3.5f)
        {
            speed = -speed;
        }

Минус на минус даёт плюс. Возможно он не успевает опуститься, а ты ему снова назначаешь минусовую скорость которая даёт уже плюс.

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 22 фев 2021, 23:06
Otselot
Xtir писал(а):
Синтаксис:
Используется csharp
if (transform.position.y > 3.5f)
        {
            speed = -speed;
        }

Минус на минус даёт плюс. Возможно он не успевает опуститься, а ты ему снова назначаешь минусовую скорость которая даёт уже плюс.

Хм, а как тогда это все правильно прописать?

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 27 фев 2021, 20:22
1max1
Синтаксис:
Используется csharp
    void Update()
    {
        transform.Translate(0, speed * Time.deltaTime, 0);
        if (transform.position.y > 3.5f)
        {
            transform.position = new Vector3(transform.position.x, 3.5f, transform.position.z);
            speed = -speed;
        }
        if (transform.position.y < -3.5f)
        {
            transform.position = new Vector3(transform.position.x, -3.5f, transform.position.z);
            speed = Random.Range(2f, 7f);
        }
    }

Re: Рандомное перемещение объекта по оси У

СообщениеДобавлено: 28 фев 2021, 01:59
Otselot
1max1 писал(а):
Синтаксис:
Используется csharp
    void Update()
    {
        transform.Translate(0, speed * Time.deltaTime, 0);
        if (transform.position.y > 3.5f)
        {
            transform.position = new Vector3(transform.position.x, 3.5f, transform.position.z);
            speed = -speed;
        }
        if (transform.position.y < -3.5f)
        {
            transform.position = new Vector3(transform.position.x, -3.5f, transform.position.z);
            speed = Random.Range(2f, 7f);
        }
    }

Спасибо)