没有脚本的Unity gameObject正在达到碰撞方法

时间:2020-04-21 14:35:16

标签: c# unity3d

因此,我正在学习基础游戏开发课程,目前正在与Unity一起开发游戏。直到现在更新统一版本时,我的游戏才能完美运行。为了使玩家真正受到伤害,我提供了一种方法,只有在脚本明确调用该方法时,该方法才能实现。不知何故,没有脚本的地面会损坏我的播放器。

我在下面发布了代码。

这是播放器脚本的一部分

3 references
public void Hurt(int dmg, string yep)
    {
        HP -= dmg;
        Debug.Log($"took {dmg} damage from{yep}. You now have {HP} HP left");
        if (HP <= 0)
        {
            SceneManagement.Death();
        }
    }

这是我的火焰对象附带的脚本的一部分

private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag != "FlameTurret" && collision.gameObject.tag != "flame")
        {
            player.GetComponent<PlayerController>().Hurt(damage, collision.gameObject.tag);
             Destroy(this.gameObject);
        } 
    }

这是被敌人发射的弹丸所附着

if (collision.gameObject.CompareTag("Player"))
        {
            if (!called)
            {
                collision.gameObject.GetComponent<PlayerController>().Hurt(damage, collision.gameObject.tag);
                called = true;
            }
        }

这是一个敌人的敌人

if (collision.gameObject.CompareTag("Player"))
        {
            if (!called)
            {
                collision.gameObject.GetComponent<PlayerController>().Hurt(damage, collision.gameObject.tag);    
                called = true;
            }
            Destroy(this.gameObject);
        }

Console output

标签为“ Ground”的东西都没有脚本,除我发布的方法外,没有其他东西应该引用我的Hurt()方法,但地面仍然会损坏我的玩家。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您的问题似乎是这里的功能

private void OnCollisionEnter2D(Collision2D collision)

只要任何对撞机(连接了对撞机组件的游戏对象-游戏对象不需要附加任何脚本)就会与玩家相交

这里的代码

 if (collision.gameObject.tag != "FlameTurret" && collision.gameObject.tag != "flame")

只要碰撞的对象具有标签"FlameTurret""flame",我认为您的立场没有,标签就会过去。
在我看来,您的游戏中的所有内容都会损害玩家的 火焰……这有点奇怪吗?这是一个错误吗?
不管哪种方法,一个简单的解决方法是在地面上打上environment之类的标记,然后在OnCollisionEnter2D()下添加

 if (collision.gameObject.tag == "environment"){
    return; // do nothing
}