我有一扇门,门的两边都有按钮。每个按钮都应该打开门。
当我按下 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
拖到您的任何“按钮”上。
查看 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();
}
}
}
点击保存。运行游戏,注意在游戏中按下按钮时,您会看到日志“Button pressed!”。
现在,查看编辑器,查看您的按钮。
请注意,实际上在编辑器中,您在 AttachToButton< 的底部添加了一个惊人的拖放区域/
.
现在停止游戏,试试这个。看看你的一个按钮。查看事件 buttonClicked
的拖放区域。事实上,将你的门拖到那个 ... 并选择例程 OpenCloseDoor
。
运行游戏并观察会发生什么。瞧!太棒了吧?
关于c# - 如何在我需要时打开门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35222818/