我正在使用SetDownState()
代码,因为我需要播放器同时按下两个按钮。问题是,只要button
为SetDownState == true
,它就会不断更新。
当按下按钮时会发生以下脚本运行。但按钮仍在运行。因此,如果条件发生变化,最终会让玩家失败,即使他们赢了。
这是“按钮”脚本(从资产样本中获取):
namespace UnityStandardAssets.CrossPlatformInput
{
public class YayButtonTouch : MonoBehaviour
{
public bool yayButtonTouch = false;
public string Name;
public void SetDownState()
{
yayButtonTouch = true;
}
public void SetUpState()
{
yayButtonTouch = false;
}
}
}
以下是代码的工作原理。根据条件,它会改变按钮的功能。满足条件后,它会运行WinningScript()
或Losing Script()
你在这里看不到,但Win条件会改变CrowdTypes
void Update ()
{
if (cm.crowdOptions == CrowdManager.CrowdTypes.None) {
if (yt.yayButtonTouch == true)
{
if (bt.booButtonTouch == true)
{
iyt.WinningScript();
}
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamA) {
if (sm.teamScored == ScoreManager.teamsScore.TeamAScore) {
if (yt.yayButtonTouch == true)
{
iyt.WinningScript();
}
if (bt.booButtonTouch == true)
{
iyt.LosingScript();
}
} else if (sm.teamScored != ScoreManager.teamsScore.TeamAScore) {
if (yt.yayButtonTouch == true)
{
iyt.LosingScript();
}
if (bt.booButtonTouch == true)
{
iyt.WinningScript();
}
}
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamB) {
if (sm.teamScored == ScoreManager.teamsScore.TeamBScore) {
if (yt.yayButtonTouch == true)
{
iyt.WinningScript();
}
if (bt.booButtonTouch == true)
{
iyt.LosingScript();
}
} else if (sm.teamScored != ScoreManager.teamsScore.TeamBScore) {
if (yt.yayButtonTouch == true)
{
iyt.LosingScript();
}
if (bt.booButtonTouch == true)
{
iyt.WinningScript();
}
}
}
我希望我能够很好地解释这一点。
答案 0 :(得分:1)
这可能是你的解决方案:
WHEN button A is touched DOWN,
if button B is pressedDown,
... code for "both down"
所以你需要事件或其他任何“按下第一个按钮”
我不知道你在那里使用了什么奇怪的按钮库,但这是一般的算法解决方案:O
另一种更通用的方法是:
当任何按钮完全向上或向下移动时, 看看这两个按钮。 实际上是两个按钮现在“向下” 如果是这样,..代码为“两个下来”
这也会奏效。希望这有帮助
一个HAS TO USE子程序用于这么长的代码段,它不会像你拥有的那样编译。此外 - 永远不要因为任何原因使用“else-if”。
你必须改变你的代码:
void Update ()
{
if (cm.crowdOptions == CrowdManager.CrowdTypes.None)
{
SituationA();
return;
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamA)
{
SituationB();
return;
}
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamB)
{
SituationC();
return;
}
// OR, USE A SWITCH STATEMENT FOR THOSE THREE. TRY BOTH WAYS!
}
private void SituationA()
{
if (yt.yayButtonTouch == true)
if (bt.booButtonTouch == true)
iyt.WinningScript();
}
private void SituationB()
{
if (sm.teamScored == ScoreManager.teamsScore.TeamAScore)
{
if (yt.yayButtonTouch == true) iyt.WinningScript();
if (bt.booButtonTouch == true) iyt.LosingScript();
}
else
{
if (yt.yayButtonTouch == true) iyt.LosingScript();
if (bt.booButtonTouch == true) iyt.WinningScript();
}
}
private void SituationC()
{
if (sm.teamScored == ScoreManager.teamsScore.TeamBScore)
{
if (yt.yayButtonTouch == true) iyt.WinningScript();
if (bt.booButtonTouch == true) iyt.LosingScript();
}
else
{
if (yt.yayButtonTouch == true) iyt.LosingScript();
if (bt.booButtonTouch == true) iyt.WinningScript();
}
}