C# 在团结方面有困难
每当玩家击中敌人时,触发该功能,敌人必须遭受击退,但当这种情况发生时,在击退后,如果敌人靠近玩家,即使没有受到击退,也会再次遭受击退,这是不应该发生的 下面是触发冲突脚本C# 在团结方面有困难,c#,unity3d,C#,Unity3d,每当玩家击中敌人时,触发该功能,敌人必须遭受击退,但当这种情况发生时,在击退后,如果敌人靠近玩家,即使没有受到击退,也会再次遭受击退,这是不应该发生的 下面是触发冲突脚本 public void OnTriggerEnter(Collider hit){ if(hit.gameObject.tag == "npcSamuraiNormal"){ hit.rigidbody.AddForce(transform.forward * speed, ForceMode.Impu
public void OnTriggerEnter(Collider hit){
if(hit.gameObject.tag == "npcSamuraiNormal"){
hit.rigidbody.AddForce(transform.forward * speed, ForceMode.Impulse);
}
}
这是敌人的FSM状态
private void ChasePlayerState(){
if(dir.magnitude < 1.5f)
{
state = FSMStates.AttackPlayer;
return;
} else if(dir.magnitude >= 10){
state = FSMStates.SelectHouse;
return;
} else if(enemyHealth <= 0){
state = FSMStates.Death;
return;
}
/*if(dir.magnitude > 15){
state = FSMStates.Waypoint;
return;
} else if (dir.magnitude < 5){
rigidbody.velocity = Vector3.zero;
state = FSMStates.Shoot;
return;
}else if (enemyHealth <= 0){
state = FSMStates.Death;
return;
} */
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), rotSpeed * Time.deltaTime);
transform.eulerAngles = new Vector3 (0, transform.eulerAngles.y, 0);
rigidbody.MovePosition(transform.position + transform.forward * speed * Time.deltaTime);
}
提前感谢你发布了你的代码,这很好,但是如果你粘贴了实际的代码,而不是它的图像,那就更好了——这使得人们更容易编辑或复制到他们的机器上。OnTiggerEnter基本上是运行在NPCSamuranormal=>向NPCSamuranormal添加强制,而不涉及其他逻辑。如果你只想在攻击时击退,你需要在攻击函数中处理它。当触发器与某物碰撞时,物理引擎调用OnTriggerEnter。