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 }