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
,并与新的isset
进行比较,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