如果各个变量的值为零,如何将多个变量更改为false?

时间:2019-05-31 22:25:32

标签: c# unity3d if-statement

上下文:

我正在Unity中开发游戏,我有一段代码,您可以在对象到达或经过x轴或y轴上的某个点或经过一定时间后破坏该对象。在脚本中,我有一些保护措施可用于错误地填写您希望销毁对象的时间值,x和y坐标。

快速数据字典:

killPosX,浮动

killPosY,浮动

killPosT,浮动

killX,布尔值

killY,布尔值

killT,布尔值

代码:

我想使我的代码更加紧凑。这是原始物。

if (killPosX != 0) //x position you would like the object to be destroyed at
{
    killX = true; //make sure the value is set to true
}

if (killPosY != 0) //y position you would like the object to be destroyed at
{
    killY = true; //make sure the value is set to true
}

if (killPosT != 0) //position in time you would like the object to be destroyed at
{
    killT = true; //make sure the value is set to true
}

C#中是否有某种方法可以将这段代码转换为如下所示的内容:

if ([killPosX, killPosY, killPosT] != 0)
{
    [killPosX, killPosY, killPosT] = true;
}

代码在哪里检查数组[killPosX,killPosY,killPosT]中的每个值是否分别不等于0(或可以完成相同工作的东西)?

3 个答案:

答案 0 :(得分:5)

if (killPosX != 0)
{
    killX = true;
}

可以翻译如下

killX = (killPosX != 0) ? true : killX;

或更简单地

killX |= killPosX != 0;

if (killPosX != 0)
{
    killX = true;
}
else
{
    killX = false;
}

可以翻译如下

killX = (killPosX != 0) ? true : false;

或更简单地

killX = killPosX != 0;

但是由于不建议使用==!=比较浮点数,因此我建议:

killX |= !Mathf.Approximately( killPosX, 0 );
killY |= !Mathf.Approximately( killPosY, 0 );
killT |= !Mathf.Approximately( killPosT, 0 );

AFAIK ,没有类似于您为实现所需内容而编写的内置语法。

答案 1 :(得分:0)

我不确定这是否适用于您正在处理的内容(Unity中可能有更好的方法),但是在我看来,一种解决方法是将{{1} }属性是根据其相应的KillN属性的值计算得出的:

KillPosN

答案 2 :(得分:0)

我想不出您所建议的方法,但是使用hello建议的方法的变体可能会更简洁,更紧凑:

public void fnc(ref bool t1, float t2) { t1 |= !Mathf.Approximately( t2, 0 ); }

fnc(ref KillX, KillPosX);
fnc(ref KillY, KillPosY);
fnc(ref KillT, KillPosT);

您当然可以将其包装在使用数组作为参数的方法中,但是除非需要通用方法对可变大小的数组进行此设置,否则安装成本将比仅使用离散调用大。