c# - 在一个 if 语句中设置布尔值,以便另一个 if 语句可以检查它是否为真
问题描述
基本上,这段代码检测鼠标在屏幕的哪一侧,并在按下鼠标右键时旋转相机来查看它,基本上它瞄准了玩家正在看的方向。
我遇到的问题是它也会根据鼠标的位置向后旋转,如果玩家向右看并按下瞄准按钮,相机会旋转 20 度,然后当按钮移动时向后旋转 -20 度向上,它工作正常,直到你向右瞄准,按下瞄准按钮后,向左看,这将旋转 20 度,然后相机将再旋转 20 度,总共 40 而不是它应该的 0是
所以我决定如何克服这个问题是通过设置一个布尔值,它基本上告诉你瞄准哪一边,并将根据该值移动,问题是我不知道如何从 if 语句内部设置布尔值,所以其他 if 语句可以阅读。
我尝试按照您在下面看到的方式进行操作,但基本上它不起作用。我还尝试将第二个 if 语句放在第一个 if 语句中,但它完全忽略了它
这就是我正在做的
bool isCameraRight = true;
if (Input.GetMouseButtonDown(1) && mouse.x < Screen.width / 2)
{
//Code
isCameraRight = false;
}
if (!isCameraRight && Input.GetMouseButtonUp(1))
{
//Code
}
这是我也尝试过但没有用的东西,它总是忽略第二个 if 语句
if (Input.GetMouseButtonDown(1) && mouse.x < Screen.width / 2)
{
//Code
if (!isCameraRight && Input.GetMouseButtonUp(1))
{
//Code
}
}
这就是我的 Unity 脚本中最终代码的样子
private void Update()
{
var mouse = new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y);
bool isCameraRight = true;
if (Input.GetMouseButtonDown(1) && mouse.x > Screen.width / 2)
{
this.transform.Rotate(0, Mathf.Lerp(0, 25, 15), 0);
cinemachineVirtualCamera.m_Lens.FieldOfView = Mathf.Lerp(40, 35, 37);
isCameraRight = true;
}
if (isCameraRight && Input.GetMouseButtonUp(1))
{
this.transform.Rotate(0, Mathf.Lerp(0, -25, 15), 0);
cinemachineVirtualCamera.m_Lens.FieldOfView = Mathf.Lerp(35, 40, 37);
}
if (Input.GetMouseButtonDown(1) && mouse.x < Screen.width / 2)
{
this.transform.Rotate(0, Mathf.Lerp(0, -25, 15), 0);
cinemachineVirtualCamera.m_Lens.FieldOfView = Mathf.Lerp(40, 35, 37); ;
isCameraRight = false;
}
if (!isCameraRight && Input.GetMouseButtonUp(1))
{
this.transform.Rotate(0, Mathf.Lerp(0, 25, 15), 0);
cinemachineVirtualCamera.m_Lens.FieldOfView = Mathf.Lerp(35, 40, 37);
}
}
这样做的最佳方法是什么?
请不要删除这个,我很愚蠢,不是编码员,只是尽力而为,真的需要这个工作
解决方案
我不喜欢 Unity,但我认为您首先需要isCameraRight
从一开始就简单地设置,然后只需使用该变量,无需多次检查相同的东西。
private void Update()
{
var mouse = new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y);
bool isCameraRight = mouse.x > Screen.width / 2;
if (isCameraRight)
{
if (Input.GetMouseButtonDown(1))
{
this.transform.Rotate(0, Mathf.Lerp(0, 25, 15), 0);
cinemachineVirtualCamera.m_Lens.FieldOfView = Mathf.Lerp(40, 35, 37);
}
else if (Input.GetMouseButtonUp(1))
{
this.transform.Rotate(0, Mathf.Lerp(0, -25, 15), 0);
cinemachineVirtualCamera.m_Lens.FieldOfView = Mathf.Lerp(35, 40, 37);
}
}
else
{
if (Input.GetMouseButtonDown(1))
{
this.transform.Rotate(0, Mathf.Lerp(0, -25, 15), 0);
cinemachineVirtualCamera.m_Lens.FieldOfView = Mathf.Lerp(40, 35, 37); ;
}
else if (Input.GetMouseButtonUp(1))
{
this.transform.Rotate(0, Mathf.Lerp(0, 25, 15), 0);
cinemachineVirtualCamera.m_Lens.FieldOfView = Mathf.Lerp(35, 40, 37);
}
}
}
如果您需要存储上一次isCameraRight
单击的值,则需要使用实例变量。