• Как повторить текущую итерацию while C#?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Зависит от логики. Если, как показано ниже, то можно использовать continue:
    int i = 0;
    bool b = false;
    while (i < 10)
    {
    	Console.WriteLine("Текущее: {0}", i);
    			
    	if (i == 5 && !b)
    	{
    		b = true;
    		continue;
    	}
    			
    	i++;
    }

    В крайнем случае есть goto:
    int i = 0; 
    bool b = false;
    while (i < 10)
    {
    	again: // точка возврата
    	Console.WriteLine("Текущее: {0}", i);
    			
    	if (i == 5 && !b)
    	{
    		b = true;
    		goto again;
    	}
    			
    	i++;
    }

    Посмотреть online-пример

    Однако не следует злоупотреблять подобными переходами. От обилия операторов goto в коде, у программиста может случиться разрыв мозга, что приведет к неминуемой гибели проекта и его возрождению в новом виде, если, конечно, сам программист не скопытится. Травма та серьезная :-) Если есть возможность, желание и время, лучше изменить логику так, чтобы не приходилось делать такие «прыжки».

    Для получения файлов или вообще работы с файлами (ожидание доступа для чтения или удаления, получение данных из сети и т.п.), можно использовать вложенный цикл, который будет пробовать выполнить задачу до тех пор, пока она будет успешно выполнена или не истечет отведенное время на выполнение задачи (или количество попыток):
    // пауза между попытками (100 мс)
    var interval = new TimeSpan(0, 0, 0, 0, 100); 
    // максимальное время ожидания (1 секунда)
    var timeout  = new TimeSpan(0, 0, 0, 1); 
    while (true)
    {
      var totalTime = new TimeSpan(); // счетчик времени
      var заданиеВыполнено = false;
    
      while(!заданиеВыполнено) // повторять, пока задание не будет выполнено
      {
        try
        {
          // тут код задания
          // если ошибок не будет, то
          заданиеВыполнено = true; // работа цикла будет завершена
        }
        catch
        {
          // если ошибка, делаем паузу
          System.Threading.Thread.Sleep(100);
          // увеличиваем счетчик времени
          totalTime += interval;
          if (totalTime > timeout)
          {
    				// превышен таймаут, выходим
    				Console.WriteLine("Превышено время ожидания");
    				break;
          }
        }
      }
    }
    Ответ написан
  • Как исправить код в Unity?

    GavriKos
    @GavriKos Куратор тега Unity
    Не трудно описать что у вас за ошибка.
    Вы складываете два числа (в вашем случае смещение и текущую позицию), но никуда не записываете итоговое значение этого сложения. c# такого не любит. Нужно записать куда то результат, очевидно что в позицию.
    Ответ написан
    3 комментария
  • [Unity] Создание объекта на месте игрока. Как сделать?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Прям если отвечать на вопрос в заголовке

    Instantiate (cubePrefab, playerLastPos, Quaternion.identity);
    //cubePrefab - ссфлка на префаб куба)
    // playerLastPos - Vector3 - позиция игрока (куба),сохраненная при прошлом вводе


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

    изучайте по мелочи
    GameObject
    Instantiate
    Prefabs
    Input
    про мeтод Update..

    В общем основы изучите..попробуйте накидать хотя бы простейший вариант
    чтобы управлять, двигать кубом..

    А дальше уже сюда с вопросами))
    про коллизии/тригеры и физику (если понадобится)
    про "подскажите как можно доделать"
    или "а что тут не правильно" ))

    удачи.
    Ответ написан
    4 комментария