2015-09-17 5 views
0

Я использую Unity для моего проекта. Я пытаюсь сделать это, когда нажата кнопка, она перемещает игровой объект в новую позицию. Затем, когда одна и та же кнопка снова нажимает, объект возвращается в исходное положение.Возврат Gameobject в исходное положение

Моя проблема с циклом while, который я использую; он просто разбивает Unity, когда я нажимаю эту кнопку. Я использую цикл while неправильно или есть лучший способ обойти это?

Вот то, что я до сих пор:

public Gameobject TroubleMove; 
public Gameobject TroubleAnchor; 
public Gameobject TroubleMain; 
public Gameobject CauseMain; 
public Gameobject Cause; 
public int OnOff = 1; 

public void Change() 
{ 
    switch (OnOff) 
     { 
     Case 1: 
      CauseMain.setActive (true); 
      Cause.setActive (true); 

      While (CauseMain == true) 
      { 
       CauseMove.transform.position = CauseAnchor.tranform.position; 
      } 
      OnOff += 1; 
      break; 

      Case 2: 
      CauseMain.setActive (false); 
      Cause.setActive (false); 
      OnOff _=1; 
      break; 

     } 
} 
+0

что на самом деле вы хотите сделать? укажите полный код. где происходит изменение? –

+0

Мне удалось разобраться во всем. Кстати, это был полный код. –

ответ

0

Я полагаю, CauseMain никогда не быть установлена ​​в ложь, и ваш цикл, никогда не выйдет.

Зачем вам нужен цикл while? Разве вы не хотите менять курсор один раз? Я бы изменил while, если()

+0

Я использую команду OnClick() в Unity, поэтому, когда кнопка нажата, CauseMain задает значение True, а затем при нажатии снова CauseMain превращается в false. См. Объект перемещается в точку привязки, когда CauseMain имеет значение true. Я хочу, чтобы он вернулся к своей исходной позиции. Когда кнопка снова нажата, а CauseMain переходит на значение false. –

+0

Отсутствует код команды OnClick(). Я не могу проверить, правильно ли вы говорите. Поскольку вы хотите, чтобы он возвращался к исходной позиции один раз (а не несколько раз), вы должны использовать оператор if вместо цикла –

+0

Функция OnClick - это функция prefab, которую Unity включает в свои игровые объекты. Я просто присоединяю свой сценарий к пустой Gameobject, а затем прикрепляю игровой объект к OnClick(). Таким образом, мне не нужно писать собственный OnClick. –

0

Я буду предполагать, что функция Change() вызывается в методе OnClick().

В первую очередь, вы не должны использовать цикл while (true) при ожидании ввода пользователем или ответа. Цикл while (true) станет бесконечным циклом и сбоем Unity/Device.

Я смущаюсь с тем, что на самом деле есть ваши GameObjects, но вместо цикла while (true) вы должны использовать метод Update() или FixedUpdate() для преобразования позиции (может быть в отношении Time.DeltaTime). Если я не ошибаюсь, это было бы скелет того, что может быть сделано:

Этот фрагмент кода будет применяться только изменение преобразования всякий раз, когда игрок нажимает на кнопку, и когда положение установлено значение «CauseMove», проверка отключена, предотвращая бесконечный цикл, который приведет к сбою Unity.

Смежные вопросы