Esempio n. 1
0
    // Basically tank controls
    public void MoveAndRotateCharacterWithKeys()
    {
        bool  isRunning = false;
        float runSpeed  = walkSpeed * runSpeedMultiplier;

        // Get move quantity based on delta time and speed
        float moveSpeed = baseMoveSpeed * (isRunning ? runSpeed : walkSpeed);

        moveSpeed = PauseManager.isPaused ? 0 : moveSpeed;

        // Get user input
        float horizontal = Input.GetAxis("Horizontal");
        float vertical   = Input.GetAxis("Vertical");

        // Use animation if input exists
        if (vertical != 0.0f || horizontal != 0.0f)
        {
            agent.isStopped = true;
            MarkerManager.DeleteMarker();
            if (animator != null)
            {
                animator.SetBool("Walk", true);
            }
        }
        else
        {
            if (animator != null)
            {
                animator.SetBool("Walk", false);
            }
        }

        // Translate character
        Vector3 cameraDir      = IsometricCamera.instance.cameraDirection;
        Vector3 verticalMove   = IsometricCamera.Camera.transform.forward * Mathf.Abs(vertical) * -Mathf.Sign(cameraDir.z);
        Vector3 hortizonalMove = IsometricCamera.Camera.transform.right * Mathf.Abs(horizontal) * Mathf.Sign(cameraDir.x);

        verticalMove.y   = 0;
        verticalMove.x   = 0;
        hortizonalMove.y = 0;
        hortizonalMove.x = 0;
        Vector3 moveVector = verticalMove + hortizonalMove;

        transform.Translate(moveVector.normalized * moveSpeed * Time.deltaTime);

        // Rotate character
        Vector3 dir = IsometricCamera.Camera.transform.forward * vertical + IsometricCamera.Camera.transform.right * horizontal;

        dir.y = 0;
        transform.LookAt(dir + transform.position);

        // Use Left Shift to Toggle Running
        if (Input.GetKeyDown(KeyCode.LeftShift))
        {
            isRunning = !isRunning;
        }
    }