Unity C# 不接受某些输入
Unity C# Not taking in certain Input
我正在创建一个 FPS 游戏,我的玩家有能力,她的终极技能是 Valorant 中 Jett 的终极技能(她的武器切换为可以向敌人投掷的 5 把刀)我已经设法将武器切换为刀具但是当我按下鼠标 Left-Click 时什么也没有发生。我禁用了控制枪支的脚本,这样玩家就可以发射子弹、使用枪口闪光灯等,但无论它是启用还是禁用,刀具都不起作用。我添加了调试日志,但没有调用它们,我使用与扔刀相同的按钮开枪。我也在没有 'readyToThrow' 变量和 'totalThrows' 变量的情况下测试了它。
更新方法:
void Update()
{
if (Time.time >= QabilityTimer && Input.GetKeyDown(KeyCode.Q))
{
Dash();
QabilityTimer = Time.time + Qcooldown;
}
if (Time.time >= EabilityTimer && Input.GetKeyDown(KeyCode.E))
{
SpeedBoost();
EabilityTimer = Time.time + Ecooldown;
}
if (meterButton.currentProgress == meterButton.maxProgress)
{
ultReady = true;
// Debug.Log("ult ready");
if (Input.GetKeyDown(KeyCode.X))
{
//disable the gun script whilst ult is active.
GameObject gun = GameObject.Find("Guns");
gun.GetComponent<Guns>().enabled = false;
weaponSelection.EunhaUltKnife();
EunhaUltimate();
}
}
if (ultActive)
{
ultTimer -= Time.deltaTime;
}
if (ultTimer <= 0)
{
ResetUltimate();
}
}
最终方法:
public void EunhaUltimate()
{
ultActive = true;
if (Input.GetKeyDown(KeyCode.Mouse0) && readyToThrow && totalThrows > 0)
{
Debug.Log("working");
readyToThrow = false;
GameObject projectile = Instantiate(objectToThrow, attackPoint.position, cam.rotation);
Rigidbody projectileRB = projectile.GetComponent<Rigidbody>();
Vector3 forceToAdd = cam.transform.forward * throwForce + transform.up * throwUpwardForce;
projectileRB.AddForce(forceToAdd, ForceMode.Impulse);
totalThrows--;
Invoke(nameof(ReserThrow), throwCooldown);
}
}
尝试使用 Input.GetKey(KeyCode.Mouse0) 或 Input.GetKeyUp(KeyCode.Mouse0) 而不是 Input.GetKeyDown(KeyCode.Mouse0).
看来只有按住 X
才能进入 EunhaUltimate()
:
if (meterButton.currentProgress == meterButton.maxProgress)
{
ultReady = true;
// Debug.Log("ult ready");
if (Input.GetKeyDown(KeyCode.X))
{
//disable the gun script whilst ult is active.
GameObject gun = GameObject.Find("Guns");
gun.GetComponent<Guns>().enabled = false;
weaponSelection.EunhaUltKnife();
EunhaUltimate();
}
}
尝试将对 EunhaUltimate()
的调用移到该 IF 语句之外。你需要有一个触发器来显示你何时按下 X 来触发终极技能,但看起来你目前正在 EunhaUltimate()
内使用 ultActive = true;
行进行此操作。
除了设置 ultActive = true;
,你的 EunhaUltimate()
似乎只是检查键盘按下,所以我建议重写你的第一个片段如下:
void Update()
{
if (Time.time >= QabilityTimer && Input.GetKeyDown(KeyCode.Q))
{
Dash();
QabilityTimer = Time.time + Qcooldown;
}
if (Time.time >= EabilityTimer && Input.GetKeyDown(KeyCode.E))
{
SpeedBoost();
EabilityTimer = Time.time + Ecooldown;
}
if (meterButton.currentProgress == meterButton.maxProgress)
{
ultReady = true;
// Debug.Log("ult ready");
if (Input.GetKeyDown(KeyCode.X))
{
//disable the gun script whilst ult is active.
GameObject gun = GameObject.Find("Guns");
gun.GetComponent<Guns>().enabled = false;
weaponSelection.EunhaUltKnife();
ultActive = true; // <--- This is a change
}
}
if (ultActive)
{
EunhaUltimate(); // <-- this is a change
ultTimer -= Time.deltaTime;
}
if (ultTimer <= 0)
{
ResetUltimate();
}
}
我正在创建一个 FPS 游戏,我的玩家有能力,她的终极技能是 Valorant 中 Jett 的终极技能(她的武器切换为可以向敌人投掷的 5 把刀)我已经设法将武器切换为刀具但是当我按下鼠标 Left-Click 时什么也没有发生。我禁用了控制枪支的脚本,这样玩家就可以发射子弹、使用枪口闪光灯等,但无论它是启用还是禁用,刀具都不起作用。我添加了调试日志,但没有调用它们,我使用与扔刀相同的按钮开枪。我也在没有 'readyToThrow' 变量和 'totalThrows' 变量的情况下测试了它。
更新方法:
void Update()
{
if (Time.time >= QabilityTimer && Input.GetKeyDown(KeyCode.Q))
{
Dash();
QabilityTimer = Time.time + Qcooldown;
}
if (Time.time >= EabilityTimer && Input.GetKeyDown(KeyCode.E))
{
SpeedBoost();
EabilityTimer = Time.time + Ecooldown;
}
if (meterButton.currentProgress == meterButton.maxProgress)
{
ultReady = true;
// Debug.Log("ult ready");
if (Input.GetKeyDown(KeyCode.X))
{
//disable the gun script whilst ult is active.
GameObject gun = GameObject.Find("Guns");
gun.GetComponent<Guns>().enabled = false;
weaponSelection.EunhaUltKnife();
EunhaUltimate();
}
}
if (ultActive)
{
ultTimer -= Time.deltaTime;
}
if (ultTimer <= 0)
{
ResetUltimate();
}
}
最终方法:
public void EunhaUltimate()
{
ultActive = true;
if (Input.GetKeyDown(KeyCode.Mouse0) && readyToThrow && totalThrows > 0)
{
Debug.Log("working");
readyToThrow = false;
GameObject projectile = Instantiate(objectToThrow, attackPoint.position, cam.rotation);
Rigidbody projectileRB = projectile.GetComponent<Rigidbody>();
Vector3 forceToAdd = cam.transform.forward * throwForce + transform.up * throwUpwardForce;
projectileRB.AddForce(forceToAdd, ForceMode.Impulse);
totalThrows--;
Invoke(nameof(ReserThrow), throwCooldown);
}
}
尝试使用 Input.GetKey(KeyCode.Mouse0) 或 Input.GetKeyUp(KeyCode.Mouse0) 而不是 Input.GetKeyDown(KeyCode.Mouse0).
看来只有按住 X
才能进入 EunhaUltimate()
:
if (meterButton.currentProgress == meterButton.maxProgress)
{
ultReady = true;
// Debug.Log("ult ready");
if (Input.GetKeyDown(KeyCode.X))
{
//disable the gun script whilst ult is active.
GameObject gun = GameObject.Find("Guns");
gun.GetComponent<Guns>().enabled = false;
weaponSelection.EunhaUltKnife();
EunhaUltimate();
}
}
尝试将对 EunhaUltimate()
的调用移到该 IF 语句之外。你需要有一个触发器来显示你何时按下 X 来触发终极技能,但看起来你目前正在 EunhaUltimate()
内使用 ultActive = true;
行进行此操作。
除了设置 ultActive = true;
,你的 EunhaUltimate()
似乎只是检查键盘按下,所以我建议重写你的第一个片段如下:
void Update()
{
if (Time.time >= QabilityTimer && Input.GetKeyDown(KeyCode.Q))
{
Dash();
QabilityTimer = Time.time + Qcooldown;
}
if (Time.time >= EabilityTimer && Input.GetKeyDown(KeyCode.E))
{
SpeedBoost();
EabilityTimer = Time.time + Ecooldown;
}
if (meterButton.currentProgress == meterButton.maxProgress)
{
ultReady = true;
// Debug.Log("ult ready");
if (Input.GetKeyDown(KeyCode.X))
{
//disable the gun script whilst ult is active.
GameObject gun = GameObject.Find("Guns");
gun.GetComponent<Guns>().enabled = false;
weaponSelection.EunhaUltKnife();
ultActive = true; // <--- This is a change
}
}
if (ultActive)
{
EunhaUltimate(); // <-- this is a change
ultTimer -= Time.deltaTime;
}
if (ultTimer <= 0)
{
ResetUltimate();
}
}