示例#1
0
 private void SetupCharacter(GameObject characterPrefab)
 {
     if (characterController != null)
     {
         characterController.UnsubscribeFromInput(playerInput);
         characterController.GetComponent <Wallet>().onAmountChange.RemoveAllListeners();
         characterController.onFailEvent.RemoveAllListeners();
         Destroy(characterController.gameObject);
     }
     characterController       = Instantiate(characterPrefab).GetComponent <CharacterControllerComponent>();
     characterController.speed = 0;
     characterController.onFailEvent.AddListener(OnCharacterOnFailEvent);
     characterController.GetComponent <Wallet>().onAmountChange.AddListener(scoreChangeEvent.Invoke);
     characterController.SubscribeToInput(playerInput);
 }
    void FixedUpdate( )
    {
        if (!IsInitialized)
        {
            return;
        }

        #region Locomotion Processing

        /*************
         * /*Locomotion
         * /*************/
        var inputVector = CharacterControllerComponent.isGrounded
            ? new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * MoveSpeed * Time.deltaTime
            : new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * (MoveSpeed / 2) * Time.deltaTime;

        if (HasJumped)
        {
            //Lerp hold timer down?
            JumpHoldTimer = Mathf.Lerp(JumpHoldTimer, 0, JumpPower);

            //Apply jump power
            VelocityVector += new Vector3(0, JumpHeight * JumpHoldTimer, 0) * Time.deltaTime;

            if (JumpHoldTimer <= 0.001f ||
                (JumpHoldTimer <= 0.7f &&
                 CharacterControllerComponent.isGrounded))
            {
                HasJumped = false;
            }
        }

        VelocityVector +=
            transform.TransformDirection(inputVector);

        //Rotation
        transform.eulerAngles = new Vector3(transform.eulerAngles.x, PlayerCamera.transform.eulerAngles.y,
                                            transform.eulerAngles.z);

        //Process move
        VelocityVector -= Physics.gravity * Time.deltaTime;
        CharacterControllerComponent.Move(VelocityVector);

        VelocityVector = Vector3.Lerp(VelocityVector, Vector3.zero, MoveStiffness);
        #endregion

        #region Camera Processing

        /*************
         * /*CAMERA
         * /*************/
        LookXAngle += Input.GetAxis("Mouse X") * LookSensitivity * Time.deltaTime;
        LookYAngle -= Input.GetAxis("Mouse Y") * LookSensitivity * Time.deltaTime;

        if (LookYAngle > LookClampVal)
        {
            LookYAngle = LookClampVal;
        }

        if (LookYAngle < -LookClampVal)
        {
            LookYAngle = -LookClampVal;
        }

        var cameraOffsetPos = new Vector3(0, CameraHeight, 0);

        //Process camera bob
        if (CameraBobEnabled &&
            CharacterControllerComponent.isGrounded &&
            CharacterControllerComponent.velocity != Vector3.zero)
        {
            float yOffset = Mathf.Sin(Time.time * ((Mathf.PI / 2) * CameraBobSpeed)) * CameraBobAmount;
            cameraOffsetPos.y += yOffset;
        }

        //Camera Position
        PlayerCamera.transform.position = transform.position + cameraOffsetPos;

        //Camera Rotation
        PlayerCamera.transform.eulerAngles = new Vector3(LookYAngle, LookXAngle, 0) * Time.deltaTime;
        #endregion

        /*************
         * /*GAMEPLAY
         * /*************/
        //CHEAT - give shotgun
        if (Input.GetKeyDown(KeyCode.I))
        {
            Inventory.GiveWeapon(eWeaponType.SHOTGUN);
        }

        //Weapon switch
        float scrollDir = Input.GetAxis("Mouse ScrollWheel");
        if (scrollDir != 0)
        {
            int idx = (int)(Inventory.EquippedIndex + scrollDir);
            Inventory.EquipWeapon(idx);
        }

        //Fire
        if (Input.GetMouseButton(eWeaponFireMode.DEFAULT.GetHashCode()))
        {
            Fire(eWeaponFireMode.DEFAULT);
        }

#if UNITY_EDITOR
        //Lock / unlock mouse (DEBUG)
        if (Input.GetKeyDown(KeyCode.LeftControl))
        {
            CursorLockedAndInvisible = !CursorLockedAndInvisible;

            Cursor.visible   = CursorLockedAndInvisible;
            Cursor.lockState = CursorLockedAndInvisible ? CursorLockMode.Locked : CursorLockMode.None;
        }
#endif
    }