我是Unity的新手,而其中的许多校长我只是空白。
我建立了一个对话系统,并且运行良好,但是我想做一个确认框。
我设法将确认框拉起,但是我似乎无法弄清楚如何等待按“是/否”按钮之一,然后将代码以正确的布尔值返回给对话管理器。 / p>
现在,该代码会在对话框后推。这是预期的。
我尝试了一个枚举器,但是我一定做错了,因为没关系。
我只是清理了代码以尝试从头开始。
public bool AskForTakingMoney(){
takingMoneyBox.SetActive(true);
goldText.text = "Current Gold: " + GameManager.instance.currentGold.ToString() + "G";
questionText.text = "Pay the " + DialogManager.instance.goldAmount + "G?";
//Wait here until yes or no button pushed
return saysYes;
}
public void SaysYes(){
saysYes = true;
selectedAnswer = true;
takingMoneyBox.SetActive(false);
}
public void SaysNo(){
saysYes = false;
selectedAnswer = true;
takingMoneyBox.SetActive(false);
}
我真的只需要返回功能在按下“是”或“否”按钮之前不返回。
我完全不知所措。
答案 0 :(得分:1)
如果要显示弹出窗口,则弹出窗口应负责接下来发生的事情。
因此您的AskForTakingMoney
永远不要返回值。相反,您需要为“是”和“否”按钮分配onclick
事件。
您的代码应该简单地是:
public void AskForTakingMoney(){
takingMoneyBox.SetActive(true);
goldText.text = "Current Gold: " + GameManager.instance.currentGold.ToString() + "G";
questionText.text = "Pay the " + DialogManager.instance.goldAmount + "G?";
}
public void SaysYes(){
takingMoneyBox.SetActive(false);
// Your withdraw money code here.
}
public void SaysNo(){
takingMoneyBox.SetActive(false);
}
然后从编辑器中,单击“是”按钮。 您应该看到一个onclick字段,如图中的字段。单击加号,然后将您的MonoBehaviour对象拖动到包含上述功能的代码中。 将其拖入后,您应该能够从“ YourScriptName”->“ SaysYes()”
下显示的下拉列表中选择SaysYes
对“无按钮”执行相同操作,您应该都准备就绪。
答案 1 :(得分:0)
制作两个按钮,在AskForTakingMoney()结束时将它们设置为活动,使这些按钮指向SaysYes();。和SaysNo();
编辑:如果需要澄清,请发表评论。我可能不太了解您。您甚至还设置了按钮吗?
答案 2 :(得分:0)
您要么需要的功能就是不在乎返回所单击的内容,要么通过检查selectedAnswer变量来检查是否已按下按钮(在更新方法或协程中)每一帧。
或者您可以在单独的线程中运行一些代码,并使用WaitHandle的代码,使线程暂停直到按下按钮。
使用您的代码的示例:
using System.Threading;
using UnityEngine;
public class Manager : MonoBehaviour
{
EventWaitHandle handle = new EventWaitHandle(false,EventResetMode.AutoReset);
Thread _thread;
public void StartThread()
{
_thread = new Thread(BackgroundThreadFunction);
_thread.Start();
}
public void BackgroundThreadFunction()
{
if (AskForTakingMoney())
{
//Yes
}
else
{
//No
}
}
public bool AskForTakingMoney()
{
takingMoneyBox.SetActive(true);
goldText.text = "Current Gold: " + GameManager.instance.currentGold.ToString() + "G";
questionText.text = "Pay the " + DialogManager.instance.goldAmount + "G?";
//Wait here until yes or no button pushed
handle.WaitOne();
return saysYes;
}
public void SaysYes()
{
saysYes = true;
selectedAnswer = true;
takingMoneyBox.SetActive(false);
handle.Set();
}
public void SaysNo()
{
saysYes = false;
selectedAnswer = true;
takingMoneyBox.SetActive(false);
handle.Set();
}
}