Wpis z mikrobloga

#unity #unity3d

Robię grę na androida z tutoriala.
Przepisałem dany kod na zarządzanie dotykiem TouchManager, który na filmiku działa bez zarzutu, ale u mnie po wciśnięciu Play gra od razu wywala błąd Index out of bounds.
Poszperałem trochę w necie i znalazłem, że powinienem dodać do kodu takie rzeczy jak SendMessageOptions.DontRequireReceiver i Input.touchCount > 0 .
Po dodaniu tego gra już się uruchamia, ale znowu wywala błąd Index out of bounds, tylko że po naciśnieciu jakiegokolwiek przycisku.
Co robić, spotkał się już ktoś z czymś takim?

Wklejam kod programu:

using UnityEngine;
using System.Collections;

public class TouchManager : MonoBehaviour {

public static bool guiTouch = false;

public void TouchInput(GUITexture texture) {

if (Input.touchCount > 0 && texture.HitTest(Input.GetTouch(0).position))
{
switch (Input.GetTouch(0).phase)
{
case TouchPhase.Began:
SendMessage("OnFirstTouchBegan", SendMessageOptions.DontRequireReceiver);
SendMessage("OnFirstTouch", SendMessageOptions.DontRequireReceiver);
guiTouch=true;
break;
case TouchPhase.Stationary:
SendMessage("OnFirstTouchStayed", SendMessageOptions.DontRequireReceiver);
SendMessage("OnFirstTouch", SendMessageOptions.DontRequireReceiver);
guiTouch=true;
break;
case TouchPhase.Moved:
SendMessage("OnFirstTouchMoved", SendMessageOptions.DontRequireReceiver);
SendMessage("OnFirstTouch", SendMessageOptions.DontRequireReceiver);
guiTouch=true;
break;
case TouchPhase.Ended:
SendMessage("OnFirstTouchTouchEnded", SendMessageOptions.DontRequireReceiver);
guiTouch=false;
break;

}
}

if (Input.touchCount > 0 && texture.HitTest(Input.GetTouch(1).position))
{
switch (Input.GetTouch(1).phase)
{

case TouchPhase.Began:
SendMessage("OnSecondTouchBegan", SendMessageOptions.DontRequireReceiver);
SendMessage("OnSecondTouch", SendMessageOptions.DontRequireReceiver);
break;
case TouchPhase.Stationary:
SendMessage("OnSecondTouchStayed", SendMessageOptions.DontRequireReceiver);
SendMessage("OnSecondTouch", SendMessageOptions.DontRequireReceiver);

break;
case TouchPhase.Moved:
SendMessage("OnSecondTouchMoved", SendMessageOptions.DontRequireReceiver);
SendMessage("OnSecondTouch", SendMessageOptions.DontRequireReceiver);
break;
case TouchPhase.Ended:
SendMessage("OnSecondTouchTouchEnded", SendMessageOptions.DontRequireReceiver);
break;

}
}
}

}
źródło: comment_DyuXxtnUIvWi9es0CbeoDJ7ghnAngVZQ.jpg
  • 7