我试图让敌人跳向目标以使用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);
}
答案 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评论中提到的另一个问题也是一个非常合理的原因,可能是其中一个或两个都应该受到责备!)