【发布时间】:2020-03-29 18:50:57
【问题描述】:
我正在开发一个简单的游戏,其目标是帮助玩家捕捉带有“Present”标签的特定对象。
在处理完模型、动画之后,我现在正在处理碰撞和计数 UI。
对于碰撞,在我的播放器控制器上(我使用来自播放器Unity Standard Assets 的 ThirdPersonUserController - 这简化了整个动画过程),我添加了以下功能:
void OnCollisionEnter(Collision other)
{
if (other.gameObject.tag == "Present")
{
Destroy(gameObject);
count = count - 1;
SetCountText();
}
}
void SetCountText()
{
countText.text = "Count: " + count.ToString();
if (count == 0)
{
winText.text = "Thanks to you the Christmas will be memorable!";
}
}
但是,像这样,当玩家击中带有“Present”标签的对象时,即使计数正常,玩家也会消失。
我尝试将OnCollisionEnter 更改为OnTriggerEnter,如下所示:
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Present"))
{
Destroy(gameObject);
count = count - 1;
SetCountText();
}
}
但是,当玩家击中带有“Present”标签的对象时,它们并没有消失。
我的玩家有一个胶囊碰撞器和一个刚体。
带有“Present”标签的对象有一个 Box Collider 和一个 Rigidbody。
任何关于如何让我的播放器留在场景中同时移除其他对象和减少计数的指导表示赞赏。
【问题讨论】:
-
你是想用
Destroy(gameObject);让播放器消失吗? -
我正在尝试制作对象,当玩家与它发生碰撞时,标签“Present”会消失。
-
Destroy(gameObject);与现在的GameObject无关。也许您的意思是使用Destroy(other.gameObject);?此外,如果您的对撞机未设置为触发器,您应该使用OnCollisionEnter,而不是OnTriggerEnter
标签: c# unity3d scripting collision