本文介绍了索引超出范围错误.我如何解决它?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是错误deltaVector = (Vector3)Input.GetTouch(0).position - transform.position;
完整代码在这里:
This is error deltaVector = (Vector3)Input.GetTouch(0).position - transform.position;
full code here:
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class JoystickController :
MonoBehaviour, IPointerUpHandler, IPointerDownHandler {
public ControllerInput tankPlayer;
public float offset = 35.0f;
public Sprite button_not_touch;
public Sprite button_touch;
public Image[] imageButtons;
private bool isTouch;
private Vector3 deltaVector;
void Update()
{
// When touch, process touch postion
if (isTouch) {
// Check touch, if have mutiple touch
Touch[] myTouchs = Input.touches;
Vector3 touchPos = Vector3.zero;
if (myTouchs.Length > 1) {
for (int i = 0; i < myTouchs.Length; i++)
{
if (myTouchs[i].position.y < transform.position.y * 2 && myTouchs[i].position.x < transform.position.x * 2) {
touchPos = myTouchs[i].position;
break;
}
}
deltaVector = touchPos - transform.position;
}
else
deltaVector = (Vector3)Input.GetTouch(0).position - transform.position;
Debug.Log("log");
// Process when magnitude delta vector greater than 25
if (Vector3.Magnitude(deltaVector) > 25.0f) {
if (Mathf.Abs(deltaVector.x) > Mathf.Abs(deltaVector.y)) {
// Move horizontal
if (deltaVector.x > offset) {
tankPlayer.MoveRight();
ButtonHit(3);
} else if (deltaVector.x < -offset) {
tankPlayer.MoveLeft();
ButtonHit(1);
}
} else {
// Move vertical
if (deltaVector.y > offset) {
tankPlayer.MoveUp();
ButtonHit(0);
} else if (deltaVector.y < -offset) {
tankPlayer.MoveDown();
ButtonHit(2);
}
}
} else
tankPlayer.Release();
} else
tankPlayer.Release();
}
// Method to change button sprites
void ButtonHit(int indexTouch)
{
foreach(Image image in imageButtons)
image.sprite = button_not_touch;
imageButtons[indexTouch].sprite = button_touch;
}
// Event handle when touch to joystick
public void OnPointerUp(PointerEventData eventData )
{
foreach(Image image in imageButtons)
image.sprite = button_not_touch;
isTouch = false;
}
// Event handle when touch to joystick
public void OnPointerDown(PointerEventData eventData)
{
isTouch = true;
}
void OnDisable()
{
tankPlayer.Release();
}
}
推荐答案
您应检查myTouchs
是否具有至少一个元素.实际上,即使myTouchs
为空,您也可以进入else分支,这会引发异常.
You should check that myTouchs
has at least one element. Actually, you can enter the else branch even if myTouchs
is empty, and this raises the exception.
这篇关于索引超出范围错误.我如何解决它?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!