【问题标题】:How do I fix my pickup system in Unity 3D?如何在 Unity 3D 中修复我的拾音系统?
【发布时间】:2021-10-04 02:22:18
【问题描述】:

我正在尝试在我的 Unity 游戏中实现一个非常基本的拾取系统;当玩家与一个物体发生碰撞时,这个物体就会被摧毁。我遵循了一个 YouTube 教程,其中展示了下面的代码,但它对我不起作用,因为我的播放器只是不断地逐步通过对象并且它仍然存在。我只是想知道代码出了什么问题,或者我可能需要调整哪些组件才能使其正常工作。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PickupObject : MonoBehaviour
{
    void OnTriggerEnter(Collision collider)
    {
        if (collider.gameObject.tag == "Player")
        {
            Destroy(gameObject);
        }
    }
}

【问题讨论】:

  • 碰撞动作中至少有一个物体必须有刚体。您的项目是否满足此条件?

标签: c# unity3d


【解决方案1】:

检查是否将场景中 PickUpObject 的 Collider 中的 isTrigger 设置为 true。因为您使用 OnTriggerEnter 而不是 OnCollisionEnter,所以该函数仅在对撞机是触发器时才被触发。 如果不是这种情况,则将 Debug.Log() 语句添加到您的函数中以查看它是否被调用。 示例:

void OnTriggerEnter(Collision collider)
{
    Debug.Log("function is called");
    if (collider.gameObject.tag == "Player")
    {
        Destroy(gameObject);
    }
}

然后你可以在控制台中检查该函数是否被调用。

【讨论】:

    【解决方案2】:

    阅读 docs 的 OnTriggerEnter 并查看调用条件:

    注意:两个游戏对象都必须包含一个 Collider 组件。必须启用 Collider.isTrigger,并包含刚体。如果两个游戏对象都启用了 Collider.isTrigger,则不会发生碰撞。当两个游戏对象都没有刚体组件时也是如此。

    也许您使用脚本在对象上未选中 IsTrigger 字段。或者您的播放器上的 IsTrigger 字段为 true(如果是,请取消选中)。或者您没有将刚体附加到您的播放器对象(如果有,请添加)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多