unity2D C# - 玩家必须按两个开关才能打开门

时间:2015-04-01 15:15:41

标签: c# unity3d triggers 2d

基本上我有一个门触发事件,如果玩家按下开关然后门打开。我希望这样做,以便如果相关的门需要两个开关打开...那么只有在按下两个开关时它才会打开。这是我的InteractSwitch的代码

public class InteractSwitch : MonoBehaviour
{

    Animator animator;
    public DoorEventTrigger[] doorTriggers;
    public bool pressed;
    private bool down;
    // Use this for initialization
    void Start ()
    {
        animator = GetComponent <Animator> ();
    }

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

    }

    void OnCollisionEnter2D (Collision2D target)
    {
        if (target.gameObject.tag == "Player") {
            down = true;
            animator.SetInteger ("SwitchTrig", 1);

            foreach (DoorEventTrigger trigger in doorTriggers)

                if (trigger != null)
                    trigger.Toggle (true);
        }

    }

当触发此事件检查播放器时,显示已按下开关然后将bool发送到一个名为Toggle的函数,该函数处理门的操作。

接下来我有我的DoorEventTrigger事件,它检查bool发送的是否为真。如果是,那么门将打开。这是我被困的地方。如代码中所示,我创建了一个InteractSwitch数组,它存储了我希望玩家在门打开之前按下的开关量。然后我说如果长度> 1然后这个if条件为真,并且这里将添加一些代码,只有当玩家选择了InteractSwitch [] .length开关时才会打开门。我的问题是如何检查此DoorEventTrigger的InteractSwitch的所有实例是否等于true?

这是我的DoorEventTrigger代码

public void Toggle (bool val)
{
        if (switchTriggers.Length > 1) {
        Debug.Log ("HAS THIS ACTUALLY DONE ANYTHING");
        door.Open ();
    } 
    else
    {

        if (val)

            door.Open ();
        else

            door.Close ();
    }


}

}

1 个答案:

答案 0 :(得分:0)

我提出的解决方案远不是我认为最有效的答案,因为每次添加新开关时都需要代码,但这就是我所拥有的

首先在InteractSwitch脚本中,bool是公共的,因此可以通过switchtriggers访问它

public bool down;

接下来是Toggle()方法的附加代码

public void Toggle (bool val)
{
        if (switchTriggers.Length > 1) {
            if((switchTriggers[0].down == true) && (switchTriggers[1].down == true)){
        Debug.Log ("THIS ACTUALLY DONE SOMETHING!");
        door.Open ();
        }
    } 
    else
    {

        if (val)

            door.Open ();
        else

            door.Close ();
    }


}

现在来自公众SwitchInteract [];我知道数组中元素的确切数量,但是可以通过switchTriggers.length来检查;知道数组中有两个元素我的条件是switchTriggers.Length&gt; 1是正确的,所以接下来我取数组中的两个元素并检查它们是否已关闭;如果BOTH已关闭,则条件继续,Debug.Log()验证这一点。最后调用Open()打开了门。