跳跃破坏敌人,如“ Mario” Unity 2D中一样

你好 在本文中,我想分享如何像马里奥一样实现对敌人的快速消灭。 我仍在学习自己,因此,如果我有任何有用的提示或提示,请写评论。 好吧,在获得了无数教程和阅读文章的观点之后,仅发现了两个有趣的观点,并且可能是实现这些选项的最简单方法:

  • 首先是对撞点的接触
  • 第二个是对撞机的接触,当两个对撞机悬挂在一个物体上时,一个会夺走玩家的生命,而第二个则摧毁它所附着的物体。

首先,我们将编写一个函数,该函数将占用播放器的生命,并且对于两个选项都是必需的:

public int health = 3; void Hurt() { health--; if (health <= 0) SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); } 

1个选择


如果接触点的高度大于或等于0.6,玩家从敌人上方跳下则被破坏,否则玩家将受到伤害。

 void OnCollisionEnter2D(Collision2D collision) { Enemy enemy = collision.collider.GetComponent<Enemy>(); if (enemy != null) { foreach (ContactPoint2D point in collision.contacts) { if (point.normal.y >= 0.6f) { enemy.EnemyHurt(); } else { Hurt(); } } } 

(播放器上悬挂的代码片段)

 public void EnemyHurt() { Destroy(this.gameObject); } 

(挂在敌人身上的一小段代码)

2种选择


添加一个对撞机,使其比主对撞机高一点,在对象上打勾“ is Trigger”,挂断脚本,然后添加此代码片段。

 private void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.name == "Player") Destroy(this.gameObject); } 

(挂在敌人身上的一小段代码)

当对撞机触摸名为“播放器”的对象时,该对象将被破坏(作为接触标记,您可以使用标记)。

此外,在同一对象中,我们再创建一个gameObject并将其命名为DeathZone。 向其添加一个对撞机,使其更大一点,然后选中“是触发器”框。



  private void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.name == "DeathZone") { Hurt(); } } 

(播放器上悬挂的代码片段)

如您所见,与第一个选项不同,在第二个选项中,对撞机的使用略大,并且无需使用触发器。


(第二个选项)

您还可以补充说,玩家在消灭敌人之后会跳起来。 好吧,一切似乎都很好,谢谢大家的关注!

Source: https://habr.com/ru/post/zh-CN474352/


All Articles