zoukankan      html  css  js  c++  java
  • 关于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轴自转
        }
    }
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/HangZhe/p/7213683.html
Copyright © 2011-2022 走看看