基本上我有一个门触发事件,如果玩家按下开关然后门打开。我希望这样做,以便如果相关的门需要两个开关打开...那么只有在按下两个开关时它才会打开。这是我的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 ();
}
}
}
答案 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()打开了门。