上下文:
我正在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(或可以完成相同工作的东西)?
答案 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);
您当然可以将其包装在使用数组作为参数的方法中,但是除非需要通用方法对可变大小的数组进行此设置,否则安装成本将比仅使用离散调用大。