關於Unity中自帶搖桿與車輪碰撞器的使用


准備

在創建好項目目錄的基礎上

導入一個第三方的資源包,在Project面板里面

右鍵---->Import Package---->Custom Package---->easy_touch.unitypackage

導入完成后,會發現菜單欄多了一個Hedgehog Team

Hedgehog Team---->Easy Touch---->Add Easy Touch for C#

 

 

創建搖桿

在Hierarchy面板里面

右鍵---->創建一個空節點joystick---->給節點添加組件Easy Joystick---->Game視圖出現搖桿

 

寫一個腳本來打印出搖桿的動態選定坐標,腳本叫test_joystick,掛載在joystick節點下,JoystickTouch (x, y) [-1, 1]

腳本內容:

using UnityEngine;
using System.Collections;

public class test_joystick : MonoBehaviour {
    EasyJoystick joystick;
    // Use this for initialization
    void Start () {
        this.joystick = this.GetComponent<EasyJoystick>();
    }
    
    // Update is called once per frame
    void Update () {
        Debug.Log(this.joystick.JoystickTouch.x + ":" + this.joystick.JoystickTouch.y);
    }
}

 

 

導入模型和背景

導入賽車資源F1文件夾和籃球場plane貼圖到Resources目錄下

創建一個game_root節點,把F1---->F1賽車模型預制體拖進game_root,當作它的子節點

創建一個plane平面節點當做game_root的子節點,把籃球場貼紙拖進Scene視圖中的plane,就會自動幫我們生成一個材質球並關聯到節點上,3D節點都要材質才能顯示內容,2D節點只要圖片就可以了。

材質plane的shader設置為Mobile Diffuse

 

節點F1的子節點如果沒有自動關聯好材質球的話,需要手動拖材質球關聯它的子節點

把相同名稱的材質球拖進子節點的Mesh Renderer的Element中,有多少個Element就拖幾次

把F1節點還原為普通節點GameObject---->Break Prefab Instance

 

 

配置車輪參數

為了讓賽車能夠運動起來,首先要給它一個剛體組件Rigidbody,設置質量Mass為50

為了發生碰撞,我們還需要給賽車添加碰撞器組件Box Collider,設置大小Size為X=2.5,Y=0.5,Z=8,調整它的位置Center的Y=0.5

 

在F1節點下面創建一個空節點phy_wheel,在phy_wheel下面再創建一個輪子節點FL

給FL添加車輪碰撞器Wheel Collider,設置車輪質量Mass為2,彈力Spring為90,阻力Damper設置為45,其他的車輪參數為

1: 添加賽車車體碰撞器;
2: 添加4個車輪碰撞器;
3: 配置車輪參數:
mass: 質量

radis半徑

Wheel Dramping Rate 車輪旋轉阻尼

Suspension Distance 懸掛高度,就是車輪上下顛簸的上下幅度距離;

Force App Point Distance 懸掛力應用點;

Center 車輪碰撞器中心點,

Suspension Spring 懸掛彈簧:

sprint 彈力 Damper 懸浮速度阻尼

TargetPoint 懸掛中心

向前摩擦與側向摩擦

Extermum Slip 先前摩擦曲線滑動值

Extermum Point 先前摩擦曲線極值點;

Asymptote Slip 向前漸進線滑動值;

Asymptote Point 前向曲線漸近線點;

stiffness 剛度 控制向前摩擦曲線的倍數;

配置好一個輪子后,再復制三個輪子出來,一個四個輪子FL,FR,BL,BR,然后把輪子節點移動到對應的模型中的四個輪子的位置。

 

 

使車子隨着搖桿運動

我們首先創建一個腳本car掛載在F1節點下面來控制車輪隨着搖桿的移動而運動

car腳本內容:

using UnityEngine;
using System.Collections;

public class car : MonoBehaviour {
    public WheelCollider fl;
    public WheelCollider fr;
    public EasyJoystick joystick;
    float max_torque = 20;
    float max_angle = 30;
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        // 搖桿的y 控制牽引力,如果牽引力為正,往前開反之往后開
        this.fl.motorTorque = this.joystick.JoystickTouch.y * max_torque;
        this.fr.motorTorque = this.joystick.JoystickTouch.y * max_torque;
        // end

        // 搖桿的x 用來控制轉向;
        this.fl.steerAngle = this.joystick.JoystickTouch.x * max_angle;
        this.fr.steerAngle = this.joystick.JoystickTouch.x * max_angle;
        // end
    }
}

設置一下車的助力,這樣可以讓車自己停下來,設置阻力的話設置車輪阻力和平面材質阻力都不明顯,設置F1節點的剛體里面的Drag屬性是最明顯的。

這時候車已經可以跟着搖桿的方向而運動了,但是模型的圖像沒有任何變化,車輪沒有任何轉動和轉向。

 

 

控制車輪圖像變化

 

1: 剛體質量 50, 輪子質量2 半徑是0.64;
2: 彈力 90, 阻力 45;
3: motorTorque:車輪移動的力矩,為正向前,為負向后
4: steerAngle: 車輪的轉向角;
5: rmp: 每分鍾轉多少轉;

 

 

 

我們需要再創建一個腳本wheel掛載在四個車輪節點(F1--->Wheel--->BL BR FL FR)下面,來控制輪子圖像的變化

wheel腳本里面的內容:

using UnityEngine;
using System.Collections;

public class wheel : MonoBehaviour {
    public WheelCollider phy_wheel;
    float rot_degree = 0.0f;
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        this.rot_degree += ((this.phy_wheel.rpm * 360.0f / 60) * Time.deltaTime);//自轉角度
        this.transform.rotation = this.phy_wheel.transform.rotation * Quaternion.Euler(this.rot_degree, this.phy_wheel.steerAngle, 0);//做和剛體一樣角度的旋轉,加上this.rot_degree參數才會繞X軸自轉
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM