【发布时间】:2019-04-29 10:50:51
【问题描述】:
我正在尝试创建一个统一的“组合”系统,但我创建了一个我难以理解的牢不可破的循环。我尝试过使用 while 循环并且遇到了这个问题,所以也想尝试一下 for 循环,但我得到了相同的结果。
连击系统的工作方式是,当玩家进入有敌人的条件时,他们可以输入控制器上的一连串按钮来触发连击。如果玩家输入了正确的组合,就会应用效果。到目前为止,我只担心让组合系统工作。
我为组合创建了一个预定义的字符数组,然后我将来自播放器的输入与该数组进行比较。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ComboSystem : MonoBehaviour
{
public char currentButton;
public char[] combo_arr = { 'A', 'A', 'B', 'B', 'X' };
PlayerLockOnSystem plos;
private void Start()
{
plos = GetComponent<PlayerLockOnSystem>();
}
private void Update()
{
if (plos.lockedOn)
{
Combo();
}
}
void DetectComboButtons()
{
if (Input.GetButton("Joystick A"))
{
currentButton = 'A';
}
if (Input.GetButton("Joystick X"))
{
currentButton = 'X';
}
if (Input.GetButton("Joystick B"))
{
currentButton = 'B';
}
}
void Combo()
{
for (int i = 0; i < combo_arr.Length; i++)
{
DetectComboButtons();
if (currentButton == combo_arr[i])
{
Debug.Log("Correct: " + currentButton);
}
else
{
i = 0;
Debug.Log("Incorrect");
}
}
}
}
当触发 Combo() 方法时,Unity 崩溃,我必须强制关闭编辑器。
【问题讨论】:
-
你需要给
DetectComboButtons添加一个while循环和一个延迟。该代码不等待输入,它只是返回按下的键,如果没有按下任何键,则返回任何内容。您需要等待输入 -
您在导致无限循环的循环中设置 i =0。您必须跟踪玩家当前的按钮按下以及他们所在组合的当前索引。如果下一个按钮不正确,则重置当前的组合索引。
-
感谢您的快速回复,我仍然有点不确定您的意思,如果这是我没有完全了解的非常基本的事情,我很抱歉
-
看看this guide是否有帮助。
-
好的,我去看看!谢谢