In a scene I have multiple doors which can be opened by choice by the player but if a door is selected and opened all the remaining doors should be closed and further cannot be opened. What can be the best way to implement this?
I have thought about using a key which is destroyed after one use but can make the situation more complicated than it is. Any help is appreciated and thanks for reading.
Perhaps make a “doorhandler” that has a list of all doors, when the door is picked, it calls back to the doorhandler to tell all other doors to close, and lock them. So something like…
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DoorHandler : MonoBehaviour {
public List<DoorScript> doorsIn;
public bool canOpen;
private DoorScript doorOpen;
public void DoorOpenAction(DoorScript doorIn){
canOpen = false;
doorOpen = doorIn;
foreach (DoorScript door in doorsIn) {
if(doorOpen != door){
door.CloseDoor ();
}
}
}
}
with the door class looking something like…
public class DoorScript : MonoBehaviour {
public DoorHandler handlerIn;
public void OpenDoor(){
if(handlerIn.canOpen){
//Open the door and whatnot, but also tell handler to close all other doors
handlerIn.DoorOpenAction();
}
}
public void CloseDoor(){
//Close the Door.
}
}
As you can see, the door opening calls the handler, makes it so other doors can’t open and are closed. If you want to reset the canOpen value later in some way, storing which door is the one that is open should make it easier for other tasks you may need