蹲下时如何变速?
How to change speed when crouching?
我试图让玩家在蹲下移动时变慢。
private float moveSpeed = 5f;
private float crouchSpeed = 0.2f;
private float runSpeed = 8.5f;
private void PlayerMovement()
{
move = controls.Player.Movement.ReadValue<Vector2>();
movement = (move.y * transform.forward) + (move.x * transform.right);
controller.Move(movement * moveSpeed * Time.deltaTime);
if (isRunning)
{
run = controls.Player.Run.ReadValue<float>();
Vector3 running = (move.y * transform.forward) + (move.x * transform.right);
controller.Move(running * runSpeed * Time.deltaTime);
}
if (crouching)
{
isRunning = false;
transform.localScale = new Vector3(transform.localScale.x, crouchYScale, transform.localScale.z);
movement = (move.y * transform.forward) + (move.x * transform.right);
controller.Move(movement * crouchSpeed * Time.deltaTime);
}
else
{
transform.localScale = new Vector3(transform.localScale.x, startYScale, transform.localScale.z);
movement = (move.y * transform.forward) + (move.x * transform.right);
controller.Move(movement * moveSpeed * Time.deltaTime);
}
}
但是,即使玩家蹲下,它仍然是与步行速度相同的速度。这是为什么?
private void PlayerMovement()
{
// stuff
controller.Move(movement * moveSpeed * Time.deltaTime);
// stuff
if (crouching)
{
// stuff
controller.Move(movement * crouchSpeed * Time.deltaTime);
}
你做正常的运动,然后你也做基于你的 run/crouch 状态的运动。
考虑改为将 currentSpeed 设置为您的步行速度,检查您的案例并适当设置 currentSpeed,然后在设置速度后只有一个地方实际 .Move()。
设置速度的一个好方法是删除重复的相同方法。这样你就可以定义一个临时的速度变量,通过不同的条件来最终确定主速度。在这个方法中,你不再需要重新定义Character.Move
,问题就迎刃而解了
var currentSpeed = moveSpeed;
if (isRunning)
{
currentSpeed = runSpeed;
run = controls.Player.Run.ReadValue<float>();
}
if (crouching)
{
currentSpeed = crouchSpeed;
isRunning = false;
transform.localScale = new Vector3(transform.localScale.x, crouchYScale, transform.localScale.z);
}
else // if move
{
transform.localScale = new Vector3(transform.localScale.x, startYScale, transform.localScale.z);
}
controller.Move(movement * currentSpeed * Time.deltaTime); // without duplication and select true speed in last
我试图让玩家在蹲下移动时变慢。
private float moveSpeed = 5f;
private float crouchSpeed = 0.2f;
private float runSpeed = 8.5f;
private void PlayerMovement()
{
move = controls.Player.Movement.ReadValue<Vector2>();
movement = (move.y * transform.forward) + (move.x * transform.right);
controller.Move(movement * moveSpeed * Time.deltaTime);
if (isRunning)
{
run = controls.Player.Run.ReadValue<float>();
Vector3 running = (move.y * transform.forward) + (move.x * transform.right);
controller.Move(running * runSpeed * Time.deltaTime);
}
if (crouching)
{
isRunning = false;
transform.localScale = new Vector3(transform.localScale.x, crouchYScale, transform.localScale.z);
movement = (move.y * transform.forward) + (move.x * transform.right);
controller.Move(movement * crouchSpeed * Time.deltaTime);
}
else
{
transform.localScale = new Vector3(transform.localScale.x, startYScale, transform.localScale.z);
movement = (move.y * transform.forward) + (move.x * transform.right);
controller.Move(movement * moveSpeed * Time.deltaTime);
}
}
但是,即使玩家蹲下,它仍然是与步行速度相同的速度。这是为什么?
private void PlayerMovement()
{
// stuff
controller.Move(movement * moveSpeed * Time.deltaTime);
// stuff
if (crouching)
{
// stuff
controller.Move(movement * crouchSpeed * Time.deltaTime);
}
你做正常的运动,然后你也做基于你的 run/crouch 状态的运动。
考虑改为将 currentSpeed 设置为您的步行速度,检查您的案例并适当设置 currentSpeed,然后在设置速度后只有一个地方实际 .Move()。
设置速度的一个好方法是删除重复的相同方法。这样你就可以定义一个临时的速度变量,通过不同的条件来最终确定主速度。在这个方法中,你不再需要重新定义Character.Move
,问题就迎刃而解了
var currentSpeed = moveSpeed;
if (isRunning)
{
currentSpeed = runSpeed;
run = controls.Player.Run.ReadValue<float>();
}
if (crouching)
{
currentSpeed = crouchSpeed;
isRunning = false;
transform.localScale = new Vector3(transform.localScale.x, crouchYScale, transform.localScale.z);
}
else // if move
{
transform.localScale = new Vector3(transform.localScale.x, startYScale, transform.localScale.z);
}
controller.Move(movement * currentSpeed * Time.deltaTime); // without duplication and select true speed in last