コード例 #1
0
    //occurs every frame
    //src: http://michaelcummings.net/mathoms/creating-2d-animated-sprites-using-unity-4.3
    void Update()
    {
        //dev console input check
        if (Input.GetKeyDown(KeyCode.BackQuote))
        {
            devConsoleEnabled = !devConsoleEnabled;

            Time.timeScale = devConsoleEnabled ? 0f : 1f;
            devConsole.SetActive(devConsoleEnabled);
            if (devConsoleEnabled)
            {
                devConsole.GetComponent <UnityEngine.UI.InputField>().ActivateInputField();
            }
            lockAI += (devConsoleEnabled ? 1 : -1);
        }


        if (IsActive())
        {
            //animator contorl based on input
            animator.SetBool("Walking", true);
            if (input.y > 0)            //up
            {
                facing = Vector2.up;
                animator.SetInteger("Direction", 0);
                attackHitboxOffset.x = 0;
                attackHitboxOffset.y = 0.5f;
            }
            else if (input.y < 0)     //down
            {
                facing = Vector2.down;
                animator.SetInteger("Direction", 1);
                attackHitboxOffset.x = 0;
                attackHitboxOffset.y = -0.5f;
            }
            else if (input.x > 0)     //right
            {
                facing = Vector2.right;
                animator.SetInteger("Direction", 3);
                attackHitboxOffset.x = 0.5f;
                attackHitboxOffset.y = -0.25f;
            }
            else if (input.x < 0)     //left
            {
                facing = Vector2.left;
                animator.SetInteger("Direction", 2);
                attackHitboxOffset.x = -0.5f;
                attackHitboxOffset.y = -0.25f;
            }
            else
            {
                animator.SetBool("Walking", false);
                //            int dir = animator.GetInteger("Direction"); //commented lines are for old animation controller
                //            if(dir == 0) //idle down
                //                animator.SetInteger("Direction", 4);
                //            else if (dir == 1) //idle right
                //                animator.SetInteger("Direction", 5);
                //            else if (dir == 2) //idle up
                //                animator.SetInteger("Direction", 6);
                //            else if (dir == 3) // idle left
                //                animator.SetInteger("Direction", 7);
            }
            if (Input.GetButtonDown("Attack") && !attacking)
            {
                attacking   = true;
                attackTimer = attackTime;
                attackHitbox.transform.localPosition = attackHitboxOffset;
            }

            //TODO crappy way of doing this; I'm too lazy to make extensive changes to the controller untiol we know for sure what we're doing with these animations
            animator.SetBool("Attacking", attacking || casting);


            // Used for inventory stuff
            if (Input.GetKeyDown(KeyCode.I))             // opens inventory
            {
                Debug.Log("I key pressed");
                inventory.Open();
            }
            // use specific items based on which num is used
            if (Input.GetKeyDown(KeyCode.Keypad1) || Input.GetKeyDown(KeyCode.Alpha1))
            {
                Debug.Log("1 is Pressed");
                inventory.UseItem(0);
            }
            if (Input.GetKeyDown(KeyCode.Keypad2) || Input.GetKeyDown(KeyCode.Alpha2))
            {
                Debug.Log("2 is Pressed");
                inventory.UseItem(1);
            }
            if (Input.GetKeyDown(KeyCode.Keypad3) || Input.GetKeyDown(KeyCode.Alpha3))
            {
                Debug.Log("3 is Pressed");
                inventory.UseItem(2);
            }
            if (Input.GetKeyDown(KeyCode.Keypad4) || Input.GetKeyDown(KeyCode.Alpha4))
            {
                Debug.Log("4 is Pressed");
                inventory.UseItem(3);
            }
            if (Input.GetKeyDown(KeyCode.Keypad5) || Input.GetKeyDown(KeyCode.Alpha5))
            {
                Debug.Log("5 is Pressed");
                inventory.UseItem(4);
            }
            if (Input.GetKeyDown(KeyCode.Keypad6) || Input.GetKeyDown(KeyCode.Alpha6))
            {
                Debug.Log("6 is Pressed");
                inventory.UseItem(5);
            }
            if (Input.GetKeyDown(KeyCode.Keypad7) || Input.GetKeyDown(KeyCode.Alpha7))
            {
                Debug.Log("7 is Pressed");
                inventory.UseItem(6);
            }
            if (Input.GetKeyDown(KeyCode.Keypad8) || Input.GetKeyDown(KeyCode.Alpha8))
            {
                Debug.Log("8 is Pressed");
                inventory.UseItem(7);
            }
            if (Input.GetKeyDown(KeyCode.Keypad9) || Input.GetKeyDown(KeyCode.Alpha9))
            {
                Debug.Log("9 is Pressed");
                inventory.UseItem(8);
            }
            if (Input.GetKeyDown(KeyCode.Keypad0) || Input.GetKeyDown(KeyCode.Alpha0))
            {
                Debug.Log("0 is Pressed");
                inventory.UseItem(9);
            }
            // end hot bar keys
            // chest and interact key
            if (Input.GetKeyDown(KeyCode.E))
            {
                if (chest != null)
                {
                    chest.Open();
                }
                if (shop != null)
                {
                    shop.Open();
                }
            }
        }


        //timers continue regardless of whether the player is active or not
        if (attacking)
        {
            if (attackTimer > 0)
            {
                attackTimer -= Time.deltaTime;
            }
            else
            {
                attacking = false;
            }
        }

        if (casting)
        {
            if (castTimer > 0)
            {
                castTimer -= Time.deltaTime;
            }
            else
            {
                animator.speed = 1f;
                animator.SetBool("Casting", false);
                casting = false;
            }
        }

        //attack hitbox should not stay on if frozen; status updated outside IsActive block
        attackHitbox.isActive = attacking && this.IsActive();

        if (bombTimer >= 0)
        {
            bombTimer -= Time.deltaTime;
        }

        if (iceTimer >= 0)
        {
            iceTimer -= Time.deltaTime;
        }

        if (pushTimer >= 0)
        {
            pushTimer -= Time.deltaTime;
        }
    }