2016-04-13 4 views
1

Я поместил все объекты GameObjects в сцену под списком. следующая функция используется на полке .cs для удаления игровых объектов. Я назначаю функцию кнопке, так что она принимает входное значение и определяет, какой Gameobject имеет меньшее значение, чем вход. Затем удалите. Проблема в том, что всякий раз, когда я нажимаю кнопку в предпросмотре игры, она не удаляет игровые объекты. Предупреждений нет. Я отлаживаю, получает ли он все входные данные, и это было сделано. просто не удаляя GameObjects.Не удается удалить GameObject

Почему?

public void Process(){ 
    int user_apple,user_lemon,user_watermelon; 

    user_apple = int.Parse (input_apple.text); 
    user_lemon = int.Parse (input_lemon.text); 
    user_watermelon = int.Parse (input_watermelon.text); 

    Debug.Log (user_apple+" "+user_lemon+" "+user_watermelon); 

    for(int i = players.Count - 1; i >= 0; i--) 
    { if(players[i].name == "Lemon") 
     { 
      if(players[i].GetComponent<Apple>().weight <= user_apple) 
      { Debug.Log ("wat u want"); 
       Destroy(players[i]); 
      }players.RemoveAt(i); 

     } 
    } 
} 

, если бы я был поставить его так,

public void Process(){ 
    int user_apple,user_lemon,user_watermelon; 

    user_apple = int.Parse (input_apple.text); 
    user_lemon = int.Parse (input_lemon.text); 
    user_watermelon = int.Parse (input_watermelon.text); 

    Debug.Log (user_apple+" "+user_lemon+" "+user_watermelon); 
    if(players[2].GetComponent<Lemon>().weight <= user_apple) 
    { Destroy(players[2]); 
     players.RemoveAt(2); 
    } 
} 

будет иметь ошибки как ниже

FormatException: Input string was not in the correct format 
System.Int32.Parse (System.String s) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/Int32.cs:629) 
Basket.Process() (at Assets/scripts/Basket.cs:77) 
UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) (at C:/BuildAgent/work/d63dfc6385190b60/Runtime/Export/UnityEvent.cs:110) 
UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) (at C:/BuildAgent/work/d63dfc6385190b60/Runtime/Export/UnityEvent.cs:575) 
UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) (at C:/BuildAgent/work/d63dfc6385190b60/Runtime/Export/UnityEvent.cs:717) 
UnityEngine.Events.UnityEvent.Invoke() (at C:/BuildAgent/work/d63dfc6385190b60/Runtime/Export/UnityEvent_0.cs:53) 
UnityEngine.UI.Button.Press() (at C:/BuildAgent/work/d63dfc6385190b60/Extensions/guisystem/guisystem/UI/Core/Button.cs:36) 
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/BuildAgent/work/d63dfc6385190b60/Extensions/guisystem/guisystem/UI/Core/Button.cs:45) 
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/BuildAgent/work/d63dfc6385190b60/Extensions/guisystem/guisystem/EventSystem/ExecuteEvents.cs:52) 
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/BuildAgent/work/d63dfc6385190b60/Extensions/guisystem/guisystem/EventSystem/ExecuteEvents.cs:269) 
UnityEngine.EventSystems.EventSystem:Update() 
+0

Как правило, вы НЕ ДОЛЖНЫ использовать символы подчеркивания в переменных. Таким образом, это должен быть userApple, userLemon и так далее. вам необходимо тщательно и правильно форматировать свой код. вы можете *** никогда, никогда не делать программное обеспечение, если вы не абсолютно фанатичны в отношении форматирования. – Fattie

+0

Отметьте, что не так просто разобрать текст в ints или floats. По сути, вы не можете использовать «Parse». Вы должны использовать TryParse. это требует довольно много работы, и вам понадобится расширение. – Fattie

ответ

1

Это не может быть правильным решением попробовать вызвать совместное -пройти из функции процесса и получить цикл, чтобы он выполнял каждый кадр.

+0

, поэтому мне нужно вызвать эту функцию в другую функцию другого класса, чтобы она работала? есть ли пример того, как это сделать? – whoami

+0

нет!теперь используйте вот так: void Process() {startCourotiune (CProcess); } ienumerator CProcess() {loop with yeild statemnet} помните синтаксис и узнайте о сопрограмме и о том, как они помогают запускать код кадр за кадром – LumbusterTick

+0

Ват это означает? 'Наилучшее перегруженное соответствие метода для' UnityEngine.MonoBehaviour.StartCoroutine (System.Collections.IEnumerator) 'имеет некоторые недопустимые аргументы: ошибка CS1503: аргумент '# 1' не может преобразовать выражение' method group 'для типа 'System.Collections.IEnumerator '--error CS0161: 'Basket.CProcess()': не все пути к кодам возвращают значение ' – whoami

1

Просто повторите то, что сказал Джо Блов: нет причин, по которым этот цикл не должен работать, поскольку он полностью независим от кадров/времени.

Этот маленький пример работает прекрасно:
Сценарий ScriptHolder присваивается пустой GameObject (см ниже экран) и выглядит следующим образом:

using UnityEngine; 
using System.Collections.Generic; 

public class ScriptHolder: MonoBehaviour 
{ 
    public List<GameObject> theGameObjects; 

    public void TheButtonFunction(int weight) 
    { 
     for(int i = theGameObjects.Count - 1; i >= 0; i--) 
     { 
      if(theGameObjects[i].GetComponent<TheObject>().objectWeight <= weight) 
      { 
       Destroy(theGameObjects[i]); 
       theGameObjects.RemoveAt(i); 
      } 
     } 
    } 
} 

Все GameObjects были втянуты в открытый список.

enter image description here

Сценарий для геймобжекты выглядит следующим образом:

using UnityEngine; 
using System.Collections; 

public class TheObject : MonoBehaviour 
{ 
    public string objectName = ""; 
    public int objectWeight = 0; 
} 

Все GameObject_A названы A и имеют вес 10 (сделано в инспекторе), GameObject_B являются B с весом 15 и GameObject_C: C с весом 20. Столбцы от A до C слева направо.

Кнопка вызывает функцию сверху со значением 15.

Когда я нажимаю кнопку, левый и средний столбцы игровых объектов удаляются со сцены и из списка - никаких проблем.

+0

ya. Я использовал сопрограмму, и она отлично работает. благодаря – whoami

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