因此,我正在学习基础游戏开发课程,目前正在与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()方法,但地面仍然会损坏我的玩家。任何帮助将不胜感激!
答案 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
}