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