【问题标题】:2d Unity Shooting bug2d Unity 射击错误
【发布时间】:2018-11-04 10:40:09
【问题描述】:

我实际上是在尝试制作一个统一的 2d 游戏,在这个游戏中,我们控制一个可以用武器发射子弹的角色。实际上是一个“Uzi”,所以它射得又快又猛,(所以,一把枪)问题是,有时,根据与敌人的距离,子弹会穿过敌人的盒子对撞机,并且 所以不要碰它。我认为这与统一的更新/固定更新系统有关,但我不确定。并且子弹已经在碰撞检测中连续。有一部分代码,还有截图。

 void OnTriggerEnter2D(Collider2D target)
{
    if (target.gameObject.tag == "FirePoint")
    {
        Fire();
    }

    if (target.gameObject.tag == "Building")
    {
        Destroy(gameObject);
        //print("Don't shoot on the walls !");
    }

    Ennemy enemy = target.GetComponent<Ennemy>();
    if (target.gameObject.tag == "Ennemi")
    {
        enemy.TakeDamage(damage);
        Destroy(gameObject);

    }

}



void Fire()
{
    GetComponent<Rigidbody2D>().AddForce(transform.right * bulletForce);
}

还有拍摄方法,在另一个脚本里。

public void Shoot()
{
    DispersionDesBalles();
    nextFire = Time.time + 1f / fireRate;
    Instantiate(Balle, spawnPoint.position, fireRotation);

    ballesRestantes--;
}

和错误截图Here

红色的长方形是敌人,绿色的小东西是子弹,不要注意图形:D,只是为了测试。这很烦人,因为在游戏中,子弹之间的间距较小,但它相当于同一件事。

我希望有人可以帮助我。祝你有美好的一天!

【问题讨论】:

  • 玩转“连续动态”模式,不仅适用于子弹,也适用于敌人。
  • 我会试试的,谢谢
  • „连续动态“很昂贵,如果可能,您应该避免使用它。如果您可以通过更改碰撞器的大小来使其工作,那么它应该会更好地提高性能。

标签: c# unity3d


【解决方案1】:

是的,它与与渲染不同步的物理引擎刷新率有关。如果是小而快的对撞机,你会遇到这样的问题。有不同的方法来处理它,但最简单的方法是增加你的子弹对撞机的大小,以确保它不会通过槽。

【讨论】:

  • 好吧,看起来合乎逻辑。谢谢
  • 但是连续碰撞检测应该可以处理这个问题。
  • 连续碰撞检测并不总是有用的。它增加了碰撞检查的速度,但如果碰撞器太小,它无论如何都会在帧之间通过而不被检测到。
  • 事实上,增加子弹对撞机大小的工作,但它不太现实,我的意思是子弹。游戏不现实
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多