c# - Unity如何在C#脚本中获取按钮输入?
问题描述
我正在编写一个包含组合系统的游戏(它是一个脚本)。我目前有它,所以输入是键,但我想改变它,所以它需要按下按钮输入。
这是输入代码:
void Update() {
if (Input.GetKeyDown(KeyCode.E))
input = new ComboInput(AttackType.heavy);
if (Input.GetKeyDown(KeyCode.R))
input = new ComboInput(AttackType.light);
}
UI 按钮的问题在于它们采用 onPressed() 命令,但我无法创建一个函数来提供此输入,因为它已经在更新函数中。任何帮助,将不胜感激。
解决方案
您可以为按钮添加一个委托,以便在单击时调用它。
例子:
private void Awake()
{
Button buttonComponent = GetComponent<Button>();
buttonComponent.onClick.AddListener(OnButtonClicked)
}
private void OnButtonClicked()
{
Debug.Log("The button has clicked!");
}
您必须将此脚本附加到您的 Button 游戏对象。
您也可以通过检查器直接将事件功能添加到您的按钮,但该功能应该是public
为了被检查器访问。如果您不希望其他类看到您的功能,那么上述将是您的最佳选择。
就你而言,这是我的建议:
[SerializeField]
private Button buttonE, buttonR;
private ComboInput input;
private void Awake()
{
buttonE.onClick.AddListener(OnButtonClicked_E);
buttonR.onClick.AddListener(OnButtonClicked_R);
}
private void OnButtonClicked_E()
{
input = new ComboInput(AttackType.heavy);
}
private void OnButtonClicked_R()
{
input = new ComboInput(AttackType.light);
}
编辑:如果您想要编辑现有的战斗脚本(而不是创建新的单个组件),那么您必须将按钮提供给您的战斗脚本。也就是说buttonE, buttonR
,您必须通过统一检查员提供参考。如果它已经完成,那么您可以自由地删除您的Update()
功能,如果没有其他相关的东西。
推荐阅读
- c# - 使用 SSIS 将 Excel 工作表从工作簿移动到另一个工作簿
- javascript - 如何在工具提示 echarts 中显示图标
- python - Django 如何使用数据迁移填充表?
- flutter - 获取 Widget 的高度并将其传递给 expandHeight
- php - laravel 是否需要单独的 Web 服务器才能运行?
- javascript - 没有数据被插入到我的数据库中
- .net-core - Visual Studio Code 在 .NET Core 项目中找不到对 SignInManager 的引用
- c - clock_gettime() 未定义符号 SunOS
- swift - 如何快速按下所选单元格的IndexPath
- laravel - Api 只能从受信任的站点访问,不能通过任何浏览器、邮递员等访问