【问题标题】:Push player away from the enemy将玩家推离敌人
【发布时间】:2015-08-20 23:41:49
【问题描述】:

我已经为我正在尝试制作的游戏制作了自己的控制器,但我遇到了一些问题。每当敌人靠近我而我没有及时阻止我的角色时,他就会传送到敌人的头顶。

推开:

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);
}

我决定添加一个功能,如果玩家离敌人太近,可以将其推开,但我无法让它正常工作。现在它会将玩家推向敌人的前方,所以当你从正面接近敌人时它可以正常工作,在其他情况下,我的玩家只是传送到敌人面前。我想把玩家推向他来的方向,但我真的想不出任何办法。谁能帮帮我?

【问题讨论】:

  • 请确保相关代码已内联在帖子中。
  • 完成!给您带来的不便深表歉意!

标签: c# unity3d rigid-bodies


【解决方案1】:

要远离敌人,你可以这样做:

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

在这两种情况下,您可能需要在规范化之前设置 direction.y = 0(例如,如果您只想沿着地平面被推开)。

【讨论】:

  • 谢谢,实际上它只适用于我没有规范化。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多