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

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

СообщениеДобавлено: 21 янв 2021, 17:04
Otselot
Подскажите пожалуйста как можно полностью выполнить в 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);
           
        }
   
    }

}
 

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

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

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

СообщениеДобавлено: 21 янв 2021, 22:21
Otselot
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;
        }
               
    }
 

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

СообщениеДобавлено: 22 янв 2021, 09:11
1max1
if (zap = 10) // ==

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

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

СообщениеДобавлено: 22 янв 2021, 10:21
Otselot
1max1 писал(а):
if (zap = 10) // ==

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

Пробовал и так, выдает ошибку Operator '==' cannot be applied to operands of type 'string' and 'int'.

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

СообщениеДобавлено: 22 янв 2021, 11:26
Otselot
попробовал сделать через корутину, но не получилось все равно.... если ставлю значение (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);
           
        }

    }

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

СообщениеДобавлено: 22 янв 2021, 11:51
1max1
О, хоспаде, я же сказал нужна булевая переменная, даже ссылку дал на готовое решение. Пишу последний раз.

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

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

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

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

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

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

Спасибо большое за помощь) Сори за тупняк, я в этом деле новичок :|