C# 松开按钮后,Unity将旋转返回到0
我有一个我写的小游戏,其中我有一个向前移动并左右旋转的物体。当用户按下A对象向左旋转时,如果用户按下D对象向左旋转,则在用户按下键后,如何将旋转设置为0C# 松开按钮后,Unity将旋转返回到0,c#,unity3d,C#,Unity3d,我有一个我写的小游戏,其中我有一个向前移动并左右旋转的物体。当用户按下A对象向左旋转时,如果用户按下D对象向左旋转,则在用户按下键后,如何将旋转设置为0 bool slowbtn = Input.GetKey("s"); bool right = Input.GetKey("d"); if (right == true) { rd.AddForce(sideForce * Time.deltaTime, 0, 0,ForceMode.VelocityChange); rd.tr
bool slowbtn = Input.GetKey("s");
bool right = Input.GetKey("d");
if (right == true)
{
rd.AddForce(sideForce * Time.deltaTime, 0, 0,ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, 10 , 0);
}
if (Input.GetKey("a"))
{
rd.AddForce(-sideForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, -10 , 0);
}
如果我想在用户释放键时将旋转设置回0,我正在使用此键
if (Input.GetButtonUp("a"))
{
rd.transform.eulerAngles = new Vector3(0, 0, 0);
}
if (Input.GetButtonUp("d"))
{
rd.transform.eulerAngles = new Vector3(0, 0, 0);
}
但它不起作用,我不明白为什么,而且它也阻止了我以前的代码,所以如果不向前移动,对象就是Unity的Input.GetButtonUp和Input.GetButtonDown处理“虚拟”按钮,这是您在输入设置中设置的。Input.GetKeyUp/Input.GetKeyDown是关于键盘上的键。因此,您应该选择GetKey或GetButton,但不能同时选择两者 如我所见,您希望对象在用户按下某个键的所有时间内旋转。我建议您在类中使用加法“state”属性:
private State state = State.IDLE;
private enum State {
LEFT, RIGHT, IDLE
};
更新您的代码:
if (Input.GetKeyDown(KeyCode.D)) {
state = State.RIGHT;
}
if (Input.GetKeyDown(KeyCode.A)) {
state = State.LEFT;
}
if (Input.GetKeyUp(KeyCode.D) || Input.GetKeyUp(KeyCode.A)) {
state = State.IDLE;
}
switch (state) {
case State.LEFT:
rd.AddForce(sideForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, 10, 0);
break;
case State.RIGHT:
rd.AddForce(-sideForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, -10 , 0);
break;
case State.IDLE:
rd.transform.eulerAngles = Vector3.zero;
break;
}
若干建议:
Unity的Input.GetButtonUp和Input.GetButtonDown处理在输入设置中设置的“虚拟”按钮。Input.GetKeyUp/Input.GetKeyDown是关于键盘上的键。因此,您应该选择GetKey或GetButton,但不能同时选择两者 如我所见,您希望对象在用户按下某个键的所有时间内旋转。我建议您在类中使用加法“state”属性:
private State state = State.IDLE;
private enum State {
LEFT, RIGHT, IDLE
};
更新您的代码:
if (Input.GetKeyDown(KeyCode.D)) {
state = State.RIGHT;
}
if (Input.GetKeyDown(KeyCode.A)) {
state = State.LEFT;
}
if (Input.GetKeyUp(KeyCode.D) || Input.GetKeyUp(KeyCode.A)) {
state = State.IDLE;
}
switch (state) {
case State.LEFT:
rd.AddForce(sideForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, 10, 0);
break;
case State.RIGHT:
rd.AddForce(-sideForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, -10 , 0);
break;
case State.IDLE:
rd.transform.eulerAngles = Vector3.zero;
break;
}
若干建议:
Input.GetButtonUp("a")
与
这完全行得通
您是否尝试自己调试此代码?因为通过在这一行中设置断点可以很容易地确定没有调用Input.GetButtonUp(…)
我会考虑编写这样的输入代码:
if (Input.GetKey("d"))
{
rd.AddForce(sideForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, 10, 0);
}
else if (Input.GetKey("a"))
{
rd.AddForce(-sideForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, -10, 0);
}
else
{
rd.transform.eulerAngles = new Vector3(0, 0, 0);
}
当我替换你的
Input.GetButtonUp("a")
与
这完全行得通
您是否尝试自己调试此代码?因为通过在这一行中设置断点可以很容易地确定没有调用Input.GetButtonUp(…)
我会考虑编写这样的输入代码:
if (Input.GetKey("d"))
{
rd.AddForce(sideForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, 10, 0);
}
else if (Input.GetKey("a"))
{
rd.AddForce(-sideForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
rd.transform.eulerAngles = new Vector3(0, -10, 0);
}
else
{
rd.transform.eulerAngles = new Vector3(0, 0, 0);
}