躲避码不确定性(Unity,没有Unity物理)

时间:2016-12-30 12:32:11

标签: unity3d

所以,我想实现一个方向潇洒的躲避。它的工作非常简单 - 如果你朝一个方向移动并按下按钮,那个角色就会躲闪。速度对此无关紧要,因此无论您是跑步还是站立然后按下方向+躲避,躲避速度总是相同的。我有一些似乎有用的东西,但仍然存在问题。似乎对角线躲避与水平/垂直躲避相比有点太远,我试图解决这个问题。但是我还不确定它是否有效。在实践中,角色躲闪和东西,但有些东西似乎仍然没有,就像它与控制器的效果相当,但有时它在使用键盘后静止然后使用闪避仍然是古怪的。问题是 - 我不确定我拥有的代码是否是我能拥有的最好的代码,或者是否还有问题。 它应该如何运作的一个很好的例子是Rune Factory 4的躲避。 编辑:如果问题出在输入设置中,我可以显示它们。

        if (IsDodging == false)
          {
            Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            if (input.sqrMagnitude > 1) input.Normalize();
            if (Input.GetButtonDown("Jump"))
            {
                // Jumping stuff I blended out
            }
            else if (Input.GetButtonDown("Block/Dodge") && input.x != 0 || Input.GetButtonDown("Block/Dodge") && input.z != 0) // To activate dodging
            {
                    if (Time.time > Time_Start + DodgeCooldown) // Checks the cooldown
                    {
                    Time_Start = Time.time;
                    IsDodging = true;
                    dodge_direction = input;
                    if (dodge_direction.x > 0) { dodge_direction.x = 1; } // To fixate the distance traveled when dodging while ignoring how fast you are
                    if (dodge_direction.z > 0) { dodge_direction.z = 1; }
                    if (dodge_direction.x > 0 && dodge_direction.z > 0) { dodge_direction.Normalize(); } // To prevent diagonal dodging distance from becoming too big
                    }
            }

            else
            {
                // Walk.
                transform.position += input * run_speed * Time.deltaTime;
            }
        }
        else
        {
            transform.position += dodge_direction * dodge_distance;
            distance_traveled += Vector3.Distance(transform.position, dodge_direction * dodge_distance) * Time.deltaTime;
            if (distance_traveled > dodge_distance)
            {
                IsDodging = false;
                dodge_direction = Vector3.zero;
                distance_traveled = 0;
            }
        }

0 个答案:

没有答案