问题是,标志boolautoRotate
仅在第二次按下/单击鼠标中间按钮后才发生变化,而不是在第一次按下/单击后。
public class ConeRotation : MonoBehaviour
{
public float rotSpeed = 250;
public float damping = 10;
private float desiredRot;
private bool autoRotate = false;
void Start()
{
desiredRot = transform.eulerAngles.z;
}
void Update()
{
if (Input.GetMouseButton(0))
{
if (Input.mousePosition.x > Screen.width / 2) desiredRot -= rotSpeed * Time.deltaTime;
else desiredRot += rotSpeed * Time.deltaTime;
}
if (Input.GetMouseButton(1))
{
if (Input.mousePosition.x > Screen.width / 2) desiredRot -= rotSpeed * Time.deltaTime;
else desiredRot -= rotSpeed * Time.deltaTime;
}
if (Input.GetMouseButton(2))
{
autoRotate = !autoRotate;
}
if (autoRotate)
{
desiredRot += rotSpeed * Time.deltaTime;
}
var desiredRotQ = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, desiredRot);
transform.rotation = Quaternion.Lerp(transform.rotation, desiredRotQ, Time.deltaTime * damping);
}
}
在这部分中,我需要按鼠标的中间按钮两次来改变标志从假到真,然后从真到假,我想在一次按下/点击中间按钮。
if (Input.GetMouseButton(2))
{
autoRotate = !autoRotate;
}
在原始输入系统中有三种读取按钮的方法。Button" Button"Button Up"
在处理鼠标按钮时,如果您想读取按下的鼠标中键,您可以简单地查找每个GetMouseButtonDown(2)
,如下所示:
if (Input.GetMouseButtonDown(2))
{
autoRotate = !autoRotate;
}
在当前代码中,每帧读取鼠标按钮状态。代码看到鼠标按钮仍然被按下(GetMouseButton(2)
告诉你按钮是否仍然被按下),然后翻转autoRotate
的值。当你需要按两次按钮时,你所观察到的可能只是偶然事件,autoRotate
的值每一帧都在快速变化,它看起来就像需要按两次(或更多次)才能获得你期望的值。
另一个问题,你确定剩下的代码是正确的吗?看起来有些+ive和-ive的符号不太对。也许你的意思是?
if (Input.GetMouseButton(1))
{
if (Input.mousePosition.x > Screen.width / 2)
desiredRot += rotSpeed * Time.deltaTime;
else
desiredRot -= rotSpeed * Time.deltaTime;
}