Unity3d AddForce根据位置更改行为
我试图使用Unity3d AddForce根据位置更改行为,unity3d,Unity3d,我试图使用AddForce,让敌人跳向目标进行攻击,但增加的力量似乎很大程度上取决于实体在场景中的位置() 问题可能是什么 void Start(){ ani = GetComponent<Animation>(); agent = GetComponent<NavMeshAgent>(); rig = GetComponent<Rigidbody>(); state = states.idle; } private void
AddForce
,让敌人跳向目标进行攻击,但增加的力量似乎很大程度上取决于实体在场景中的位置()
问题可能是什么
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);
}
void Start(){
ani=GetComponent();
agent=GetComponent();
rig=GetComponent();
state=states.idle;
}
私有无效攻击(){
state=states.attack;
agent.enabled=false;
ani.Play(“攻击3”);
矢量3力=transform.forward*300f;
力y=750f;
钻机。附加力(力);
}
如果看不到更多的代码,很难说,但有一件事对我来说确实很突出:如果你的实体绕x轴旋转(即,可以向上或向下倾斜),那么你可以从你的代码中看到你描述的行为。(从您的视频中不清楚是否存在这种情况,但您的地面似乎有一些坡度,如果模型与地面对齐,可能会导致这种情况。)
考虑:如果你的代理正对着Z轴,那么它的transform.forward
的y
为零。force
的初始值的大小将为300
(并且y
仍然为零)。然后将y
设置为750
,总作用力为(0750300)
现在考虑你的代理人几乎完全向上。code>transform.forward现在是(0299,0.01)
,然后乘以300,然后设置y=750
。对于向同一方向跳跃的代理,现在产生的力是(0750,3)
您可以通过修改攻击的结尾来解决此问题,如下所示:
Vector3 horizontalDirection = new Vector3(transform.forward.x, 0, transform.forward.z);
Vector3 force = horizontalDirection.normalized * 300f;
force.y = 750f;
rig.AddForce(force);
上述代码保证无论角色朝向哪个方向,力的大小都是一致的
(@fafase在评论中提到的另一个问题也是一个非常合理的原因,可能是其中一个或两个原因造成的!)我认为这与您如何称呼攻击方法有关。最有可能的是,在视频的第一种情况下,该方法被调用一次,而在第二种情况下,它恰好在多个帧上被调用。您应该提供整个AI脚本,可能通过dropbox或其他方式。同意,您可以粘贴调用攻击方法的脚本吗