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; } /// /// 更新方向盘角度 /// private void UpdateSteeringWheelAngle() { // 这里需要替换成获取硬件方向盘角度的代码 steeringWheelAngle = testFloatV; } /// /// 判断方向盘左边还是右边 /// 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; } } } /// /// 下一个按钮 /// private void SelectNextButton() { selectedButtonIndex = (selectedButtonIndex + 1) % buttons.Length; Debug.Log("前进" + selectedButtonIndex); HighlightButton(selectedButtonIndex); } /// /// 上一个按钮 /// private void SelectPreviousButton() { if (selectedButtonIndex == 0) selectedButtonIndex = buttons.Length - 1; else selectedButtonIndex--; Debug.Log("后退" + selectedButtonIndex); HighlightButton(selectedButtonIndex); } /// /// 选择按钮变换 /// /// public void HighlightButton(int index) { for (int i = 0; i < buttons.Length; i++) { if (buttons[i].name == buttons[index].name) { buttons[i].GetComponent().OnClickSprite(); } else { buttons[i].GetComponent().OnCancel(); } } } // public void SelectButtonSprite( string btName) // { // for (int i = 0; i < buttons.Length; i++) // { // if (buttons[i].name == btName) // { // buttons[i].GetComponent().ClickSp(); // } // else // { // buttons[i].GetComponent().Cancel(); // } // } // } public void SelectButton() { buttons[selectedButtonIndex].GetComponent