我有一扇门,门的两侧都有按钮。每个按钮都应该打开门。如何在需要时打开门
当我按下Button1时,门打开,再次按下,门关闭。但是,如果我按Button1然后按Button2,门将再次打开,而不是关闭。
我打开/关闭使用动画。搞不明白,什么是错的
我有一扇门,门的两侧都有按钮。每个按钮都应该打开门。如何在需要时打开门
当我按下Button1时,门打开,再次按下,门关闭。但是,如果我按Button1然后按Button2,门将再次打开,而不是关闭。
我打开/关闭使用动画。搞不明白,什么是错的
它的关键是你
。
您很高兴知道该解决方案很简单。有一个脚本调用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));
}
这是一个团结真正的基本概念,一旦你能做到这一点,你可以做任何事情。请享用!
如果您正在学习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
。
运行游戏并观察会发生什么。瞧!令人惊叹的权利?
此脚本是否附加到两个按钮gameobjects? –
''sDoorClosed'是一个私人领域,第二个按钮甚至可以访问这个领域?或者是这个脚本连接到两个按钮? –
是的,附在两个按钮上的脚本。这是错的吗? – dima