准備
在創建好項目目錄的基礎上
導入一個第三方的資源包,在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軸自轉 } }
