我的冲刺和蹲伏脚本不起作用;



我实际上是通过按LeftShift键和按LeftControl键来使玩家冲刺。

我在底部附加了c#代码。在这里,Shift键是有效的,因为我使用Debug.Log("Sprint Triggered")进行测试,当键被按下时,克劳奇键也以同样的方式工作。

但是,当我按Shift时,玩家的速度根本不会改变。而且,当我按下蹲下键时,玩家会快速跳起来。

我已经正确设置了所有的变量,我仔细检查了它们。但是我不知道为什么身体的运动没有变化。

如果您需要更多的细节,请告诉我

public class SprintingCrouching : MonoBehaviour
{
private PlayerMovement playerMovement;
public float sprintSpeed = 10f;
public float moveSpeed = 5f;
public float crouchSpeed = 2f;
private Transform look_rot;
private float standHeight = 1.6f;
private float crouchHeight = 1f;
private bool isCrouching = false;
// Start is called before the first frame update
void Awake()
{
playerMovement = GetComponent<PlayerMovement>();
look_rot = transform.GetChild(0);
}
// Update is called once per frame
void Update()
{
SprintPlayer();
Crouch();
Debug.Log(playerMovement.speed);
}
void SprintPlayer()
{
if(Input.GetKeyDown(KeyCode.LeftShift))
{
Debug.Log("Sprint Triggered");
playerMovement.speed = sprintSpeed;
}
}
void Crouch()
{
if (Input.GetKeyDown(KeyCode.LeftControl))
{
Debug.Log("Crouch Triggered");
look_rot.localPosition = new Vector3(0f, standHeight, 0f);
playerMovement.speed = moveSpeed;
isCrouching = false;
}
else
{
look_rot.localPosition = new Vector3(0f, crouchHeight, 0f);
playerMovement.speed = moveSpeed;
isCrouching = true;
}
}
}

身体在变化,只是在你按下键的那一刻,然后它就回到了正常状态。你可以创建一个函数来检查持有/释放某些键,并修改一个bool变量,你的冲刺/蹲下函数将读取,如下所示:

public class SprintingCrouching : MonoBehaviour
{
private PlayerMovement playerMovement;
public float sprintSpeed = 10f;
public float moveSpeed = 5f;
public float crouchSpeed = 2f;
private Transform look_rot;
private float standHeight = 1.6f;
private float crouchHeight = 1f;
private bool isCrouching = false, isSprinting = false;
// Start is called before the first frame update
void Awake()
{
playerMovement = GetComponent<PlayerMovement>();
look_rot = transform.GetChild(0);
}
// Update is called once per frame
void Update()
{
GetInput();
SprintPlayer();
Crouch();
Debug.Log(playerMovement.speed);
}

void GetInput()
{
if(Input.GetKeyDown(KeyCode.LeftShift)) isSprinting = true;
if(Input.GetKeyUp(KeyCode.LeftShift)) isSprinting = false;
if(Input.GetKeyDown(KeyCode.LeftControl)) isCrouching = true;
if(Input.GetKeyUp(KeyCode.LeftControl)) isCrouching = false;
//GetKeyUp detects when a key is released.
}
void SprintPlayer()
{
if(isSprinting)
{
Debug.Log("Sprint Triggered");
playerMovement.speed = sprintSpeed;
}
else
{
playerMovement.speed = moveSpeed;
}
}
void Crouch()
{
if(isCrouching)
{
Debug.Log("Crouch Triggered");
look_rot.localPosition = new Vector3(0f, standHeight, 0f);//Maybe this is supposed to be crouchHeight instead?(because you are enabling crouch)
playerMovement.speed = moveSpeed; //Maybe you tried to use crouchSpeed here instead?
}
else
{
look_rot.localPosition = new Vector3(0f, crouchHeight, 0f); //Maybe this is supposed to be standHeight(because it's disabling crouch)
playerMovement.speed = moveSpeed;
}
}
}

还需要注意的是,为了使您的代码更清晰,您可以使用a声明类似的变量,如下所示:

int var1 = 3, var2 = 7;

我已经用unity和c#制作了一些运动系统

public Transform Body;
class Movement
{
public Transform Body;
crouchScale = new Vector3(0f, standHeight/2, 0f);
if(Input.getButtonDown(0)
{
Body.localPostion = new Vector3(0f, crouchScale, 0f);
}
else
{
return;
}

最新更新