模拟赛车小游戏

效果展示


做一款模拟赛车的小游戏demo,方向键控制、有刹车、重玩,还有漂移和查看车型的功能
可以看到,还有翻车的效果哈哈哈!有兴趣的小伙伴来看看吧!

资源准备

  1. 从网上下载赛车模型和桥梁路的模型
  2. 项目下载链接在文章末尾

赛车模型如下:
然后将桥和路摆放入游戏场景

再把车放入适当的位置,加入刚体(将刚体mess调节到1000)和车轮碰撞器,层级结构如下:

车轮碰撞器如下操作,在车内部中新建空节点,然后再建四个空节点,给每个这四个空节点都加上Wheel Collider车轮碰撞器,然后将这四个车轮节点的位置逐个摆放到车子车轮对应的位置,最后稍微调节一下车轮的Friction参数即可。

最后再添加几个button在ui上,层级如下:

代码阶段

然后将车挂上脚本lanBoCar.cs
首先写入要在编辑器中配置的所有public变量

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;public class lanBoCar : MonoBehaviour
{public float angleSpeed;public float moveSpeed;public WheelCollider[] wheels;public Transform[] modelTrs;public Button[] contrKeyPad;public GameObject camera;public Button reset;public GameObject objbody;public GameObject cam;public Button LOOK;...


然后写相机镜头锁定车的脚本
camera.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class camera : MonoBehaviour
{public GameObject pos;private Vector3 offset;public GameObject playerCar;public GameObject ca;private int lookid = 0;public int canRot = 1;void Start(){offset = transform.position - playerCar.transform.position;transform.position = ca.transform.position;transform.localEulerAngles = ca.transform.localEulerAngles;}void Update(){if (lookid == 1){   Vector3 pPos = playerCar.transform.position;pPos.z -= 4f;pPos.y += 1.5f;transform.position = pPos;transform.localEulerAngles = ca.transform.localEulerAngles;}else{transform.position = ca.transform.position;float y = playerCar.transform.localEulerAngles.y;float z = playerCar.transform.localEulerAngles.z;if (canRot == 0){transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, y, z);}else{transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, y + (Time.deltaTime * 10), z);}}}void changeRot(string v){if (v == "stop"){canRot = 0;}if (v == "begin"){canRot = 1;}}void look(int ids){lookid = ids;}}

再写上操作方向键的上下左右button的脚本
button.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;public class button : MonoBehaviour,IPointerDownHandler,IPointerUpHandler
{   public float[] vh;public GameObject car;public void OnPointerDown(PointerEventData ed){string chec = "";if (vh.Length == 1 && vh[0] == 2){   int idx = 1;car.SendMessage("checkTail", idx);return;}if (vh[0] == 1){chec = "up";}if(vh[0] == -1){chec = "down";}if (vh[1] == -1){chec = "left";}if (vh[1] == 1){chec = "right";}car.SendMessage("checkEvent", chec);}public void OnPointerUp(PointerEventData ed){string chec = "";if (vh.Length == 1 && vh[0] == 2){int idx = 0;car.SendMessage("checkTail", idx);return;}if (vh[0] == 1){chec = "uSTOP";}if (vh[0] == -1){chec = "dSTOP";}if (vh[1] == -1){chec = "lSTOP";}if (vh[1] == 1){chec = "rSTOP";}car.SendMessage("checkEvent", chec);}}

然后把这个button.cs挂到每个方向键的组件上

最后写入车的脚本
lanBoCar.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;public class lanBoCar : MonoBehaviour
{public float angleSpeed;public float moveSpeed;public WheelCollider[] wheels;public Transform[] modelTrs;public Button[] contrKeyPad;public GameObject camera;public Button reset;private float h = 0f;private float v = 0f;private float addSpeed = 0f;public GameObject objbody;public GameObject cam;public Button LOOK;private bool lookF = false;void Start(){reset.onClick.AddListener(() =>{SceneManager.LoadScene(0);});LOOK.onClick.AddListener(() =>{lookF = !lookF;int ids;if (lookF){ids = 1;}else{ids = 0;}cam.SendMessage("look",ids);});}void FixedUpdate(){   WheelControl();}void OnMouseDrag(){if (lookF){wheels[2].brakeTorque = 1000f;wheels[3].brakeTorque = 1000f;transform.Rotate(0f, 40f * Time.deltaTime, 0f);}}void WheelControl(){if (lookF){return;}//h = Input.GetAxis("Horizontal");//v = Input.GetAxis("Vertical");if (addSpeed == 1f){Debug.Log("stop");wheels[2].brakeTorque = 1200f;wheels[3].brakeTorque = 1200f;}else{wheels[2].brakeTorque = 0f;wheels[3].brakeTorque = 0f;            }wheels[0].steerAngle = h * angleSpeed ;wheels[1].steerAngle = h * angleSpeed ;wheels[2].motorTorque = v * moveSpeed ;wheels[3].motorTorque = v * moveSpeed ;for (int i = 0; i < 4; i++){ModelWheelShow(modelTrs[i],wheels[i]);}}void ModelWheelShow(Transform trans,WheelCollider wheel){Vector3 pos;Quaternion rot;wheel.GetWorldPose(out pos, out rot);trans.rotation = rot;}void checkEvent(string move){Debug.Log(move);switch (move){case "up":v = 1;break;case "down":v = -1;break;case "left":h = -1;cam.SendMessage("changeRot", "stop");break;case "right":cam.SendMessage("changeRot", "stop");h = 1;break;case "uSTOP":case "dSTOP":v = 0;break;case "lSTOP":case "rSTOP":cam.SendMessage("changeRot", "begin");h = 0;break;}}void checkTail(int id){if (id == 1){addSpeed = 1f;}if (id == 0){addSpeed = 0f;}}}

游戏结果


项目下载

最后项目下载链接:
https://download.csdn.net/download/qq_25755645/86265905

[Unity] 制作游戏 赛车小游戏相关推荐

  1. 【源代码】Python制作的赛车小游戏,逆行飙车

    python制作的赛车小游戏,逆行飙车,通过键盘方向键控制 程序运行截图 源代码 import pygame, sys, time, random# pygame 初始化 pygame.init() ...

  2. Python制作的赛车小游戏源代码,逆行飙车

    python制作的赛车小游戏,逆行飙车,通过键盘方向键控制 程序运行截图: 源代码 import pygame, sys, time, random# pygame 初始化 pygame.init() ...

  3. 【抖音小游戏】 Unity制作抖音小游戏方案 最新完整详细教程来袭【持续更新】

    前言 [抖音小游戏] Unity制作抖音小游戏方案 最新完整详细教程来袭[持续更新] 一.相关准备工作 1.1 用到的相关网址 1.2 注册字节开发者后台账号 二.相关集成工作 2.1 下载需要的集成 ...

  4. Unity制作贪吃蛇小游戏

        从开始学习到现在也做了不少小游戏,但是很多都堆积再同一个项目中,并且还有许多不完善之处,所以最近会逐渐发上来一些之前做的小游戏,希望对大家有所帮助. 今天发上来的是最开始做的一个,也是挺经典的 ...

  5. 【游戏开发实战】使用Unity 2019制作仿微信小游戏飞机大战(七):主角飞机碰撞与爆炸

    文章目录 零.教程目录 一.前言 二.本篇目标 三.飞机机碰撞组件:BoxCollider2D.Rigidbody2D 四.添加Tag:Enemy 五.主角飞机碰撞处理:OnTriggerEnter2 ...

  6. 用unity做的简单小游戏------“小球酷跑“

    游戏介绍: 游戏由小球和障碍物组成,在所布置的游戏背景中进行游戏,如图所示. 游戏主要以控制小球移动躲过障碍物继续行走为玩法,是一个简单的不够完整的小游戏,下面将会简单地介绍在unity中如何制作出这 ...

  7. 微信小游戏|unity搭建3D篮球小游戏场景

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 欢迎加入团队圈子!与作者面对面!直接点击! 问题描述 上一次小 ...

  8. html实现经典赛车小游戏

    文章目录 1.设计来源 1.1 主界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151 ...

  9. unity ui框架_用unity制作简单的太空游戏(2)-简单炮台

    多铆蒸刚,炮塔至大! 亿万星辰,亿万炮塔! 多铆蒸刚,炮塔至上! 亿万炮塔,亿万荣光! (PS:我没有咕咕咕,就是比较惨,一口气出了半个月的差,人瘦了,也黑了,心塞塞--赶紧写个文章压压惊--) 这一 ...

最新文章

  1. 三点钟群分享:全球虚拟礼物赠送平台项目落地经验
  2. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB
  3. c++类指针赋值表达式必须是可修改的左值_C++学习刷题8--复制构造函数和赋值运算符重载函数...
  4. android已停止三星,急,android离线打包程序三星下总报 程序 已停止
  5. ABAP,Java, nodejs和go语言的web server编程 1
  6. 组态王历史记录用access_Access数据库与表在 组态王中使用.ppt
  7. 挖矿病毒入侵服务器(没有解决,重置服务器了)
  8. 51单片机(At89C51)组成,引脚介绍
  9. 使用matlab建立个人简历,图像制作个人简历范文
  10. jquery gotop插件
  11. openEuler-risc-v学习笔记
  12. 团队任务3每日立会(2018-10-25)
  13. 名帖296 傅山 行书《行书帖选》
  14. 如何装配一台计算机和安装操作系统,组装机怎么安装系统?手把手教你组装机安装系统教程...
  15. python绘制等值线图_使用python祏rfer绘制等值线图的方式适题。
  16. revit2019 导出obj_Revit文件导出格式大全(上)
  17. 如何使用python装饰器_如何使用装饰器(瓶子.py)
  18. 具有资源开放性的物联网能力要求
  19. 手机裂脑纪:中国式审美还有救吗?
  20. 关于String类中的类型转换一些方法

热门文章

  1. python里的map是什么意思_python中的map是什么意思
  2. Minecraft(我的世界) Fabric 1.19.3 服务器搭建教程
  3. C语言之#error/#warning
  4. jquerynbsp;$.fnnbsp;是什么意思
  5. c语言窗口插件,C语言插件开发形式
  6. 沟通新法则:请不要一个人吃饭
  7. alpine 服务器系统,alpine系统装zerotier-one
  8. Hive之多维度聚合
  9. Spring整合swagger
  10. Linux:WCP知识库安装及配置