Как сделать один метод для поворота нескольких чисел? - PullRequest
0 голосов
/ 10 января 2019
if (waitinganimation == true)
            {
                RotateCharacters(animators[2]);
            }

            if (!endRot)
            {
                Quaternion goalRotation = Quaternion.Euler(0f, 180f, 0f);
                float angleToGoal = Quaternion.Angle(
                        goalRotation,
                        animators[0].transform.localRotation);
                float angleThisFrame = Mathf.Min(angleToGoal, rotationSpeed * Time.deltaTime);

                // use axis of Vector3.down to keep angles positive for ease of use
                animators[0].transform.Rotate(Vector3.up, angleThisFrame);
                animators[1].transform.Rotate(Vector3.down, angleThisFrame);

                // We end if we rotated the remaining amount.
                endRot = Mathf.Approximately(angleThisFrame, angleToGoal);
            }
            {
                animators[0].SetBool("Rifle Aiming Idle", true);
                animators[1].SetBool("Rifle Aiming Idle", true);
            }
        }
    }

    private void RotateCharacters(int[] CharactersIndex)
    {
        for (int i = 0; i < CharactersIndex.Length; i++)
        {
            if (!endRotation)
            {
                Quaternion goalRotation = Quaternion.Euler(0f, -90f, 0f);
                float angleToGoal = Quaternion.Angle(
                        goalRotation,
                        animators[CharactersIndex[i]].transform.localRotation);
                float angleThisFrame = Mathf.Min(angleToGoal, 100 * Time.deltaTime);

                animators[CharactersIndex[i]].transform.Rotate(Vector3.down, angleThisFrame);

                endRotation = Mathf.Approximately(angleThisFrame, angleToGoal);
            }
            else
            {
                animators[CharactersIndex[i]].SetBool("Magic Pack", true);
            }
        }
    }

    bool waitinganimation = false;
    IEnumerator WaitForAnimation()
    {
        yield return new WaitForSeconds(3);
        waitinganimation = true;
    }

Сначала я поворачиваю animators[0] и [1] для определенной угловой цели, а затем я вращаю animators[2] для другой угловой цели. Вместо этого я хочу использовать метод RotateCharacters для нескольких поворотов.

Если я вызываю метод один раз: RotateCharacters(2);, а затем, например: RotateCharacters(0,1); или лучше: RotateCharacters(animators[2]); или RotateCharacters(animators[0], animators[1]);

Так что в обновлении у меня будет две строки:

RotateCharacters(animators[2], Quaternion angle);
RotateCharacters(animators[0], animators[1], Quaternion angle);

Таким образом, он будет вращать все 3 одновременно, но первый animators[2] будет вращаться на определенный угол, а затем два других animators[0] и animators[1] повернутся на другой угол.

Не так, как должно выглядеть, но идея в том, чтобы сделать несколько поворотов. Но я испортил весь метод.

1 Ответ

0 голосов
/ 10 января 2019

Используйте ключевое слово params. Коллекция параметров должна быть последним определенным параметром, поскольку она собирает все последующие дополнительные параметры в массив. По сути, это сокращение для создания массива из «необязательных» параметров.

Пример:

void RotateAll(Quaternion rotation, params Animator[] anims) {
    foreach ( var anim in anims )
        ApplyRotation(rotation, anim); // However you want to actually apply the rotation
}

и назовите это как:

RotateAll(new Quaternion(), animators[0], animators[2]); //etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...