繁体   English   中英

在C#Unity的函数中更改if语句的条件

[英]Changing the conditions of an if statement inside a function for C# Unity

我正在清理一些代码,更多是出于改进的动力。 我有一个可以打开和关闭一些文本的按钮。 它通过使用指针,单击按钮并淡出所有项目(单击的项目除外)来工作:

  public void OnHideClick()
{
    AllText.Remove(this.gameObject);
    if (newSwitchOne)
    {
        for (int i = 0; i < 3; i++)
        {
            switchOn = true;
        }
    }
    else if (newSwitchTwo)
    {
        for (int i = 0; i < 3; i++)
        {
            switchOff = true;
        }
    }
}

更新将根据布尔值是true来运行操作,而忽略错误的版本。 这很好。

  void Update()
{
    if (switchOn)
    {
        for (int j = 0; j < 4; j++)
        {
            TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
            TextColor.color = Color.Lerp(TextColor.color, new Color(255, 255, 255, 0), 0.0075f * Time.time);
            if (TextColor.color.a <= 0.023f)
            {
                TextColor.color = new Color(255, 255, 255, 0);
                if (TextColor.color.a == 0.0f)
                {
                    switchOn = false;
                    switchOff = false;
                    newSwitchOne = false;
                    newSwitchTwo = true;
                }
            }

        }
    }
    if (switchOff)
    {
        for (int j = 0; j < 4; j++)
        {
            TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
            TextColor.color = Color.Lerp(TextColor.color, new Color(255, 255, 255, 1), 0.005f * Time.time);
            if (TextColor.color.a >= 0.977f)
            {
                TextColor.color = new Color(255, 255, 255, 1);
                if (TextColor.color.a == 1.0f)
                {
                    switchOn = false;
                    switchOff = false;
                    newSwitchOne = true;
                    newSwitchTwo = false;
                }
            }
        }
    }
}

我正在尝试清理此代码。 我对函数和CoRoutines足够了解,并且通过查看关于switchOn和switchOff的类似代码,我想知道是否可以通过将一些值作为参数传递来清理此问题。 我已经尝试过了,似乎对测试color.alpha值的if语句的条件有困难,例如:

if (TextColor.color.a >= 0.977f)

我知道sys.action,但这似乎没有发挥作用。 据我所知,我相信将小于或大于符号'<','>'用作自变量会有所帮助。 我已经进行了一些搜索-但找不到很多帮助我的东西。 也许看错了方向。

谁能帮我这个忙?

这行得通吗? 我试图确定代码的通用性,以尝试减少某些重复。

void Update()
{
    var color = switchOn ? new Color(255, 255, 255, 0) : new Color(255, 255, 255, 1);
    var multiplier = switchOn ? 0.0075f : 0.005f;

    for (int j = 0; j < 4; j++)
    {
        TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
        TextColor.color = Color.Lerp(TextColor.color, color, multiplier * Time.time);
        if ((switchOn && TextColor.color.a <= 0.023f) || (!switchOn && TextColor.color.a >= 0.977f))
        {
            TextColor.color = color;
            if ()
            {
                switchOn = false;
                switchOff = false;
                newSwitchOne = !switchOn;
                newSwitchTwo = switchOn;
            }
        }

    }
}
public void OnHideClick()
{
  AllText.Remove(this.gameObject);
  if (newSwitchOne)
  {
      switchOn = true;
  }
  else if (newSwitchTwo)
  {
      switchOff = true;
  }
}

然后

void Update()
{
    if (switchOn || switchOff)
    {
        var alpha = switchOn ? 0 : 1;
        for (int j = 0; j < 4; j++)
        {
            TextMesh TextColor = AllText[j].GetComponent<TextMesh>();
            TextColor.color = Color.Lerp(TextColor.color, new Color(255, 255, 255, alpha), 0.0075f * Time.time);
            if ((TextColor.color.a <= 0.023f && switchOn) || (TextColor.color.a >= 0.977f && switchOff))
            {
                TextColor.color = new Color(255, 255, 255, alpha);
                switchOn = false;
                switchOff = false;
                newSwitchOne = switchOff;
                newSwitchTwo = switchOn;
            }
        }

    }
}

错过的其他答案是,有时switchOn和switchOff标志都变​​为false,在这种情况下我们不应该对Update进行任何操作。

System.Action将不会执行任何操作,因为它们不会返回任何值。 但是Func会的。

void MyMethodWithCondition(Func<bool>condition)
{
    if(condition == null){ return; } // or throw exception
    if(condition() == true)
    {
          // Do something
    }
}

这是您的用法:

MyMethodWithCondition(()=>{ return  TextColor.color.a >= 0.977f; });
MyMethodWithCondition(()=>{ return  TextColor.color.a <= 0.977f; });

Func还可以采用一个或多个参数: https : //msdn.microsoft.com/zh-cn/library/bb549151(v=vs.110).aspx

当您要根据条件/值创建代码时,使用此表示法可以产生干净灵活的代码:

test ? value1 : value2

如果您不习惯这种表示法,请按以下步骤操作:测试条件,如果为true,则使用value1,否则使用value2。

例如 :

float testVal = 
if (TextColor.color.a == (switchOn ? 0.0f : 1.0f))
...

在上面的示例中,我假设您可以单独使用switchOn(switchOn true>您的switchOn,switchOn false>您的switchOff)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM