Распознаватель речи Unity, как использовать в сочетании с оператором if - PullRequest
0 голосов
/ 10 апреля 2020

Я создаю игру с голосовым управлением. Одна игра, которую я создаю, - это игра с пушками «стреляй по мишеням», которая будет стрелять из пушечного ядра, когда произнесено слово «стрелять».

Я пытаюсь использовать распознаватель речи Unity в сочетании с оператором if, чтобы переместить область заполнения пользовательского интерфейса слайдера моим голосом.

Однако мой первоначальный метод рисует несколько ошибок, таких как «Невозможно преобразовать группу методов« Вверх »в тип без делегата bool. Вы намеревались вызвать метод?»

PS Я впервые использую StackOverflow, будьте добры.

using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Windows.Speech; 
using UnityEngine;
using UnityEngine.UI; 

public class SliderControls : MonoBehaviour
{
    //Voice Controls Setup 
    private KeywordRecognizer keywordRecognizer;
    private Dictionary<string, Action> actions = new Dictionary<string, Action>();
    float sliderValue; 

    // Start is called before the first frame update
    void Start()
    {
        actions.Add("Up", Up);
        actions.Add("Down", Down);

        keywordRecognizer = new KeywordRecognizer(actions.Keys.ToArray());
        keywordRecognizer.OnPhraseRecognized += Recognization;
        keywordRecognizer.Start();   
    }

   private void Recognization(PhraseRecognizedEventArgs speech)
   {
        Debug.Log(speech.text);
        actions[speech.text].Invoke(); 
   }

   private void Up()
    {
        ControlGUI(); 
    }

    private void Down()
    {
        ControlGUI(); 
    }

    public void ControlGUI ()
    {
        if (Up)
        {
            sliderValue = sliderValue + 0.1F; 
        }
        else if(Down)
        {
            sliderValue = sliderValue - 0.1F; 
        }

        sliderValue = GUI.HorizontalSlider(new Rect(25F, 25F, 600F, 30F), sliderValue, 0.0F, 10.0F);
        return;
    }


}

1 Ответ

0 голосов
/ 10 апреля 2020

Как говорит ошибка, вы пытаетесь использовать метод как bool. Вы не можете сделать это. Более того, ваш метод logi c in ControlGUI странный - откуда эти Up и Down должны быть получены?

Я думаю, вам нужно передать аргумент методу ControlGUI, так что ваш код будет выглядеть так:

private void Up()
{
    ControlGUI("Up"); 
}

private void Down()
{
    ControlGUI("Down"); 
}

// You can also define enum Direction { Up, Down } or use int or any other approach
public void ControlGUI (string direction)
{
    if (direction == "Up")
    {
        sliderValue = sliderValue + 0.1F; 
    }
    else if(direction == "Down")
    {
        sliderValue = sliderValue - 0.1F; 
    }

    sliderValue = GUI.HorizontalSlider(new Rect(25F, 25F, 600F, 30F), sliderValue, 0.0F, 10.0F);
    return; // this return statement is redundant
}
...