C# 玩家与标记对象碰撞时消失
我正在做一个简单的游戏,目标是帮助玩家捕捉带有“礼物”标签的特定物体 在处理完模型、动画之后,我现在正在处理碰撞和计数UI 对于碰撞,在我的播放器控制器上(我使用播放器中的ThirdPersonUserController,这简化了整个动画过程),我添加了以下功能:C# 玩家与标记对象碰撞时消失,c#,unity3d,scripting,collision,C#,Unity3d,Scripting,Collision,我正在做一个简单的游戏,目标是帮助玩家捕捉带有“礼物”标签的特定物体 在处理完模型、动画之后,我现在正在处理碰撞和计数UI 对于碰撞,在我的播放器控制器上(我使用播放器中的ThirdPersonUserController,这简化了整个动画过程),我添加了以下功能: void OnCollisionEnter(Collision other) { if (other.gameObject.tag == "Present") { Destroy(gameObject
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”的物体时,即使计数正常,玩家也会消失
我已尝试将OnCollisionCenter
更改为OnTriggerCenter
,如下所示:
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Present"))
{
Destroy(gameObject);
count = count - 1;
SetCountText();
}
}
但是,当玩家用标签“Present”点击对象时,它们不会消失
我的播放器有一个胶囊对撞机和一个刚体
标记为“Present”的对象具有长方体碰撞器和刚体
关于如何让我的播放器在移除其他对象和减少计数的同时留在场景中的任何指导,我们都非常感谢。很少有东西。您正在销毁错误的游戏对象:
void OnCollisionEnter(Collision other)
{
if (other.gameObject.tag == "Present")
{
Destroy(gameObject); // this is destroying the current gameobject i.e. the player
count = count - 1;
SetCountText();
}
}
更新至:
void OnCollisionEnter(Collision other)
{
if (other.gameObject.CompareTag("Present"))
{
Destroy(other.gameObject); // this is destroying the other gameobject
count = count - 1;
SetCountText();
}
}
始终使用针对性能优化的CompareTag()
设置碰撞器IsTrigger
属性将使用OnTriggerEnter
事件,而不再使用OnCollisionCenter
在检测到碰撞的第一次物理更新中
调用OnCollisionCenter函数。在更新过程中,联系人
维护后,将调用OnCollisionStay,最后调用OnCollisionExit
表示触点已断开。触发碰撞器调用
类似的OnTiggerEnter、OnTiggerStay和OnTiggerExit函数
请参见您当前的对象正在使用非触发碰撞器,因此您应该使用
OnCollisionCenter
。最好使用您在OnTriggerEnter
中尝试的CompareTag
调用。你应该用这个
此外,您当前正试图销毁ThirdPersonUserController
所连接的游戏对象(gameobject
)。相反,用destroy(other.gameobject)销毁碰撞碰撞器的游戏对象(other.gameobject
)代码>:
你是否试图用Destroy(游戏对象)让玩家消失代码>?我试图使该对象在玩家与之碰撞时,标记为“Present”的对象消失。Destroy(gameObject)代码>与当前游戏对象无关。也许你的意思是使用Destroy(other.gameObject)代码>?另外,如果您的碰撞器未设置为触发器,则应使用OnCollisionCenter
,而不是OnTriggerCenter
,非常感谢您的回答。当Ruzihm帮助我解决评论部分的问题时,我批准了他的回答,尽管你的答案有额外的考虑,也许有用。考虑一下投票,因为它有一个与性能相关的额外考虑。
void OnCollisionEnter(Collision other)
{
if (other.gameObject.CompareTag("Present"))
{
Destroy(other.gameObject);
count = count - 1;
SetCountText();
}
}