Ваш TouchPhase.End
никогда не будет достигнут, так как в момент отпускания касания также GetMouseButton(0)
будет false
и, таким образом, весь блок будет пропущен!
Чтобы избежать ошибок, о которых вы говорите, прежде чем пытаться получить доступ к определенному касанию, сначала проверьте, есть ли какое-либо касание для доступа с помощью Input.touchCount
if(Input.touchCount > 0)
{
var touch = Input.GetTouch(0);
// ...
}
В общем для развитие, вы должны скорее проверить, например, Input.touchSupported
и реализовать альтернативную систему мыши для моделирования касаний
if(Input.touchSupported)
{
/* Implement touches */
if(Input.touchCount > 0)
{
var touch = Input.GetTouch(0);
// ...
}
}
// Optional
else
{
/* alternative mouse implementation for development */
if(Input.GetMouseButtonDown(0))
{
// simulates touch begin
}
else if(Input.GetMouseButton(0))
{
// simulates touch moved
}
// I've seen in strange occasions that down and up might get called within one frame
if(Input.GetMouseButtonUp(0))
{
// simulates touch end
}
}