Unity OnTriggerEnter2D
Posted
技术标签:
【中文标题】Unity OnTriggerEnter2D【英文标题】: 【发布时间】:2019-05-27 10:15:36 【问题描述】:谁能帮我解决我遇到的这个问题?
*第一个脚本:
public static bool attacking;
public Collider2D attackTrigger;
private void Awake()
attackTrigger.enabled = false;
private void Update()
if (attacking == true)
Debug.Log("Box Collider Enabled");
attackTrigger.enabled = true;
StartCoroutine(DisableCollider());
IEnumerator DisableCollider()
yield return new WaitForSeconds(1);
attacking = false;
attackTrigger.enabled = false;
Debug.Log("Box Collider Disabled");
*第二个脚本:
public float damage = .10f;
private void OnTriggerEnter2D(Collider2D collision)
if(collision.isTrigger!=true && collision.CompareTag("Enemy"))
Debug.Log("Enemy is Damaged");
EHealthBar.TakeDamage(damage);
我正在尝试让我的玩家角色使用碰撞攻击敌人,它确实有效,玩家确实对敌人造成了伤害,但只有当敌人的盒子对撞机再次进入我的攻击时它才会起作用。
如果敌人已经在我的攻击区域内,并且附加了一个 2d 盒子碰撞,那么敌人不会受到伤害,这不是我想要的。
我可以将其更改为 OnTriggerStay2D,但敌人会继续受到伤害,直到对撞机再次被禁用。愿意帮忙吗?
【问题讨论】:
【参考方案1】:我认为问题是
IEnumerator DisableCollider()
yield return new WaitForSeconds(1);
attacking = false;
...
这会导致更新中的 IF 语句仍然发生 1 秒并启动大量协程。最简单的解决方案是移动攻击 = false;在屈服之前,但我想您想使用该变量来了解用户是否处于攻击状态。所以我建议使用另一个 bool 变量。
if (invokeAttack)
attacking = true;
invokeAttack = false
Debug.Log("Box Collider Enabled");
attackTrigger.enabled = true;
StartCoroutine(DisableCollider());
无论如何,您没有向我们展示您是如何调用攻击的,但也许不是将变量(在您的情况下为攻击/invokeAttack)更改为 true 并在 Update 中检查它,您只需调用一个启用碰撞器并启动协程的方法?
【讨论】:
以上是关于Unity OnTriggerEnter2D的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D资源文件 ③ ( Unity 资源包简介 | 导出 Unity 资源包 | 导出资源包的包含依赖选项 | 导入 Unity 资源包 | Unity 资源商店 )