C#unity if语句逻辑

时间:2017-06-26 21:21:37

标签: c# if-statement unity3d logic

我最近开始学习用C#编写Unity代码;在以下脚本中尝试根据鼠标的位置启用和禁用对象(敌人)。

问题是代码在启用对象时工作正常,但我无法弄清楚如何在激活后禁用它,以便当鼠标来回移动时对象出现和消失 - 进出范围。如果您有解决方案,请告诉我。谢谢!

using UnityEngine; 
using System.Collections;

public class Paddle : MonoBehaviour
{

    public GameObject enemy;

    // Use this for initialization
    void Start()
    {

        enemy.SetActive(false);
    }

    // Update is called once per frame
    void Update()
    {

        Vector3 paddlePos = new Vector3(8f, this.transform.position.y, 0f);

        float mousePosInBlocks = Input.mousePosition.x / Screen.width * 16;

        paddlePos.x = Mathf.Clamp(mousePosInBlocks, 6f, 8f);

        this.transform.position = paddlePos;

        if (mousePosInBlocks < 6f)
        {
            print("1");

        }
        else if (mousePosInBlocks <= 6.5f)
        {
            print("2");

            enemy.SetActive(true);


        }
        else if (mousePosInBlocks <= 7.5f)
        {
            print("3");

        }
        else
        {
            print("4");
        }
    }
}

2 个答案:

答案 0 :(得分:4)

如果您从不致电enemy.SetActive(false);,您希望该对象被禁用?它只会在您的Start方法中调用,但会被enemy.SetActive(true);覆盖,而Update方法每帧都会调用此方法。

我不确定您的对象何时应被禁用,只需在相应的if语句中添加enemy.SetActive(false);

答案 1 :(得分:1)

你必须添加代码行来禁用更新类中的对象,因为你说当你将鼠标移出范围时应该禁用它,我猜测该行应该放在你的其他对象中

using UnityEngine; 
using System.Collections;

public class Paddle : MonoBehaviour
{

    public GameObject enemy;

    // Use this for initialization
    void Start()
    {

        enemy.SetActive(false);
    }

    // Update is called once per frame
    void Update()
    {

        Vector3 paddlePos = new Vector3(8f, this.transform.position.y, 0f);

        float mousePosInBlocks = Input.mousePosition.x / Screen.width * 16;

        paddlePos.x = Mathf.Clamp(mousePosInBlocks, 6f, 8f);

        this.transform.position = paddlePos;

        if (mousePosInBlocks < 6f)
        {
            print("1");

        }
        else if (mousePosInBlocks <= 6.5f)
        {
            print("2");

            enemy.SetActive(true);


        }
        else if (mousePosInBlocks <= 7.5f)
        {
            print("3");

        }
        else
        {
          enemy.SetActive(false);
            print("4");
        }
    }
}

在任何情况下,您只需要在if,if-else或其他statament中添加enemy.SetActive(false);,确保它在其中,否则它将在每个帧中被调用并且它将保持禁用状态