让玩家远离敌人
本文关键字:敌人 远离 玩家 | 更新日期: 2023-09-27 18:08:56
我已经为我想要制作的游戏制作了自己的控制器,但我遇到了一些问题。每当敌人接近我,而我没有及时阻止我的角色时,他就会在敌人的头顶上传送。
推开:
void OnControllerColliderHit(ControllerColliderHit hit)
{
if (hit.gameObject.GetComponent<EnemyController>())
{
Debug.Log("!");
float pushPower = 0.05f;
Vector3 pushDir = hit.transform.forward;
characterController.Move(pushDir * pushPower);
}
}
运动:
void FixedUpdate()
{
RaycastHit hitInfo;
Physics.SphereCast(transform.position, characterController.radius, Vector3.down, out hitInfo, characterController.height / 2f);
desiredMove = Vector3.ProjectOnPlane(desiredMove, hitInfo.normal).normalized;
desiredMove = (transform.forward * Input.GetAxis("Vertical") + transform.right * Input.GetAxis("Horizontal")).normalized;
if(characterController.isGrounded)
{
moveDir.x = desiredMove.x * speed;
moveDir.z = desiredMove.z * speed;
isJumping = false;
if(Input.GetButtonDown("Jump"))
{
moveDir.y = jumpPower;
isWalking = false;
isJumping = true;
canRun = false;
}
if(Input.GetButton("Sprint") && canRun)
{
isWalking = false;
isRunning = true;
moveDir.x = desiredMove.x * runSpeed;
moveDir.z = desiredMove.z * runSpeed;
}
else
{
isRunning = false;
}
}
else
{
Falling();
}
characterController.Move(moveDir * Time.fixedDeltaTime);
}
我决定添加一个功能,如果玩家离敌人太近,就把他推开,但我真的无法让它正常工作。现在它将玩家推向敌人前进的方向,所以当你从前方接近敌人时它便能够有效运行,在其他情况下我的玩家只是在敌人前方传送。我想把玩家推到他原来的方向,但我真的想不出任何办法。有人能帮我一下吗?
若要击退敌人,你可以这样做:
Vector3 direction = (enemy.transform.position - player.transform.position).normalized;
player.transform.position += direction * DISTANCE_YOU_WANT_TO_PUSH;
在你的例子中,因为你已经在OnControllerColliderHit内部处理了一个碰撞,它应该更像:
Vector3 direction = (hit.point - transform.position).normalized
在这两种情况下,您可能都想设置方向。Y = 0,然后将其归一化(例如,如果您只想沿着地平面被推开)。