AddForce根据位置更改行为

时间:2015-12-18 13:04:58

标签: unity3d

我试图让敌人跳向目标以使用AddForce进行攻击,但是添加了多少力量似乎在很大程度上取决于实体在场景中的位置(see video

问题是什么?

void Start(){
    ani = GetComponent<Animation>();
    agent = GetComponent<NavMeshAgent>();
    rig = GetComponent<Rigidbody>();
    state = states.idle;
}

private void Attack(){
    state = states.attack;
    agent.enabled = false;
    ani.Play("attack3");
    Vector3 force = transform.forward * 300f;
    force.y = 750f;
    rig.AddForce(force);
}

1 个答案:

答案 0 :(得分:0)

没有看到更多的代码,很难说,但有一件事对我来说很突出:如果你的实体围绕x轴旋转(即可以向上或向下倾斜)那么你会看到你的行为从您拥有的代码中描述。 (从你的视频中不清楚是否是这种情况,但看起来你的地面有一些斜度,如果模型与地板对齐,可能导致这种情况。)

考虑:如果您的座席直接面向Z轴,那么其transform.forward的{​​{1}}将为零。 y的初始值的大小为force(并且仍然会有300为零)。然后,您会将y设置为y,总体力量为750

现在考虑您的代理几乎完全向上。 (0, 750, 300)现在为transform.forward,您乘以300,但随后设置为(0, 299, 0.01)。对于正向同一方向跳跃的代理,您现在产生的力y = 750

您可以通过修改(0, 750, 3)的结尾来解决此问题:

Attack

无论角色面向哪个方向,上述代码都保证Vector3 horizontalDirection = new Vector3(transform.forward.x, 0, transform.forward.z); Vector3 force = horizontalDirection.normalized * 300f; force.y = 750f; rig.AddForce(force); 的大小一致。

(@fafase评论中提到的另一个问题也是一个非常合理的原因,可能是其中一个或两个都应该受到责备!)