H_SafeExperienceDrivingSystem/U3D_DrivingSystem/Assets/Script/SteeringWheelController.cs

158 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // 如果您使用的是UGUI
public class SteeringWheelController : MonoBehaviour
{
public static SteeringWheelController Instance;
public Button[] buttons;
private int selectedButtonIndex = 0; // 当前选中的按钮索引
private bool hasSelected = false; // 是否已经进行了选择
// 硬件获取的方向盘角度
private float steeringWheelAngle;
// 方向盘选择角度阈值和中立阈值
public float selectionAngleThreshold = 30.0f; // 例如30度
public float neutralAngleThreshold = 5.0f; // 方向盘接近中立位置的阈值
public float testFloatV;
private void Awake()
{
Instance = this;
}
void Update()
{
// 更新方向盘角度
UpdateSteeringWheelAngle();
// 检查方向盘角度并更新选中的按钮
CheckSteeringWheelAngle();
}
public void SSSS()
{
testFloatV = 45;
}
public void AAAA()
{
testFloatV = 0;
}
public void BBB()
{
testFloatV = -45;
}
/// <summary>
/// 更新方向盘角度
/// </summary>
private void UpdateSteeringWheelAngle()
{
// 这里需要替换成获取硬件方向盘角度的代码
steeringWheelAngle = testFloatV;
}
/// <summary>
/// 判断方向盘左边还是右边
/// </summary>
private void CheckSteeringWheelAngle()
{
if (Mathf.Abs(steeringWheelAngle) < neutralAngleThreshold)
{
hasSelected = false;
return;
}
if (!hasSelected)
{
if (steeringWheelAngle > selectionAngleThreshold)
{
// 向右转动
SelectNextButton();
hasSelected = true;
}
else if (steeringWheelAngle < -selectionAngleThreshold)
{
// 向左转动
SelectPreviousButton();
hasSelected = true;
}
}
}
/// <summary>
/// 下一个按钮
/// </summary>
private void SelectNextButton()
{
selectedButtonIndex = (selectedButtonIndex + 1) % buttons.Length;
Debug.Log("前进" + selectedButtonIndex);
HighlightButton(selectedButtonIndex);
}
/// <summary>
/// 上一个按钮
/// </summary>
private void SelectPreviousButton()
{
if (selectedButtonIndex == 0)
selectedButtonIndex = buttons.Length - 1;
else
selectedButtonIndex--;
Debug.Log("后退" + selectedButtonIndex);
HighlightButton(selectedButtonIndex);
}
/// <summary>
/// 选择按钮变换
/// </summary>
/// <param name="index"></param>
public void HighlightButton(int index)
{
for (int i = 0; i < buttons.Length; i++)
{
if (buttons[i].name == buttons[index].name)
{
buttons[i].GetComponent<BtClick>().OnClickSprite();
}
else
{
buttons[i].GetComponent<BtClick>().OnCancel();
}
}
}
// public void SelectButtonSprite( string btName)
// {
// for (int i = 0; i < buttons.Length; i++)
// {
// if (buttons[i].name == btName)
// {
// buttons[i].GetComponent<BtClick>().ClickSp();
// }
// else
// {
// buttons[i].GetComponent<BtClick>().Cancel();
// }
// }
// }
public void SelectButton()
{
buttons[selectedButtonIndex].GetComponent<Button>().onClick.Invoke();
}
}