我是 Unity 的新手,我搜索了我预期的行为并在一定程度上实现了。我在主游戏脚本中实例化了预制件,如果玩家触摸了游戏对象,我需要向游戏对象添加方向,并交换到任何方向 (2D(。我只需要选定的游戏对象来应用交换。
我在主游戏脚本(GameManager.cs(中添加了触摸识别功能,使用静态 Vector2 变量来存储touchStartPosition
、touchEndPosition
和touchDirection
。这是我在 Update(( 中进行触摸检测的代码。
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
touchStartPosition = Input.GetTouch(0).position;
}
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended)
{
touchEndPosition = Input.GetTouch(0).position;
touchdirection = touchEndPosition - touchStartPosition;
}
这是我写的来检查 touchStartPosition 是否是 gameObject 的 update(( 中的游戏对象位置。
//if gameObject is on the touch position
if(new Vector2(transform.position.x, transform.position.y) == GameManager.touchStartPosition)
{
MoveBall();
}
不幸的是,触摸的游戏对象没有任何反应。请帮助我运行此代码。那将是一个很大的帮助。
新的 Vector2(( 和 GameManager.touchStartPosition 只有在引用同一对象时才返回 true,并带有"==">
if(new Vector2(transform.position.x, transform.position.y) == GameManager.touchStartPosition)
{
MoveBall();
}
更改为
if(transform.position.x == GameManager.touchStartPosition.x && transform.position.y == GameManager.touchStartPosition.y)
{
MoveBall();
}
只是为了确保有重叠,在测试之前添加一个调试
Debug.Log("tx : " + transform.position.x + " -- ty " + transform.position.y + " -- gmx : " + GameManager.touchStartPosition.x + " -- gmy: " + GameManager.touchStartPosition.y);
我尝试了更多,终于得到了解决方案。这些是我对代码所做的改进
替换为Input.GetTouch(0).position
Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position)
对于每个游戏对象文件中的检查,我使用了以下 if 条件
if(GetComponent<Collider2D>() == Physics2D.OverlapPoint(GameManager.touchStartPosition)){}
这真的很好。谢谢大家的帮助