C# 如何使Update()不是垃圾邮件?

C# 如何使Update()不是垃圾邮件?,c#,unity3d,C#,Unity3d,我有问题,这个脚本滥发控制台。如果它从x=0切换到x>0,或者从另一个角度切换到x>0,我怎么能让它只发送一次消息,而不是每秒发送30次垃圾邮件呢?你可以像这样跟踪上次“记录”的值: public override void Update() { if (x = 0) { LogToConsole("1"); } if (x > 0) { LogToConsole("2");

我有问题,这个脚本滥发控制台。如果它从
x=0
切换到
x>0
,或者从另一个角度切换到
x>0
,我怎么能让它只发送一次消息,而不是每秒发送30次垃圾邮件呢?

你可以像这样跟踪上次“记录”的值:

public override void Update()
{
    if (x = 0)
    {
        LogToConsole("1");
    }
    if (x > 0)
    {
        LogToConsole("2");
    }
}

您可以只跟踪变量
x

private int curLog = -1;

public override void Update()
{
    if (x == 0 && curLog != 1)
    {
        curLog = 1;
        LogToConsole("1");
    }
    else if (x > 0 && curLog != 2)
    {
        curLog = 2;
        LogToConsole("2");
    }
}

现在,如果要更改
x
的值,只需将
xStateChanged
设置为
true
Update()
只调用一次
LogToConsole()

您不需要
Update

private bool xStateChanged = false;
public override void Update()
{
    if(xStateChanged)
    {
        if(x == 0)
        {
            LogToConsole("1");
        }
        else if(x > 0)
        {
            LogToConsole("2");
        }
        xStateChanged = false;
    }
}
.
.
.
//Somewhere where you are changing the value of: x
private void ChangeValueOfX()
{
    x = 0;
    // Or you might change it to 
    x = 2; //Or Something higher then 0
    XStateChanged = true;
}


只需添加
string\u lastLog
,并与新的is
set

进行比较,
x
在哪里定义?你为什么要在第一个条件中尝试赋值?你想做什么?什么是
x
?为什么此代码在
Update
功能中?为什么
x
不是一个当它发生变化时将
LogToConsole
的属性?您使用的是某种框架吗?你用
override
标记了
Update
,这让我怀疑你是。如果是,请指定影响答案的框架。他可能使用的是unity3d
=
,而不是
=
(考虑到您的代码,它可能甚至不会编译)。
private int _myInt = 3;
public int MyInt {
    get { return _myInt; }
    set {
        if (_myInt != value) {
            Debug.Log("MyInt changed from "+_myInt+" to "+value);
            _myInt = value;
        }
    }
}

private void Start () {
    MyInt = 5;
    MyInt = 5;
    MyInt = 7;
    MyInt = 7;
}
MyInt changed from 3 to 5
MyInt changed from 5 to 7