我有一扇门,门的两边都有按钮。每个按钮都应该打开门。

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

c# - 需要时如何开门-LMLPHP

我使用动画打开/关闭。看不懂,怎么回事

最佳答案

关键是你
不要使用静态变量
在这种情况下。
您会很高兴知道解决方案很简单。有一个名为 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 拖到您的任何“按钮”上。
查看 Inspector,并注意插槽“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。
如果您正在学习 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
运行游戏,看看会发生什么。瞧!很惊人吧?

关于c# - 需要时如何开门,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35222818/

10-13 09:23