Оттолкнуть игрока от врага

Я сделал свой собственный контроллер для игры, которую пытаюсь сделать, но столкнулся с некоторыми проблемами. Всякий раз, когда ко мне приближается враг и я вовремя не останавливаю своего персонажа, он телепортируется на голову врага.

Отталкивать:

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

Я решил добавить функцию отталкивания игрока, если он слишком близко к врагу, но я не могу заставить ее работать правильно. Прямо сейчас он толкает игрока в направлении врага вперед, поэтому он отлично работает, когда вы приближаетесь к врагу спереди, в других случаях мой игрок просто телепортируется перед врагом. Я хотел оттолкнуть игрока в ту сторону, откуда он пришел, но не могу придумать, как это сделать. Может ли кто-нибудь помочь мне с этим?


person Community    schedule 20.08.2015    source источник
comment
Пожалуйста, убедитесь, что соответствующий код встроен в сообщение.   -  person Alexei Levenkov    schedule 21.08.2015
comment
Сделанный! Извините за беспокойство!   -  person    schedule 21.08.2015


Ответы (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 перед его нормализацией (например, если вы хотите, чтобы вас оттолкнули только вдоль плоскости земли).

person Clay Fowler    schedule 20.08.2015
comment
Спасибо, на самом деле это работает только для меня без нормализации. - person ; 21.08.2015