威力 在Unity中实现《The Binding of Isaac》风格的移动和射击功能时,您可能希望将移动和射击的输入分开。正如您所描述的,当使用Input.GetAxisRaw(“Horizontal”)和Input.GetAxisRaw(“Vertical”)时,这些函数会同时响应WASD键和箭头键,因为默认情况下这些键都绑定到了水平轴和垂直轴上。
为了解决这个问题,您可以采取以下步骤:
- 分离移动和射击的输入:
- 对于移动,继续使用Input.GetAxisRaw(“Horizontal”)和Input.GetAxisRaw(“Vertical”),但仅在WASD键被按下时处理移动逻辑。
- 对于射击,单独检测箭头键的输入,而不使用轴。
- 修改输入管理器(可选):
- 打开Unity编辑器中的Edit > Project Settings > Input Manager。
- 找到"Horizontal"和"Vertical"轴,并移除或更改与箭头键相关的绑定,这样它们就不会再影响移动。
- 您可以添加新的输入项专门用于射击,但这通常不是必需的,因为您可以在脚本中直接检测箭头键。
- 在脚本中处理输入:
- 在您的玩家控制脚本中,使用Input.GetKey(KeyCode.UpArrow)、Input.GetKey(KeyCode.DownArrow)等来检测箭头键的按下情况,并触发射击逻辑。
- 确保移动逻辑仅依赖于WASD键的输入。
以下是一个简化的示例代码片段,展示了如何在脚本中分离移动和射击的输入处理:
void Update()
{
// 移动逻辑:仅使用WASD键
float horizontal = Input.GetAxisRaw("Horizontal"); // WASD或箭头键(如果未修改输入管理器)
float vertical = Input.GetAxisRaw("Vertical"); // WASD或箭头键(如果未修改输入管理器)
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D))
{
// 处理移动...
Move(horizontal, vertical);
}
// 射击逻辑:仅使用箭头键
if (Input.GetKey(KeyCode.UpArrow))
{
// 向上射击...
Shoot(Vector2.up);
}
else if (Input.GetKey(KeyCode.DownArrow))
{
// 向下射击...
Shoot(Vector2.down);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
// 向左射击...
Shoot(Vector2.left);
}
else if (Input.GetKey(KeyCode.RightArrow))
{
// 向右射击...
Shoot(Vector2.right);
}
}
void Move(float horizontal, float vertical)
{
// 实现移动逻辑...
}
void Shoot(Vector2 direction)
{
// 实现射击逻辑...
}
请注意,这个示例假设您已经有一个用于处理移动和射击的基本框架。您可能需要根据您的具体实现调整这些函数和逻辑。此外,如果您修改了输入管理器以分离移动和射击的按键绑定,那么您的代码可能需要进行相应的调整以反映这些更改。