Unity中的数据丢失与更新和IEnumerators

时间:2017-11-20 13:52:34

标签: c# oop unity3d

所以我的代码不完整...但它也非常简单..我想如果你能回答,你也知道足够能够使用Visual Studios Intellisense并自动填充几件事......对不起,一个漫长的夜晚。

我有三个主要脚本......这是链中的主要链接,它传递通过它接收的数据。然而,当它过滤它用于AddToStack()的方法时;然而输出是......

发送... 1(x91) 接收...... 1(x9)

现在我已经调整了它并让它以90到10流动但仍然......我不知道为什么90%的数据都在下降..我是否搞砸了Unity Engine的流量? XD我对Unity有点不高兴。

脚本如下:

1。)Primary - 如果dataStrength小于阈值则发送延迟数据,如果大于或等于阈值则没有延迟。 2.)使用update方法检查公共输入是否大于0,如果是,则启动将输入保存到列表的方法,然后将输入重置为0以进行下一次输入。然后当" A"按下它会遍历列表并吐出总和。

脚本一(有条件的数据)

private float totalStrength = 0;
public float activationThreshold;
public float signalStrength;
public bool showPackets = true;
public bool showFullDebug = true;
public Stack<float> signals = new Stack<float>();


void Start ()
{
    nodeGrowthThreshold = 60; //Just temporary arbitrary numeric values...
    activationThreshold = 20; //The default values if not set.
    path = GetComponent<Path>();
}

private void Update()
{
    if (signalStrength > 0)
    {
        if (numRequests.Equals(nodeGrowthThreshold)) { StartCoroutine(NodeGrow()); StopCoroutine(NodeGrow()); }

        if (totalStrength >= activationThreshold)
        {
            StartCoroutine(AddToStack());
            StopCoroutine(AddToStack());
            signalStrength = 0;
            if (showPackets || showFullDebug) { StartCoroutine(ReadStack()); StopCoroutine(ReadStack()); }
            StartCoroutine(WriteStack());
            StopCoroutine(WriteStack());

            totalStrength -= activationThreshold;
            signalStrength = 0;
            signals.Clear();
        }
        else if (totalStrength < activationThreshold)
        {
            StartCoroutine(AddToStack());
            StopCoroutine(AddToStack());
            signalStrength = 0;
        }


    }
    if (showFullDebug) { print("Node receieved: " + numRequests + " requests."); }
}

private IEnumerator AddToStack()
{
    if (!showFullDebug) { print("Node added signal: " + signalStrength + " to storage stack"); }
    signals.Push(signalStrength);
    numRequests++;
    totalStrength += signalStrength;
    yield return null;
}



private IEnumerator WriteStack()
{
    if (showFullDebug) { print("Node is passing stack of stack size..." + signals.Count); }
    if (signals.Count > 0)
    {
        foreach (float signal in signals.ToArray()) { path.input = signal;  if (showFullDebug) { print(signal); } print("Sending... " + signal); /**NOT CAPTURING DATA FAST ENOUGH. DATA IS SENDING FAST ENOUGH THOUGH.**/} }
    yield return null;
}

SCRIPT TWO(RECIEVER)

public class Out : MonoBehaviour
{
    public float input = 0;
    private float savedOutput = 0;
    public bool showFullDebug = true;
    public List<float> savedInput = new List<float>();
    public Queue<float> output = new Queue<float>();

    private void Update()
    {
        if (input > 0) {
            //StartCoroutine(Save());
            //StopCoroutine(Save());\
            Save();
            input = 0;
        }
        if (Input.GetKeyDown(KeyCode.A)) { print(savedOutput); }
    }

    private void Save()
    {
        savedInput.Add(input);
        output.Enqueue(input);
        foreach (float num in savedInput.ToArray()) { savedOutput += num; }
        //yield return null;
    }
}

感谢任何能提供帮助的人。

注意: - 我使用的数据显然只是一个1,用于通过100次模拟的浮点数。 - 正如你所看到的,我通常尝试IEnumerators和方法......但不确定为什么数据会被丢弃..

1 个答案:

答案 0 :(得分:0)

我的答案的最佳解决方案是在我的接收类中使用Setter并设置它,这样它可以在任何时候更改所有必要的操作,而不仅仅是检查它是否经常发生变化。 / p>