gpt4 book ai didi

c# - Unity 2D 触摸代码破坏所有对象?

转载 作者:行者123 更新时间:2023-11-30 02:41:27 25 4
gpt4 key购买 nike

在寻找在 Unity 中处理触摸控制的解决方案后,我找到了一个似乎可行的解决方案。问题是,当检测到触摸时,每个带有 2D 碰撞器的对象都会被销毁。我只希望被触摸的对象被销毁。

场景中的每个游戏对象都是预制件。它们都是 8 个不同的随机预制件的克隆。这些预制件中的每一个都有一个 Circle Collider 2D 以及名为 TouchManager.cs 的触摸控制脚本

我曾尝试将“if (hit)”部分更改为“if (hit.collider != null)”,但这会导致它由于某种原因无法正常工作。我已经尝试了所有我能想到的方法,但没有任何效果!有人可以帮忙吗?

TouchManager.cs

// Update is called once per frame
void Update ()
{
if (Input.touchCount > 0)
{
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
Vector3 wp = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
Vector2 touchPos = new Vector2(wp.x, wp.y);
Collider2D hit = Physics2D.OverlapPoint(touchPos);

if (hit)
{
touched = true;
startPos = Input.GetTouch(0).position;
}
}

if (Input.GetTouch(0).phase == TouchPhase.Moved)
{

}

if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
if (touched == true)
{
float swipeDirection = Mathf.Sign(Input.GetTouch(0).position.y - startPos.y);

if (swipeDirection > 0)
{
Destroy(gameObject);
}
else if (swipeDirection < 0)
{

}

// Reset touched
touched = false;
}
} //END SWITCH
} //END IF TOUCHED
} //END UPDATE

最佳答案

这里发生的是 OverlapPoint 返回点重叠的碰撞器,这意味着您正在检查:如果滑动与任何碰撞器重叠,则销毁该游戏对象。

你想要的是使用hit.collider2D,它会存储重叠的collider2D。尽管 hit.collider 将始终为 null,那是因为您没有任何碰撞器,您只有 collider2D。

由于 OverlapPoint 针对所有碰撞器进行测试并且不关心它从哪个游戏对象运行,所以最好将它放在单个管理器对象而不是每个对象中,然后让该管理器销毁其他对象。

这段代码只会销毁一个对象。请记住将它放在与您要销毁的对象不同的对象上。我怀疑它会给你带来想要的行为,但由于我不知道那是什么,所以我把它留给你作为练习。

Vector3 startPos;
GameObject hitObject;

void Update()
{
if (Input.touchCount > 0)
{
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
Vector3 wp = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
Vector2 touchPos = new Vector2(wp.x, wp.y);
Collider2D hit = Physics2D.OverlapPoint(touchPos);

if (hit != null)
{
hitObject = hit.collider2D.gameObject;
startPos = Input.GetTouch(0).position;
}
}

if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
if (hitObject != null)
{
float swipeDirection = Mathf.Sign(Input.GetTouch(0).position.y - startPos.y);

if (swipeDirection > 0)
{
Destroy(hitObject);
}
else if (swipeDirection < 0)
{

}
hitObject = null;
}
}
}
}

关于c# - Unity 2D 触摸代码破坏所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25696459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com