Сокращенный код работает, но использование скобок тормозит функцию? - PullRequest
0 голосов
/ 18 января 2020

Я создал функцию, в которой я oop прошел через некоторые gameObjects и изменил int, если это не 0. Странная вещь, некоторые части перестают работать, когда я добавляю скобки для лучшей читаемости. В настоящее время я использую приведенный ниже код, но хотел бы, чтобы при вызове этой функции это обеспечивало дополнительную читабельность и эффективность.

WetStepCycle(leftFoot, lfHit);
if (wetStepsRemainingLeft != 0) wetStepsRemainingLeft--;

private void WetStepCycle(Transform footTransform, RaycastHit footHit)
    {
        if (currentActive == wetStepDecals.Length - 1) currentActive = 0;
        else
        currentActive++;
        wetStepDecals[currentActive].transform.position = new Vector3(footTransform.position.x, footHit.point.y, footTransform.position.z);
        wetStepDecals[currentActive].transform.eulerAngles = footTransform.transform.eulerAngles;
    }

Это работает как шарм, но не очень компактно, я хотел бы вычесть int внутри функции.

private void WetStepCycleTest(Transform footTransform, RaycastHit footHit, int sCounter)
    {
        if (currentActive == wetStepDecals.Length - 1)
        {
            currentActive = 0;
        }
        else
        {
            currentActive++;
            wetStepDecals[currentActive].transform.position = new Vector3(footTransform.position.x, footHit.point.y, footTransform.position.z);
            wetStepDecals[currentActive].transform.eulerAngles = footTransform.transform.eulerAngles;
            if (sCounter != 0)
            {
                sCounter--;
                Debug.Log("Minus");
            }
        }
    }

По какой-то причине это не работает, и я думаю, что это как-то связано с форматированием. Таким образом, sCounter не вычитается, и по какой-то причине первый элемент массива gameObject не используется. Я думаю, что это связано с выполнением currentActive ++ и sCounter--;, но изменение их на + = 1 и - = 1, похоже, тоже не работает.

Ответы [ 2 ]

2 голосов
/ 18 января 2020

Ваше остальное в верхней части относится только к currentActive ++, а в нижней части ко всему приведенному ниже коду

это будет соответствующее преобразование

private void WetStepCycleTest(Transform footTransform, RaycastHit footHit, int sCounter)
{
    if (currentActive == wetStepDecals.Length - 1)
    {
        currentActive = 0;
    }
    else
    {
        currentActive++;                
    }

    wetStepDecals[currentActive].transform.position = new Vector3(footTransform.position.x, footHit.point.y, footTransform.position.z);
    wetStepDecals[currentActive].transform.eulerAngles = footTransform.transform.eulerAngles;
}

Я бы лично предпочел

currentActive = (currentActive + 1 ) % wetStepDecals.Length;
0 голосов
/ 18 января 2020

In. net, когда вы пишете операторы if / else / foreach, фигурные скобки являются необязательными. Это только , когда после оператора if / else есть один оператор.

// Example without curly braces
if (true)
  Console.Write("true")

else 
  Console.Write("false)

Console.Write("Will Execute After the if else");

, и если у вас есть несколько операторов / блок, которые необходимо вставить в if или else, вы бы используйте это следующим образом:

if (true)
  Console.WriteLine("true")
else
{
  Conosle.Write("This ");
  Console.Write("Is ");
  Console.Write("False");
}

Если вы попытаетесь написать несколько операторов в одной строке, это приведет к ошибкам.

    if (true)
        Console.Write("This"); Console.Write("Is"); Console.Write("True"); 
        // Error Here: 'Else Cannot start a statement'. Syntax error ( expected, invalid expression ....
    else
        Console.Write("Whaaa");

Ваш код

Если ваш первый блок работает, а не второй, это потому, что в вашем блоке else выполняется больше операторов, чем нужно.

    private void WetStepCycleTest(Transform footTransform, RaycastHit footHit, int sCounter)
    {
        if (currentActive == wetStepDecals.Length - 1)
        {
            currentActive = 0;
        }
        else
        {
            currentActive++;
        }

        wetStepDecals[currentActive].transform.position = new Vector3(footTransform.position.x, footHit.point.y, footTransform.position.z);
        wetStepDecals[currentActive].transform.eulerAngles = footTransform.transform.eulerAngles;
        if (sCounter != 0)
        {
            sCounter--;
            Debug.Log("Minus");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...