【问题标题】:Push back an enemy on trigger触发后击退敌人
【发布时间】:2016-04-09 00:43:43
【问题描述】:

我有两个游戏对象,一个是我的“英雄”,另一个是带有导航网格的敌人,我已经设法使健康系统没有问题,但知道当剑与敌人相撞时,似乎刚体不起作用或其他什么,因为我尝试了一些我在互联网上找到的解决方案,但似乎没有任何效果。我希望一旦剑与敌人相撞,敌人就会被推开。我试过这个:

public void takeDamage() { 
  // revert rigidbody velocity:
  rigidbody.velocity *= -1;
}

另一个代码

float distance = 25.0f;
                if (player.position.x < enemyPosition.position.x) {
                    Vector3 new_position = new Vector3 (distance, enemyPosition.position.y, enemyPosition.position.z);
                    rb.position = new_position;
                }

谢谢

编辑:

好像用这段代码解决了:

Vector3 new_position = new Vector3 (3.0f, 0f, 0f) + rb.transform.position;
rb.transform.position = new_position;

【问题讨论】:

  • 当你实现这些例子时究竟会发生什么?
  • 什么都没有,健康变量应该会减少,但没有其他任何事情发生
  • 你的 Update() 方法中是否有什么东西可以让敌人恢复原来的速度?
  • 是的,来自 NavMesh 的 SetDestination 方法。但是当它与剑碰撞时,物体甚至都没有移动。
  • 你的刚体是怎么得到的?与GetComponent?您是否尝试将值设置得非常高?像 10000 左右以确保它做某事?

标签: c# unity3d


【解决方案1】:

测试一下

   void OnCollisionEnter(Collision collision) {
        if (collision.relativeVelocity.magnitude > 1)
            rb.velocity = new Vector3(0, 10, 0);
    }

【讨论】:

  • 没什么,我得到了同样的结果。
  • 可能意味着您的网格或碰撞网格上的设置有问题。尝试制作两个盒子并测试此代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多