Initialer Upload neues Unity-Projekt

This commit is contained in:
Daniel Ocks
2025-07-21 09:11:14 +02:00
commit eeca72985b
14558 changed files with 1508140 additions and 0 deletions

View File

@ -0,0 +1,151 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* Licensed under the Oculus SDK License Agreement (the "License");
* you may not use the Oculus SDK except in compliance with the License,
* which is provided at the time of installation or download, or which
* otherwise accompanies this software in either electronic or hard copy form.
*
* You may obtain a copy of the License at
*
* https://developer.oculus.com/licenses/oculussdk/
*
* Unless required by applicable law or agreed to in writing, the Oculus SDK
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using Meta.WitAi;
using Meta.WitAi.Requests;
using UnityEngine;
using UnityEngine.UI;
namespace Oculus.VoiceSDK.UX
{
[RequireComponent(typeof(Button))]
public class VoiceActivationButton : MonoBehaviour
{
// The button to be observed
private Button _button;
// The button label to be adjusted with state
private Text _buttonLabel;
[Tooltip("Reference to the current voice service")]
[SerializeField] private VoiceService _voiceService;
[Tooltip("Text to be shown while the voice service is not active")]
[SerializeField] private string _activateText = "Activate";
[Tooltip("Whether to immediately send data to service or to wait for the audio threshold")]
[SerializeField] private bool _activateImmediately = false;
[Tooltip("Text to be shown while the voice service is active")]
[SerializeField] private string _deactivateText = "Deactivate";
[Tooltip("Whether to immediately abort request activation on deactivate")]
[SerializeField] private bool _deactivateAndAbort = false;
// Current request
private VoiceServiceRequest _request;
private bool _isActive = false;
// Get button & label
private void Awake()
{
_buttonLabel = GetComponentInChildren<Text>();
_button = GetComponent<Button>();
if (_voiceService == null)
{
_voiceService = FindObjectOfType<VoiceService>();
}
}
// Add click delegate
private void OnEnable()
{
RefreshActive();
if (_button != null)
{
_button.onClick.AddListener(OnClick);
}
}
// Remove click delegate
private void OnDisable()
{
_isActive = false;
if (_button != null)
{
_button.onClick.RemoveListener(OnClick);
}
}
// On click, activate if not active & deactivate if active
private void OnClick()
{
if (!_isActive)
{
Activate();
}
else
{
Deactivate();
}
}
// Activate depending on settings
private void Activate()
{
if (!_activateImmediately)
{
_request = _voiceService.Activate(GetRequestEvents());
}
else
{
_request = _voiceService.ActivateImmediately(GetRequestEvents());
}
}
// Deactivate depending on settings
private void Deactivate()
{
if (!_deactivateAndAbort)
{
_request.DeactivateAudio();
}
else
{
_request.Cancel();
}
}
// Get events
private VoiceServiceRequestEvents GetRequestEvents()
{
VoiceServiceRequestEvents events = new VoiceServiceRequestEvents();
events.OnInit.AddListener(OnInit);
events.OnComplete.AddListener(OnComplete);
return events;
}
// Request initialized
private void OnInit(VoiceServiceRequest request)
{
_isActive = true;
RefreshActive();
}
// Request completed
private void OnComplete(VoiceServiceRequest request)
{
_isActive = false;
RefreshActive();
}
// Refresh active text
private void RefreshActive()
{
if (_buttonLabel != null)
{
_buttonLabel.text = _isActive ? _deactivateText : _activateText;
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 172cb0882a19c114790c463ad582025d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,153 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* Licensed under the Oculus SDK License Agreement (the "License");
* you may not use the Oculus SDK except in compliance with the License,
* which is provided at the time of installation or download, or which
* otherwise accompanies this software in either electronic or hard copy form.
*
* You may obtain a copy of the License at
*
* https://developer.oculus.com/licenses/oculussdk/
*
* Unless required by applicable law or agreed to in writing, the Oculus SDK
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using Meta.WitAi;
using Meta.WitAi.Json;
using Meta.WitAi.Requests;
using UnityEngine;
using UnityEngine.UI;
namespace Oculus.VoiceSDK.UX
{
[RequireComponent(typeof(Text))] [ExecuteInEditMode]
public class VoiceTranscriptionLabel : MonoBehaviour
{
// The label to be updated
public Text Label
{
get
{
if (_label == null)
{
_label = gameObject.GetComponent<Text>();
}
return _label;
}
}
private Text _label;
[Header("Listen Settings")]
[Tooltip("Various voice services to be observed")]
[SerializeField] private VoiceService[] _voiceServices;
[Tooltip("Text color while receiving text")]
[SerializeField] private Color _transcriptionColor = Color.black;
[Header("Prompt Settings")]
[Tooltip("Color to be used for prompt text")]
[SerializeField] private Color _promptColor = new Color(0.2f, 0.2f, 0.2f);
[Tooltip("Prompt text that displays while listening but prior to completion")]
[SerializeField] private string _promptDefault = "Press activate to begin listening";
[Tooltip("Prompt text that displays while listening but prior to completion")]
[SerializeField] private string _promptListening = "Listening...";
[Header("Error Settings")]
[Tooltip("Color to be used for error text")]
[SerializeField] private Color _errorColor = new Color(0.8f, 0.2f, 0.2f);
// If none found, grab all voice services
private void Awake()
{
if (_voiceServices == null || _voiceServices.Length == 0)
{
_voiceServices = FindObjectsOfType<VoiceService>();
}
}
// Add service delegates
private void OnEnable()
{
if (_voiceServices != null)
{
foreach (var service in _voiceServices)
{
service.VoiceEvents.OnStartListening.AddListener(OnStartListening);
service.VoiceEvents.OnPartialTranscription.AddListener(OnTranscriptionChange);
service.VoiceEvents.OnFullTranscription.AddListener(OnTranscriptionChange);
service.VoiceEvents.OnError.AddListener(OnError);
service.VoiceEvents.OnComplete.AddListener(OnComplete);
}
}
}
// Remove service delegates
private void OnDisable()
{
if (_voiceServices != null)
{
foreach (var service in _voiceServices)
{
service.VoiceEvents.OnStartListening.RemoveListener(OnStartListening);
service.VoiceEvents.OnPartialTranscription.RemoveListener(OnTranscriptionChange);
service.VoiceEvents.OnFullTranscription.RemoveListener(OnTranscriptionChange);
service.VoiceEvents.OnError.RemoveListener(OnError);
service.VoiceEvents.OnComplete.RemoveListener(OnComplete);
}
}
}
#if UNITY_EDITOR
// Refresh prompt
private void Update()
{
if (!Application.isPlaying)
{
SetText(_promptDefault, _promptColor);
}
}
#endif
// Set listening
private void OnStartListening()
{
SetText(_promptListening, _promptColor);
}
// Set text change
private void OnTranscriptionChange(string text)
{
SetText(text, _transcriptionColor);
}
// Apply error
private void OnError(string status, string error)
{
SetText($"[{status}] {error}", _errorColor);
}
// If no text came through, show prompt
private void OnComplete(VoiceServiceRequest request)
{
if (Label != null && string.Equals(Label?.text, _promptListening))
{
SetText(_promptDefault, _promptColor);
}
}
// Refresh text
private void SetText(string newText, Color newColor)
{
// Ignore if same
if (Label == null || string.Equals(newText, Label.text) && newColor == Label.color)
{
return;
}
// Apply text & color
_label.text = newText;
_label.color = newColor;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7d6b7f41315d58e4b84dde7885b2f192
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: