c# - 没有脚本的 Unity gameObject 正在达到碰撞方法
问题描述
所以我正在学习基础游戏开发课程,目前正在使用 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);
}
带有“Ground”标签的没有脚本,除了我发布的方法应该引用我的 Hurt() 方法,但地面仍然会损坏我的播放器。任何帮助将不胜感激!
解决方案
你的问题似乎是这里的这个功能
private void OnCollisionEnter2D(Collision2D collision)
每当任何对撞机(附加了对撞机组件的游戏对象 - 游戏对象不需要附加任何脚本)与您的玩家相交时都会运行
这段代码在这里
if (collision.gameObject.tag != "FlameTurret" && collision.gameObject.tag != "flame")
只要碰撞的对象没有"FlameTurret"
or的标签,就会"flame"
通过,我假设你的地面没有。在我看来,你的游戏中的一切都会伤害你的玩家,除了
火焰
,这似乎有点奇怪......这是一个错误吗?
无论哪种方式,一个简单的解决方法是用类似的东西标记你的地面,然后在你的检查下添加environment
OnCollisionEnter2D()
if (collision.gameObject.tag == "environment"){
return; // do nothing
}
推荐阅读
- visual-studio - 使用 Visual Studio 创建 MSI 并强制所有用户
- ruby-on-rails - 从 url 中删除空参数
- java - 阻止/检测应用程序中的叠加层
- python - 生成不同长度的单词给 n 个字符
- php - 无法使用 Facebook Graph API v3.0 删除群组帖子
- javascript - 在 Angular HTTP 请求后编辑接收到的对象
- c++ - C++ 向量超出范围异常
- python - 将系列合并到单个输出 - 熊猫
- html - HTML 标记是否应该有一个归因于下载属性的字符串?
- codeigniter - 通过在 codeigniter 中单击下一个和上一个来检索数据