Пример #1
0
    void MoveCharacterWithNavmesh()
    {
        Vector3 rawMoveDir = Vector3.forward * vertical + Vector3.right * horizontal;

        Vector3    cameraForwardNormalized = Vector3.ProjectOnPlane(currentCamera.forward, Vector3.up);
        Quaternion rotationToCamNormal     = Quaternion.LookRotation(cameraForwardNormalized, Vector3.up);

        Vector3 finalMoveDir = rotationToCamNormal * rawMoveDir;

        moving = false;
        if (!Vector3.Equals(finalMoveDir, Vector3.zero))
        {
            Quaternion rotationToMoveDir = Quaternion.LookRotation(finalMoveDir, Vector3.up);
            transform.rotation = Quaternion.RotateTowards(transform.rotation, rotationToMoveDir, rotationSpeed * Time.deltaTime);
            moving             = true;
        }

        if (moving && _soundManager.EffectSounds[EffectSound.Running])
        {
            _soundManager.StartSound(_soundManager.EffectSounds[EffectSound.Running]);
        }
        else if (_soundManager.EffectSounds[EffectSound.Running])
        {
            _soundManager.StopSound(_soundManager.EffectSounds[EffectSound.Running]);
        }


        animator.SetBool("Moving", moving);
        animator.SetFloat("VerticalSpeed", vertical);

        Vector3 result = finalMoveDir * (isSprinting ? moveSpeed * 2 : moveSpeed) * Time.deltaTime;

        navMeshAgent.Move(result);
    }
Пример #2
0
 private void CheckMovement()
 {
     if (!lastTargetVisited)
     {
         if (trigger)
         {
             GoTo(currentTarget);
             trigger = false;
             if (targetQueue.Count > 0)
             {
                 currentTarget = targetQueue.Dequeue();
             }
         }
     }
     if (navMeshAgent.remainingDistance < navMeshAgent.stoppingDistance)
     {
         isMoving = false;
     }
     else
     {
         isMoving = true;
     }
     if (isMoving)
     {
         animator.SetBool("NPC Walking", true);
         if (_soundManager.EffectSounds.ContainsKey(EffectSound.Walking))
         {
             _soundManager.StartSound(_soundManager.EffectSounds[EffectSound.Walking]);
         }
     }
     else
     {
         animator.SetBool("NPC Walking", false);
         if (_soundManager.EffectSounds.ContainsKey(EffectSound.Walking))
         {
             _soundManager.StopSound(_soundManager.EffectSounds[EffectSound.Walking]);
         }
     }
 }
 private void FixedUpdate()
 {
     if (!_npcMovement.IsMoving && _canBeChecked)
     {
         MyMovementType = MovementType.ControlledMove;
         _canBeChecked  = false;
     }
     if (MyMovementType == MovementType.AutoMove && _movementTypeChanged)
     {
         _complexMove.enabled = false;
         _npcMovement.enabled = true;
         _npcMovement.MoveNextPosition();
         _movementTypeChanged = false;
     }
     if (MyMovementType == MovementType.ControlledMove && _movementTypeChanged)
     {
         _npcMovement.GetComponent <NavMeshAgent>().ResetPath();
         _soundManager.StopSound(_soundManager.EffectSounds[EffectSound.Walking]);
         _npcMovement.enabled = false;
         _npcMovement.TargetQueue.Clear();
         _complexMove.enabled = true;
         _movementTypeChanged = false;
     }
 }