在屏幕触摸的交换方向上移动预制件 - unity2D



我是 Unity 的新手,我搜索了我预期的行为并在一定程度上实现了。我在主游戏脚本中实例化了预制件,如果玩家触摸了游戏对象,我需要向游戏对象添加方向,并交换到任何方向 (2D(。我只需要选定的游戏对象来应用交换。

我在主游戏脚本(GameManager.cs(中添加了触摸识别功能,使用静态 Vector2 变量来存储touchStartPositiontouchEndPositiontouchDirection。这是我在 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)){}

这真的很好。谢谢大家的帮助

最新更新