2015-08-20 6 views
1

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

оттолкнуть:

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

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

+0

Пожалуйста, убедитесь, что соответствующий код встроен в сообщение. –

+0

Сделано! Приносим извинения за неудобства! – Fiffe

ответ

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

+0

Спасибо, на самом деле это работает только для меня без нормализации. – Fiffe