如何解决Android的统一触摸阶段可能存在错误?
我对团结还很陌生,一直在开发我的第一个Android游戏。大多数元素都可以正常运行,但是有一点不便,这使得玩游戏几乎是不可能的。我将尝试包括所有重要信息,并尽我所能进行解释。请原谅我的语法和英语水平都不高,因为它不是我的母语。
我的游戏名称是“距离!请”,它围绕保持与其他游戏对象之间的距离这一思想展开。这些字符称为“绒毛”,每个级别上都有特定数量的绒毛。角色具有脚本[RandomPatrol],可以在屏幕上随意移动。它们还具有DragAndDrop脚本,该脚本允许玩家拖动并更改绒毛的位置。
问题,但是,如果我拖动-松开'Fluff A',然后触摸'Fluff B',Fluff A会随机传送到FluffA的位置,导致崩溃因此有两个游戏对象,一个很大的“游戏结束”。这是某种故障,错误或硬件问题,我对此不太确定,因为它是随机发生的。有时它不会发生,您将能够轻松清除关卡,但有时它只会使您无法前进。
为了进一步说明我的情况,我在下面提供了一些图片,并且还提供了我上面提到的两个脚本。
Normal Touch and drag on Orange Fluff,executed as expected
After releasing orange I dragged red fluff. Worked as intended
DragAndDrop 代码
public class DragAndDrop : MonoBehavIoUr
{
bool moveAllowed;
Collider2D col;
int flag;
private GameMaster gm;
private AudioSource audioSource;
public GameObject selectEffect;
public GameObject deathEffect;
public GameObject electricDeath;
public GameObject poisonDeath;
public GameObject fireDeath;
public GameObject frostDeath;
void Start()
{
gm = GameObject.FindGameObjectWithTag("GM").GetComponent<GameMaster>();
audioSource = GetComponent<AudioSource>();
col = GetComponent<Collider2D>();
}
void Update()
{
if(Input.touchCount > 0 && !IsPointerOverUIObject())
{
Touch touch = Input.GetTouch(0);
Vector2 touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
Collider2D touchedCollider = Physics2D.OverlapPoint(touchPosition);
switch (touch.phase)
{
case TouchPhase.Began:
if (col == touchedCollider)
{
Instantiate(selectEffect,transform.position,Quaternion.identity);
audioSource.Play();
//moveAllowed = true;
flag = 1;
}
break;
case TouchPhase.Moved:
if (flag == 1)
{
transform.position = new Vector2(touchPosition.x,touchPosition.y);
}
break;
case TouchPhase.Ended:
flag = 0;
//moveAllowed = false;
break;
case TouchPhase.Canceled:
//moveAllowed = false;
flag = 0;
break;
}
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Planet" || collision.tag == "Projectile")
{
Instantiate(deathEffect,Quaternion.identity);
Destroy(gameObject);
gm.GameOver();
}
if (collision.tag == "ElectricOrb")
{
Instantiate(electricDeath,Quaternion.identity);
Destroy(gameObject);
gm.GameOver();
}
if (collision.tag == "Spiky")
{
Instantiate(poisonDeath,Quaternion.identity);
Destroy(gameObject);
gm.GameOver();
}
if (collision.tag == "FireOrb")
{
Instantiate(fireDeath,Quaternion.identity);
Destroy(gameObject);
gm.GameOver();
}
if (collision.tag == "FreezeOrb")
{
Instantiate(frostDeath,Quaternion.identity);
Destroy(gameObject);
gm.GameOver();
}
}
RandomPatrol 代码
public class RandomPatrol : MonoBehavIoUr
{
private float _speed;
public float minSpeed = 1f;
public float maxSpeed = 2f;
public float minX = -8.15f;
public float maxX = 8.15f;
public float minY = -4.15f;
public float maxY = 4.15f;
public float secondsToMaxDifficulty = 50f;
Vector2 targetPosition;
void Start()
{
Time.timeScale = 1;
targetPosition = GetRandomPosition();
}
void Update()
{
if((Vector2)transform.position != targetPosition)
{
_speed = Mathf.Lerp(minSpeed,maxSpeed,GetDifficultyPercent());
transform.position = Vector2.Movetowards(transform.position,targetPosition,_speed * Time.deltaTime);
}
else
{
targetPosition = GetRandomPosition();
}
}
Vector2 GetRandomPosition()
{
float randomX = Random.Range(minX,maxX);
float randomY = Random.Range(minY,maxY);
return new Vector2(randomX,randomY);
}
private float GetDifficultyPercent()
{
return Mathf.Clamp01(Time.timeSinceLevelLoad / secondsToMaxDifficulty);
}
}
我已经尝试修复它,现在已经寻找解决方案4天了。任何帮助。我尝试在统一遥控器以及已安装的APK上播放它,问题仍然存在。
我们将不胜感激任何帮助,我们将非常乐意为您提供您可能需要/需要的任何其他信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。