2016-02-05 22 views
4

我有一扇门,门的两侧都有按钮。每个按钮都应该打开门。如何在需要时打开门

当我按下Button1时,门打开,再次按下,门关闭。但是,如果我按Button1然后按Button2,门将再次打开,而不是关闭。

enter image description here

我打开/关闭使用动画。搞不明白,什么是错的

+1

此脚本是否附加到两个按钮gameobjects? –

+1

''sDoorClosed'是一个私人领域,第二个按钮甚至可以访问这个领域?或者是这个脚本连接到两个按钮? –

+0

是的,附在两个按钮上的脚本。这是错的吗? – dima

回答

4

它的关键是你

不使用静态变量

在这种情况下

您很高兴知道该解决方案很简单。有一个脚本调用AttachToDoor

public void AttachToDoor() 
{ 
private bool isOpen; 
public float doorSpeed; 
etc etc 
public void OpenCloseDoor() 
    { 
    your code to open/close a door 
    } 
} 

AttachToDoor上你的门。通知OpenCloseDoor()标记为public

接下来有另一个独立的脚本,AttachToButton

public void AttachToButton() 
{ 
public AttachToDoor amazaingDoorScript; 
etc etc 
void Update() 
{ 
    if (Input.GetButton("Fire1")) 
    if (DoPlayerLookAtButton() && isAnimationReadyToPlay) 
    amazaingDoorScript.OpenCloseDoor(); 
} 
} 

拖动到任何你的 “按钮” 的AttachToButton

看看检查器,并注意插槽“amazaingDoorScript”。

从字面上将门拉到该插槽,并将AttachToDoor连接到“amazaingDoorScript”变量。

但是请注意...您可以按照您的需要,按照许多按钮来操作

你犯了一个按钮,任何时候,只要把AttachToButton按钮

你甚至可以有另一种脚本,只是作为一个例子,打开随机关上门:

public AttachToDoor amazaingDoorScript; ... 
    Invoke("test",Random.Range(5f,10f)); ... 
    private void test() 
    { 
    // have a ghost mess with the door occasionally 
    amazaingDoorScript.OpenCloseDoor(); 
    Invoke("test",Random.Range(5f,10f)); 
    } 

这是一个团结真正的基本概念,一旦你能做到这一点,你可以做任何事情。请享用!


抓住机会,学习如何使用UnityEvent。

如果您正在学习Unity,这是了解UnityEvent的好机会。使用UnityEvent实际上是Unity日常工程的核心。

这里是一个优秀的教程:https://stackoverflow.com/a/36249404/294884

上的按钮,这样做

public void AttachToButton() 
{ 
public UnityEvent buttonClicked; 
void Update() 
{ 
    if (Input.GetButton("Fire1")) 
    if (DoPlayerLookAtButton() && isAimationReadyToPlay) 
    { 
    Debug.Log("Button pressed!"); 
    if (buttonClicked!=null) buttonClicked.Invoke(); 
    } 
} 
} 

点击保存。运行游戏,并注意当在游戏中按下按钮时,您将看到日志“按下按钮!”。

现在,看在编辑器中,在您的按钮

注意实际上是在编辑,你增加了一个惊人的随意拖动和你AttachToButton的底部掉区域

现在停止游戏,并试试这个。看看你的其中一个按钮。查看事件buttonClicked的拖放区域。实际上,把你的门开到那个 ...并且选择例程OpenCloseDoor

运行游戏并观察会发生什么。瞧!令人惊叹的权利?

+0

我不确定我的理解,但它的工作原理,谢谢=)我会尝试 找出它 – dima

+0

您的方法,感谢您的建议) – dima