コード例 #1
0
ファイル: MyPlayer.cs プロジェクト: vicotux1/3D_Gamekit_Lite
        private void HandleCharacterInput()
        {
            PlayerCharacterInputs characterInputs = new PlayerCharacterInputs();

            // Build the CharacterInputs struct
            characterInputs.MoveAxisForward = Input.GetAxisRaw(VerticalInput);
            characterInputs.MoveAxisRight   = Input.GetAxisRaw(HorizontalInput);
            characterInputs.CameraRotation  = OrbitCamera.Transform.rotation;
            characterInputs.JumpDown        = Input.GetKeyDown(KeyCode.Space);
            characterInputs.JumpHeld        = Input.GetKey(KeyCode.Space);
            characterInputs.CrouchDown      = Input.GetKeyDown(KeyCode.C);
            characterInputs.CrouchUp        = Input.GetKeyUp(KeyCode.C);
            characterInputs.CrouchHeld      = Input.GetKey(KeyCode.C);
            characterInputs.NoClipDown      = Input.GetKeyUp(KeyCode.Q);

            // Apply inputs to character
            Character.SetInputs(ref characterInputs);
        }
コード例 #2
0
        /// <summary>
        /// This is called every frame by MyPlayer in order to tell the character what its inputs are
        /// </summary>
        public void SetInputs(ref PlayerCharacterInputs inputs)
        {
            // Handle state transition from input
            if (inputs.NoClipDown)
            {
                if (CurrentCharacterState == CharacterState.Default)
                {
                    TransitionToState(CharacterState.NoClip);
                }
                else if (CurrentCharacterState == CharacterState.NoClip)
                {
                    TransitionToState(CharacterState.Default);
                }
            }

            _jumpInputIsHeld   = inputs.JumpHeld;
            _crouchInputIsHeld = inputs.CrouchHeld;

            // Clamp input
            Vector3 moveInputVector = Vector3.ClampMagnitude(new Vector3(inputs.MoveAxisRight, 0f, inputs.MoveAxisForward), 1f);

            // Calculate camera direction and rotation on the character plane
            Vector3 cameraPlanarDirection = Vector3.ProjectOnPlane(inputs.CameraRotation * Vector3.forward, Motor.CharacterUp).normalized;

            if (cameraPlanarDirection.sqrMagnitude == 0f)
            {
                cameraPlanarDirection = Vector3.ProjectOnPlane(inputs.CameraRotation * Vector3.up, Motor.CharacterUp).normalized;
            }
            Quaternion cameraPlanarRotation = Quaternion.LookRotation(cameraPlanarDirection, Motor.CharacterUp);

            switch (CurrentCharacterState)
            {
            case CharacterState.Default:
            {
                // Move and look inputs
                _moveInputVector = cameraPlanarRotation * moveInputVector;
                _lookInputVector = cameraPlanarDirection;

                // Jumping input
                if (inputs.JumpDown)
                {
                    _timeSinceJumpRequested = 0f;
                    _jumpRequested          = true;
                }

                // Crouching input
                if (inputs.CrouchDown)
                {
                    _shouldBeCrouching = true;

                    if (!_isCrouching)
                    {
                        _isCrouching = true;
                        Motor.SetCapsuleDimensions(0.5f, 1f, 0.5f);
                        MeshRoot.localScale = new Vector3(1f, 0.5f, 1f);
                    }
                }
                else if (inputs.CrouchUp)
                {
                    _shouldBeCrouching = false;
                }
                break;
            }

            case CharacterState.NoClip:
            {
                _moveInputVector = inputs.CameraRotation * moveInputVector;
                _lookInputVector = cameraPlanarDirection;
                break;
            }
            }
        }