👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:Unity游戏demo
⭐🅰️Unity3D赛车游戏⭐
文章目录
- ⭐🅰️Unity3D赛车游戏⭐
- ⭐前言⭐
- 🎶(==A==)封装管理——输入管理类
- 🎶(==B==)封装管理——模块化管理车辆脚本
- 🎶(==C==)车辆玩法——驱动模式添加
- 😶🌫️前驱效果
- 😶🌫️后驱效果
- 😶🌫️四驱效果
- 😶🌫️UNL和代码
- ``⭐🅰️⭐
⭐前言⭐
–
😶🌫️版本: Unity2021
😶🌫️适合人群:Unity初学者
😶🌫️学习目标:3D赛车游戏的基础制作
😶🌫️技能掌握:
🎶(A)封装管理——输入管理类
- 单例模式管理输入控制类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 输入控制管理器
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class InputManager : MonoBehaviour
{
//单例模式管理
static private InputManager inputManagerment;
static public InputManager InputManagerment => inputManagerment;
public float horizontal; //水平方向动力值
public float vertical; //垂直方向动力值
public float handbanl; //手刹动力值
void Awake()
{
inputManagerment = this;
}
void Update()
{
//与Unity中输入管理器的值相互对应
horizontal = Input.GetAxis("Horizontal");
vertical = Input.GetAxis("Vertical");
handbanl = Input.GetAxis("Space");
}
}
🎶(B)封装管理——模块化管理车辆脚本
- 车轮运动脚本优化
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 车轮的运动
//___________创建者:_______秩沅________
//_____________________________________
//-------------------------------------
public class WheelMove : MonoBehaviour
{
//-------------------------------------------
//四个轮子的碰撞器
public WheelCollider[] wheels ;
//网格的获取
public GameObject[] wheelMesh;
//扭矩力度
public float motorflaot = 200f;
//转向力度
public float steerflaot = 20f;
//初始化三维向量和四元数
private Vector3 wheelPosition = Vector3.zero;
private Quaternion wheelRotation = Quaternion.identity;
//-------------------------------------------
//辅助变量
private Vector3 off;
private void FixedUpdate()
{
WheelsAnimation(); //车轮动画
VerticalContorl(); //驱动管理
HorizontalContolr(); //转向管理
}
//垂直轴方向管理(驱动管理)
public void VerticalContorl()
{
//垂直轴不为0时
if (Input.GetAxis("Vertical") != 0) //当按下WS键时生效
{
for (int i = 0; i < wheels.Length; i++)
{
//扭矩力度
wheels[i].motorTorque = InputManager.InputManagerment.vertical * motorflaot;
}
}
}
//水平轴方向管理(转向管理)
public void HorizontalContolr()
{
//水平轴不为0时
if (Input.GetAxis("steerAngle") != 0) //当按下AD键时生效
{
for (int i = 0; i < wheels.Length - 2; i++) //只针对前轮
{
//转向角度
wheels[i].steerAngle = InputManager.InputManagerment.horizontal * steerflaot;
}
}
}
//车轮动画相关
public void WheelsAnimation()
{
for (int i = 0; i < wheels.Length ; i++)
{
//获取当前空间的车轮位置 和 角度
wheels[i].GetWorldPose(out wheelPosition, out wheelRotation);
//赋值给
wheelMesh[i].transform.position = wheelPosition;
print(wheelRotation);
wheelMesh[i].transform.rotation = wheelRotation * Quaternion .AngleAxis (90,Vector3 .forward );
}
}
}
🎶(C)车辆玩法——驱动模式添加
- 车轮参数
😶🌫️前驱效果
😶🌫️后驱效果
😶🌫️四驱效果
- 按下Gizmos可看到网格的显隐
😶🌫️UNL和代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 车轮的运动
//___________创建者:_______秩沅________
//_____________________________________
//-------------------------------------
//驱动模式的选择
public enum EDriveType
{
frontDrive, //前轮驱动
backDrive, //后轮驱动
allDrive //四驱
}
public class WheelMove : MonoBehaviour
{
//-------------------------------------------
//四个轮子的碰撞器
public WheelCollider[] wheels ;
//网格的获取
public GameObject[] wheelMesh;
//扭矩力度
public float motorflaot = 200f;
//转向力度
public float steerflaot = 20f;
//初始化三维向量和四元数
private Vector3 wheelPosition = Vector3.zero;
private Quaternion wheelRotation = Quaternion.identity;
//-------------------------------------------
//辅助变量
private Vector3 off;
//驱动模式选择 _默认前驱
public EDriveType DriveType = EDriveType.frontDrive;
private void FixedUpdate()
{
WheelsAnimation(); //车轮动画
VerticalContorl(); //驱动管理
HorizontalContolr(); //转向管理
}
//垂直轴方向管理(驱动管理)
public void VerticalContorl()
{
switch (DriveType)
{
case EDriveType.frontDrive:
//选择前驱
if (InputManager.InputManagerment.vertical != 0) //当按下WS键时生效
{
for (int i = 0; i < wheels.Length - 2; i++)
{
//扭矩力度
wheels[i].motorTorque = InputManager.InputManagerment.vertical *(motorflaot / 2); //扭矩马力归半
}
}
break;
case EDriveType.backDrive:
//选择后驱
if (InputManager.InputManagerment.vertical != 0) //当按下WS键时生效
{
for (int i = 2; i < wheels.Length; i++)
{
//扭矩力度
wheels[i].motorTorque = InputManager.InputManagerment.vertical * (motorflaot / 2); //扭矩马力归半
}
}
break;
case EDriveType.allDrive:
//选择四驱
if (InputManager.InputManagerment.vertical != 0) //当按下WS键时生效
{
for (int i = 0; i < wheels.Length; i++)
{
//扭矩力度
wheels[i].motorTorque = InputManager.InputManagerment.vertical * ( motorflaot / 4 ); //扭矩马力/4
}
}
break;
default:
break;
}
}
//水平轴方向管理(转向管理)
public void HorizontalContolr()
{
//水平轴不为0时
if (InputManager.InputManagerment.horizontal != 0) //当按下AD键时生效
{
for (int i = 0; i < wheels.Length - 2; i++) //只针对前轮
{
//转向角度
wheels[i].steerAngle = InputManager.InputManagerment.horizontal * steerflaot;
}
}
}
//车轮动画相关
public void WheelsAnimation()
{
for (int i = 0; i < wheels.Length ; i++)
{
//获取当前空间的车轮位置 和 角度
wheels[i].GetWorldPose(out wheelPosition, out wheelRotation);
//赋值给
wheelMesh[i].transform.position = wheelPosition;
print(wheelRotation);
wheelMesh[i].transform.rotation = wheelRotation * Quaternion .AngleAxis (90,Vector3 .forward );
}
}
}
``⭐🅰️⭐
⭐【Unity3D赛车游戏制作】【一】初步导入,资源很哇塞
⭐【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、