首页 > 解决方案 > 在一个 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);
        }   
    }

这样做的最佳方法是什么?

请不要删除这个,我很愚蠢,不是编码员,只是尽力而为,真的需要这个工作

标签: c#unity3d

解决方案


我不喜欢 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单击的值,则需要使用实例变量。


推荐阅读