コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        GameObject.Find("Warrior Health").GetComponent <TextMeshProUGUI>().SetText("Warrior Health: " + m_WarriorHealth);
        GameObject.Find("Mage Health").GetComponent <TextMeshProUGUI>().SetText("Mage Health: " + m_MageHealth);

        if (m_MageHealth == 0 || m_WarriorHealth == 0)
        {
            GameObject.Find("Losing Text").GetComponent <TextMeshProUGUI>().enabled = true;
            Time.timeScale = 0;
        }

        switch (m_PlayerType)
        {
        case E_PlayerType.Mage:
            m_PlayerAnimator = m_Mage.GetComponent <Animator>();
            if (Input.GetKeyDown(KeyCode.X))
            {
                m_PlayerType = E_PlayerType.Warrior;
                m_Warrior.SetActive(true);
                m_Mage.SetActive(false);
            }
            break;

        case E_PlayerType.Warrior:
            m_PlayerAnimator = m_Warrior.GetComponent <Animator>();
            if (Input.GetKeyDown(KeyCode.X))
            {
                m_PlayerType = E_PlayerType.Mage;
                m_Warrior.SetActive(false);
                m_Mage.SetActive(true);
            }
            break;
        }

        transform.position += Vector3.zero;
        if (m_CanMove == true)
        {
            m_XAxis = Input.GetAxisRaw("Horizontal");
            m_YAxis = Input.GetAxisRaw("Vertical");
            m_PlayerAnimator.SetFloat("XInput", m_XAxis);
            m_PlayerAnimator.SetFloat("YInput", m_YAxis);

            m_PlayerAnimator.SetBool("IsAttacking", IsAttacking);

            if (Input.GetKeyDown(KeyCode.Space) && IsMoving == false)
            {
                StartCoroutine("Attack");
            }



            switch (m_PlayerDirection)
            {
            case E_PlayerDirection.Down:
                m_PlayerAnimator.SetBool("FaceDown", true);
                m_PlayerAnimator.SetBool("FaceUp", false);
                m_PlayerAnimator.SetBool("FaceLeft", false);
                m_PlayerAnimator.SetBool("FaceRight", false);
                break;

            case E_PlayerDirection.Up:
                m_PlayerAnimator.SetBool("FaceUp", true);
                m_PlayerAnimator.SetBool("FaceDown", false);
                m_PlayerAnimator.SetBool("FaceLeft", false);
                m_PlayerAnimator.SetBool("FaceRight", false);
                break;

            case E_PlayerDirection.Left:
                m_PlayerAnimator.SetBool("FaceLeft", true);
                m_PlayerAnimator.SetBool("FaceUp", false);
                m_PlayerAnimator.SetBool("FaceDown", false);
                m_PlayerAnimator.SetBool("FaceRight", false);
                break;

            case E_PlayerDirection.Right:
                m_PlayerAnimator.SetBool("FaceRight", true);
                m_PlayerAnimator.SetBool("FaceUp", false);
                m_PlayerAnimator.SetBool("FaceLeft", false);
                m_PlayerAnimator.SetBool("FaceDown", false);
                break;
            }

            //Set Direction
            #region SetDirection
            if (m_XAxis > 0)
            {
                m_PlayerDirection = E_PlayerDirection.Right;
            }
            else if (m_XAxis < 0)
            {
                m_PlayerDirection = E_PlayerDirection.Left;
            }
            else if (YAxis < 0)
            {
                m_PlayerDirection = E_PlayerDirection.Down;
            }
            else if (YAxis > 0)
            {
                m_PlayerDirection = E_PlayerDirection.Up;
            }
            #endregion

            if (Mathf.Abs(m_XAxis) > 0 || Mathf.Abs(YAxis) > 0)
            {
                m_IsMoving = true;
                m_PlayerAnimator.SetBool("IsMoving", m_IsMoving);
            }
            else
            {
                m_IsMoving = false;
                m_PlayerAnimator.SetBool("IsMoving", m_IsMoving);
            }

            m_PlayerRigidbody.velocity = new Vector2(m_XAxis * m_PlayerSpeed, m_YAxis * m_PlayerSpeed);
        }
    }
コード例 #2
0
    void FixedUpdate()
    {
        m_IsGrounded = Physics2D.OverlapPoint(m_GroundCheck.position, m_GroundLayer);

        if (m_CanMove == true)
        {
            //Set axis movement
            #region SetAxisMovement
            //Movement on X-axis
            m_XAxis = Input.GetAxisRaw("Horizontal");
            //Movement on Y-axis
            m_YAxis = Input.GetAxisRaw("Vertical");
            #endregion


            /*If Movement on Y-axis yield greater then .001
             * and player is grounded, then add force to the player
             * and make him jump
             */
            if (m_YAxis > 0 && m_IsGrounded)
            {
                Vector2 BaseJump            = new Vector2(m_PlayerSpeed * m_XAxis, m_YAxis * m_JumpForce);
                Vector2 AdditionalJumpSpeed = new Vector2(m_CurrentRunSpeed * m_XAxis, m_CurrentRunSpeed * m_YAxis);

                m_PlayerRB.velocity = BaseJump + AdditionalJumpSpeed;
                m_IsGrounded        = false;
            }

            //Handles speed between moving and running
            #region Moving and Running
            if (m_IsGrounded == true)
            {
                //Switch max velocity based on if they are running or walking
                if (m_IsMoving == true && m_IsRunning == false)
                {
                    //Switch from running to not running slow down the player until walking speed
                    if (m_CurrentRunSpeed > 0)
                    {
                        m_CurrentRunSpeed -= m_RunSpeedIncrement * Time.deltaTime;
                    }

                    Vector2 AdditionalSpeed = new Vector2(m_CurrentRunSpeed * m_XAxis, m_PlayerRB.velocity.y);

                    //Set the velocity of mario
                    this.m_PlayerRB.velocity = new Vector2((m_PlayerSpeed * m_XAxis) + AdditionalSpeed.x, this.m_PlayerRB.velocity.y);
                }
                else if (m_IsMoving == true && m_IsRunning == true)
                {
                    if (m_CurrentRunSpeed < m_MaxRunSpeed)
                    {
                        m_CurrentRunSpeed += m_RunSpeedIncrement * Time.deltaTime;
                    }

                    Vector2 BaseSpeed       = new Vector2(m_PlayerSpeed * m_XAxis, m_PlayerRB.velocity.y);
                    Vector2 AdditionalSpeed = new Vector2(m_CurrentRunSpeed * m_XAxis, m_PlayerRB.velocity.y);

                    this.m_PlayerRB.velocity = new Vector2(BaseSpeed.x + AdditionalSpeed.x, m_PlayerRB.velocity.y);
                }
                else
                {
                    m_CurrentRunSpeed = 0;
                }
            }
            #endregion

            //Determine if player is running
            #region CheckIfRunning
            if (Input.GetKeyDown(KeyCode.LeftShift))
            {
                m_IsRunning = true;
            }
            else if (Input.GetKeyUp(KeyCode.LeftShift))
            {
                m_IsRunning = false;
            }
            #endregion

            //If absolute of x-axis is greater then one, then they are consider moving
            #region CheckIsMoving
            if (Mathf.Abs(m_XAxis) > 0 || Mathf.Abs(m_YAxis) > 0)
            {
                m_IsMoving = true;
                m_Animator.SetBool("IsMoving", true);
            }
            else
            {
                m_IsMoving = false;
                m_Animator.SetBool("IsMoving", false);
            }
            #endregion

            //Set Sprite direction depending on x axis movement
            #region SetSpriteDirection
            //Set Sprite Right
            if (m_XAxis > 0)
            {
                m_SpriteRenderer.flipX = false;
                m_PlayerDirection      = E_PlayerDirection.Right;
            }
            //Set Sprite Left
            else if (m_XAxis < 0)
            {
                m_SpriteRenderer.flipX = true;
                m_PlayerDirection      = E_PlayerDirection.Left;
            }
            #endregion
        }
    }