Unity+羅技G29方向盤+Realistic Car Controller 製作簡單的模擬駕駛

2020-09-11 10:32:42

工程版本及說明

Unity2018.3.10f1 所使用的外掛為
Windows:Logitech 遊戲軟體
Unity外掛:Logitech SDK V1.7,Realistic Car Controller 3.1f

工程demo說明

SampleScene 為測試羅技方向盤按鈕的場景,RCC City為我主要測試的場景,但是我改的是車輛控制的核心程式碼其他的場景應該都可適配。
製作時參考的部落格:Unity開發 羅技方向盤 G29 白話版
這次開發我沒有用到換擋的功能(因為沒有買換擋的硬體)所以只有方向盤和油門子

車輛控制更改的核心程式碼

車輛控制的核心指令碼為 RCC_CarControllerV3
掛載在RCC City場景種E36的物體上
具體程式碼建議下載我的工程去看我只擷取其中一段
有個問題就是羅技的介面給的按鈕按下無法判斷是長按還是短按很難受所以我自己加了個時間控制的如果有解決了的大佬可以交流一哈

#region
                //檢測羅技方向盤是否開啟
                if (LogitechGSDK.LogiUpdate() && LogitechGSDK.LogiIsConnected(0))
                {
                    //Debug.Log(1);
                    //TODO:獲取羅技方向盤資料物件
                    LogitechGSDK.DIJOYSTATE2ENGINES rec;
                    rec = LogitechGSDK.LogiGetStateUnity(0);
                    //TODO:判斷按鈕邏輯
                    btnPressedTime += Time.deltaTime;
                    if (btnPressedTime >= 0.5f)
                    {
                        btnPressedTime = 0;
                        for (int i = 0; i < 128; i++)
                        {
                            if (rec.rgbButtons[i] == 128)
                            {
                                //TODO:切換倒車前進按鈕
                                if (i == 24)
                                {
                                    IsBackTheCar = !IsBackTheCar;
                                    break;
                                }
                                //TODO:切換攝像頭
                                if (i == 1)
                                {
                                    if (GameObject.FindObjectOfType<RCC_Camera>())
                                        GameObject.FindObjectOfType<RCC_Camera>().ChangeCamera();
                                    break;
                                }
                                //TODO:慢鏡頭
                                if (i == 23)
                                {
                                    if (Time.timeScale != .2f)
                                        Time.timeScale = .2f;
                                    else
                                        Time.timeScale = 1f;

                                    break;
                                }
                                //TODO:右轉燈
                                if (i == 6)
                                {
                                    if(indicatorsOn != RCC_CarControllerV3.IndicatorsOn.Right)
                                    {
                                        indicatorsOn = RCC_CarControllerV3.IndicatorsOn.Right;
                                    }
                                    else
                                    {
                                        indicatorsOn = RCC_CarControllerV3.IndicatorsOn.Off;
                                    }

                                    break;
                                }
                                //TODO:左轉燈
                                if (i == 7)
                                {
                                    if (indicatorsOn != RCC_CarControllerV3.IndicatorsOn.Left)
                                    {
                                        indicatorsOn = RCC_CarControllerV3.IndicatorsOn.Left;
                                    }
                                    else
                                    {
                                        indicatorsOn = RCC_CarControllerV3.IndicatorsOn.Off;
                                    }

                                    break;
                                }
                                //TODO:頭燈
                                if (i == 8)
                                {
                                    if (!highBeamHeadLightsOn && lowBeamHeadLightsOn)
                                    {
                                        highBeamHeadLightsOn = true;
                                        lowBeamHeadLightsOn = true;
                                        break;
                                    }
                                    if (!lowBeamHeadLightsOn)
                                        lowBeamHeadLightsOn = true;
                                    if (highBeamHeadLightsOn)
                                    {
                                        lowBeamHeadLightsOn = false;
                                        highBeamHeadLightsOn = false;
                                    }
                                    break;
                                }
                            }
                        }
                    }
                    //TODO:判斷是否為倒車形態
                    if (!IsBackTheCar)
                    {
                        //TODO:設定油門控制車輛的速度
                        gasInput = Mathf.InverseLerp(-32768, 32767, -rec.lY);
                        brakeInput = 0;
                    }
                    else
                    {
                        gasInput = 0;
                        brakeInput = Mathf.InverseLerp(-32768, 32767, -rec.lY);
                    }

                    //Debug.Log(gasInput);
                    //steerInput = Mathf.InverseLerp(-32768, 32767, -rec.lX);
                    //TODO:設定方向盤控制車的轉向
                    steerInput = rec.lX / 32768f;
                    //Debug.Log(steerInput);
                    //TODO:設定剎車
                    handbrakeInput = Mathf.InverseLerp(-32768, 32767, -rec.lRz);
                    
                    //Debug.Log(brakeInput);
                }
                #endregion

Demo使用說明

需要一個Unity2018.3.10f1 引擎
一個羅技G29方向盤 (不送方向盤自己上馬雲買)
如果你沒有方向盤就自己拿汽車的外掛研究吧

工程地址

百度盤:
Unity+羅技G29方向盤+Realistic Car Controller 製作簡單的模擬駕駛
提取碼:4118
CSDN:
Unity+羅技G29方向盤+Realistic Car Controller 製作簡單的模擬駕駛
CarTest01壓縮包為demo工程
LogitechSteeringWheelSDK_8.75.30 為羅技遊戲軟體 你如果官網打不開就用我的下吧最好去官網下
Realistic Car Controller 3.1f 為製作汽車控制的外掛沒方向盤的可以只下這個
Logitech SDK V1.7這個外掛自己去UnityAssetStore下載
注:如果你要設定方向盤先安裝羅技遊戲軟體再把方向盤插入電腦 不然進unity識別不了 好像是驅動沒安好如果遇到其他問題請參考上方的白話G29部落格

新媒體互動行業交流群推廣

QQ群號:139077032
這個群為csdn愛思考的猴子大佬建的,我當初剛入行時經常看這位大佬的部落格。大家同行有興趣的話可以進群交流分享
後面有空的話會更新之前做過的一些功能的