Выполнение условия один раз

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Выполнение условия один раз

Сообщение Otselot 21 янв 2021, 17:04

Подскажите пожалуйста как можно полностью выполнить в Update каждое условие один раз? У меня либо вообще не выполняется, либо выполняется не полностью. К примеру надо что бы камера при наборе определенного количества очков смещалась на 3f вправо. Если счетчик отключать то она перемещается бесконечно вправо, если не отключать то при изменении значении в счетчике она стопориться не доходя до нужной позиции.... Как правильно это все реализовать что бы выполнилось один раз и полностью?

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScoreManager : MonoBehaviour
{
    public int score;
    public Text scoreDisplay;

    public Camera Cam;

    public float speed;
 
    private void Update()
    {
        scoreDisplay.text = score.ToString();

        if (score == 10 || score == 11)
       
        {
            Cam.transform.position += new Vector3(3f * Time.deltaTime, 0f, 0f);
           
        }
   
    }

}
 
Otselot
UNец
 
Сообщения: 27
Зарегистрирован: 17 янв 2021, 13:35

Re: Выполнение условия один раз

Сообщение 1max1 21 янв 2021, 17:19

Нужна булевая переменная, здесь чел уже написал готовый инструмент для этого https://www.cyberforum.ru/blogs/529033/blog3833.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Выполнение условия один раз

Сообщение Otselot 21 янв 2021, 22:21

1max1 писал(а):Нужна булевая переменная, здесь чел уже написал готовый инструмент для этого https://www.cyberforum.ru/blogs/529033/blog3833.html

Спасибо, попробывал но не получилось. Попытался инициализировать один раз объект после определенного условия. Делал по примеру но сам скрипт постоянно выдает ошибку
Синтаксис:
Используется csharp
bool moved;

void zapusk()
    {
        var zap = (scoreDisplay.text = score.ToString());
        if (zap = 10)
        {
            var clone = Instantiate(ogon_babka, transform.position, Quaternion.identity);
            moved = true;
        }
        else
        {
            moved = false;
        }
               
    }
 
Otselot
UNец
 
Сообщения: 27
Зарегистрирован: 17 янв 2021, 13:35

Re: Выполнение условия один раз

Сообщение 1max1 22 янв 2021, 09:11

if (zap = 10) // ==

Ну ты понял...
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Выполнение условия один раз

Сообщение Otselot 22 янв 2021, 10:21

1max1 писал(а):
if (zap = 10) // ==

Ну ты понял...

Пробовал и так, выдает ошибку Operator '==' cannot be applied to operands of type 'string' and 'int'.
Otselot
UNец
 
Сообщения: 27
Зарегистрирован: 17 янв 2021, 13:35

Re: Выполнение условия один раз

Сообщение Otselot 22 янв 2021, 11:26

попробовал сделать через корутину, но не получилось все равно.... если ставлю значение (score == 10 || score == 11) то все отрабатывает и камера становиться в нужную позицию (в этот момент сам счетчик считает пройденные препятствия, в момент достижения 10 очков камера начинает плавно перемещаться, спавнер предметов отключается сразу по достижению нужного значения очков, но он успевает создать еще 2-3 препятствия до отключения, которые тоже буду засчитаны счетчиком, то есть уже счет будет не 10 или 11, а 12-14 например и камера стопориться, по ходу самой игры промежуток времени между появлением препятствий постепенно уменьшается). А вот если значение score ставлю 500 || 501), то камера не успевает переместиться на нужную позицию, так как изза большой скорости спавна оставшихся предметов, которые появились до отключения спавнера, счетчик быстро набирает 508-512. Подскажите где у меня ошибка, как это все прописать правильно, что бы при достижении нужного количества очков камера переместилась в нужные заданные координаты и там остановилась не взирая на то что потом счетчик может поменяться.
Синтаксис:
Используется csharp
private void Update()
    {
        scoreDisplay.text = score.ToString();
       
        if (score == 500 || score == 501)
        {
            StartCoroutine(Move());
        }
       
        IEnumerator Move()
        {
            Cam.transform.position += new Vector3(3f * Time.deltaTime, 0f, 0f);
            yield return new WaitForEndOfFrame();          
            Spawner.SetActive(false);
           
            yield return new WaitForSeconds(1f);
           
        }

    }
Otselot
UNец
 
Сообщения: 27
Зарегистрирован: 17 янв 2021, 13:35

Re: Выполнение условия один раз

Сообщение 1max1 22 янв 2021, 11:51

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

Синтаксис:
Используется csharp
private bool oneShot = false;

if (score == 10 && !oneShot)
{
    oneShot = true; // переключатель не позволит еще раз пройти этому коду
    // двигаем камеру
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Выполнение условия один раз

Сообщение Otselot 22 янв 2021, 13:22

1max1 писал(а):О, хоспаде, я же сказал нужна булевая переменная, даже ссылку дал на готовое решение. Пишу последний раз.

Синтаксис:
Используется csharp
private bool oneShot = false;

if (score == 10 && !oneShot)
{
    oneShot = true; // переключатель не позволит еще раз пройти этому коду
    // двигаем камеру
}

Спасибо большое за помощь) Сори за тупняк, я в этом деле новичок :|
Otselot
UNец
 
Сообщения: 27
Зарегистрирован: 17 янв 2021, 13:35


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 26