Почему отображается ошибка «ArgumentException: индекс выходит за границы».когда я получу касание дельта-позиции в Unity? - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь повернуть игровой объект с помощью raycast.Когда я запускаю редактор единиц, получаю ошибку

ArgumentException: Индекс выходит за границы.UnityEngine.Input.GetTouch (индекс Int32) (в /Users/builduser/buildslave/unity/build/artifacts/generated/bindings_old/common/Core/InputBindings.gen.cs:619) AdjustTransform.Update () (в Assets / AdjustTransform).cs: ​​27)

Строка 27 - Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition; в приведенном ниже коде.Что я тут не так делаю?

 void Update()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;

    if (Physics.Raycast(ray,out hit,100))
    {

        Debug.Log(" GO Name "+hit.collider.gameObject.name);
    }

if(  Input.touchCount == 2 && !EventSystem.current.IsPointerOverGameObject() )
    {


            hit.collider.gameObject.transform.Rotate(Vector3.up, -touchDeltaPosition.x * rotspeed * Time.deltaTime, Space.World);
            hit.collider.gameObject.transform.Rotate(Vector3.right, touchDeltaPosition.y * rotspeed * Time.deltaTime, Space.World);


    }

1 Ответ

0 голосов
/ 28 сентября 2018

Input.GetTouch использует индекс, чтобы найти состояние определенного касания.Если касаний нет, то выдается ошибка Index out of bounds.

Поскольку вы вызываете код в методе Update, он проверяется каждый кадр, даже если у вас не было ввода вваша игра.

Что вам нужно сделать, это проверить, есть ли касания с момента последнего вызова Update с использованием Input.touchCount, а затем получить касание:

if (Input.touchCount > 0)
{
    Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...