播放器与带标签的对象碰撞时会消失

问题描述 投票:0回答:2

我正在研究一个简单的游戏,目标是帮助玩家使用标签“ 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。

关于在删除其他对象并减少计数的同时如何使我的播放器停留在场景中的任何指导,请感激。

c# unity3d scripting collision unityscript
2个回答
1
投票

您当前的对象正在使用非触发对撞机,因此您应该使用OnCollisionEnter。您最好在CompareTag中尝试进行OnTriggerEnter调用。您应该使用它。

[此外,您当前正在尝试销毁ThirdPersonUserController附加到的游戏对象。而是使用Destroy(other.gameObject);销毁碰撞对撞机的游戏对象:

void OnCollisionEnter(Collision other)
{
    if (other.gameObject.CompareTag("Present"))
    {
        Destroy(other.gameObject);
        count = count - 1;
        SetCountText();
    }
}

2
投票

几件事。您正在销毁不正确的游戏对象:

© www.soinside.com 2019 - 2024. All rights reserved.