158 lines
3.7 KiB
C#
158 lines
3.7 KiB
C#
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();
|
||
}
|
||
} |