当前位置: 首页 > news >正文

【Unity3D赛车游戏优化篇】新【八】汽车实现镜头的流畅跟随,以及不同角度的切换

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity游戏demo

🅰️Unity3D赛车游戏



文章目录

    • 🅰️Unity3D赛车游戏
    • 前言
    • 🎶(==A==)系统优化——相机升华优化
        • 😶‍🌫️为什么要优化:
        • 😶‍🌫️单个场景镜头
        • 😶‍🌫️多个场景镜头
        • 😶‍🌫️ 漂移镜头
        • 😶‍🌫️相机管理脚本CameraContorl
    • 🅰️


前言


😶‍🌫️版本: Unity2021
😶‍🌫️适合人群:Unity初学者
😶‍🌫️学习目标:3D赛车游戏的基础制作
😶‍🌫️技能掌握:


🎶(A系统优化——相机升华优化


😶‍🌫️为什么要优化:


代码过于复杂,并且滑轮镜头不适合后续游戏的进行


😶‍🌫️单个场景镜头


  • 优化如下
  //相机跟随功能public void FllowEffect()  {  //实现从不同的角度切入观看transform.position = target.position * (1 - smoothTime) + transform.position * smoothTime;transform.LookAt(target.parent );smoothTime = (Control.Km_H  >=150 ) ? ( Mathf .Abs(Control.Km_H)/150)  - 0.85f : 0.45f;}

在这里插入图片描述

  • 此时代码放入了LateUpdate里面

1.优点:确实是是是跟随
2.缺点:但是会造成镜头的晃动
在这里插入图片描述

  • 改成放入了FixedUpdate里面

在这里插入图片描述
在这里插入图片描述
原因:FixedUpdate是固定帧执行,精准的实时跟随反而会放大细节


😶‍🌫️多个场景镜头


  • 设置多个场景的位置
    在这里插入图片描述

  • 输入管理更新
    在这里插入图片描述

  • 演示效果

在这里插入图片描述

😶‍🌫️ 漂移镜头


  • 加上了漂移镜头
    在这里插入图片描述

  • 未加漂移镜头

在这里插入图片描述

可以看出加上漂移镜头后更有感觉

  • 关键代码:

在这里插入图片描述

        //漂移时 平滑参数配置speed = Control.Km_H / smoothTime;transform.position = Vector3.Lerp(transform.position, target[ChooseIndex].position, Time.deltaTime * speed );transform.LookAt(targetOb );

😶‍🌫️相机管理脚本CameraContorl

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 相机的管理
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class CameraContorl : MonoBehaviour
{//目标物体public Transform targetOb;public Transform[] target ;private CarMoveControl Control;public float  speed;//相机平滑值[Range(0,20)]public int  smoothTime = 8;//镜头的选择public int ChooseIndex ;[Header("----------加速时相机属性-------------")]//加速时的跟随力度[Range(1, 5)]public float shiftOff;//目标视野 (让其显示可见)[SerializeField ]private float addFov;//当前视野private float startView;[Range(1,10)]public float followLerp = 1;[Range(1,10)]public float angleLerp = 1;//为一些属性初始化private void Start(){      startView = Camera.main.fieldOfView; //将相机的开始属性赋入addFov = 30;//获取镜头位置for (int i = 0; i < 3; i++){target[i] = targetOb.GetChild(0).GetChild(i);}}private void Update(){TabViewChoose();  //选择镜头}void FixedUpdate(){CameraAtrribute(); //相机属性显示FllowEffect(); //相机跟随功能FOXChange();  //加速时相机视野的变化}//选择场景private void TabViewChoose(){//按下Tab键时if(InputManager.InputManagerment.TabView)ChooseIndex = ChooseIndex > 1 ? 0 : ChooseIndex+1;}//相机跟随功能private void FllowEffect()  {//-------1.镜头的跟随方法一---------//实现从不同的角度切入观看//transform.position = target[ChooseIndex].position * (1 - smoothTime) + transform.position * smoothTime;//速度不同跟随的角度不同//moothTime = (Control.Km_H >= 150) ? (Mathf.Abs(Control.Km_H) / 150) - 0.85f : 0.45f;//-------2.镜头的跟随方法二---------//平滑参数配置speed = Control.Km_H / smoothTime;transform.position = Vector3.Lerp(transform.position, target[ChooseIndex].position, Time.deltaTime * speed );transform.LookAt(targetOb );} //加速时相机视野的变化private  void FOXChange(){if(Input.GetKey(KeyCode.LeftShift) ) //按下坐标shift键生效{Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView , startView + addFov ,Time .deltaTime * shiftOff );}else{Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, startView, Time.deltaTime * shiftOff);}}//相机属性显示private void CameraAtrribute(){//实时速度Control = targetOb.GetComponent<CarMoveControl>();speed = Mathf.Lerp(speed, Control.Km_H / 4, Time.deltaTime);speed = Mathf.Clamp(speed, 0, 55);   //对应最大200公里每小时}}

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


相关文章:

【Unity3D赛车游戏优化篇】新【八】汽车实现镜头的流畅跟随,以及不同角度的切换

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

webpack5 (四)

react-cli 中配置 开发环境 const path require(path) const EslintWebpackPlugin require(eslint-webpack-plugin) const HtmlWebpackPlugin require(html-webpack-plugin) const ReactRefreshWebpackPlugin require(pmmmwh/react-refresh-webpack-plugin); //封装处理样…...

电脑硬盘数据恢复一般需要收费多少钱

随着电子信息时代的发展&#xff0c;个人和企业对电脑硬盘中存储的数据越发重视。然而&#xff0c;由于各种原因&#xff0c;硬盘数据丢失的情况屡见不鲜。如果您正陷入这样的困境&#xff0c;您可能会好奇恢复失去的数据需要花费多少钱。本文将为您介绍电脑硬盘数据恢复的一般…...

服务运营 | MSOR文章精选:远程医疗服务中的统计与运筹(二)

作者信息&#xff1a;王畅&#xff0c;陈盈鑫 编者按 在上一期中&#xff0c;我们分享了与远程医疗中运营管理问题相关的两篇文章。其一发表在《Stochastic Systems》&#xff0c;旨在使用排队论与流体近似的方法解决远程医疗中资源配置的问题&#xff1b;其二发表在《Managem…...

QT(9.3)定时器,绘制事件

作业&#xff1a; 自定义一个闹钟 pro文件&#xff1a; QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecat…...

python opencv

保存直播流生存逐个图片 import cv2 from threading import Threadclass ThreadedCamera(object):def __init__(self, source 0):self.capture cv2.VideoCapture(source)self.thread Thread(target self.update, args ())self.thread.daemon Trueself.thread.start()sel…...

QProcess 调用 ffmpeg来处理音频

项目场景&#xff1a; 在文章 qt 实现音视频的分贝检测系统中&#xff0c;实现的是边播放变解析音频数据来统计音频的分贝大小&#xff0c;并不满足实际项目的需求&#xff0c;有的视频声音正常&#xff0c;有的视频声音就偏低&#xff0c;即使放到最大音量声音也是比较小&…...

“深入探究SpringMVC的工作原理与入门实践“

目录 引言1. 什么是SpringMVC?1.1. 模型1.2. 视图1.3. 控制器 2. SpringMVC的工作流程2.1. 客户端发送请求2.2. DispatcherServlet的处理2.3. 处理器映射器的使用2.4. 处理器的执行2.5. 视图解析器的使用2.6. 视图的渲染 3. SpringMVC的核心组件4. 弹簧MVC总结 引言 SpringMV…...

【Node.js】Node.js安装详细步骤和创建Express项目演示

Node.js是一个开源的、跨平台的JavaScript运行环境&#xff0c;用于在服务器端运行JavaScript代码。它提供了一个简单的API&#xff0c;可以用于开发各种网络和服务器应用程序。 以下是Node.js的安装和使用的详细步骤和代码示例&#xff1a; 1、下载Node.js 访问Node.js官方…...

栈和队列OJ

一、括号的匹配 题目介绍&#xff1a; 思路&#xff1a; 如果 c 是左括号&#xff0c;则入栈 push&#xff1b;否则通过哈希表判断括号对应关系&#xff0c;若 stack 栈顶出栈括号 stack.pop() 与当前遍历括号 c 不对应&#xff0c;则提前返回 false。栈 stack 为空&#xff1…...

Bootstrap的CSS类积累学习

要看哪个的介绍&#xff0c;搜索关键词就行了。 001-container 这是Bootstrap中定义的一个CSS类&#xff0c;它用于创建一个具有固定宽度的容器。比如&#xff0c;container类将<div>元素包装成一个固定宽度的容器。详情见&#xff1a;https://blog.csdn.net/wenhao_ir…...

Scala的集合操作之可变数组和不可变数组,可变List集合与不可变List集合,可变Set与不可变Set操作,可变和不可变Map集合和元组操作

Scala的集合操作之&#xff0c;可变数组和不可变数组&#xff0c;可变List集合与不可变List集合 不可变数组 /* traversable/ˈtrvəsəbl/adj.能越过的&#xff1b;可否认的*/ object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr:…...

优化Docker权限管理:配置Docker用户组

Docker 利用 Linux 的用户和组权限来管理对 Docker 守护进程的访问权限。一般情况下&#xff0c;只有 root 用户和属于 docker 用户组的用户才被允许访问 Docker 守护进程。在 Linux 系统上使用 Docker 时&#xff0c;如果您尚未配置 docker 用户组&#xff0c;那么作为非 root…...

python+opencv读取rtsp流

前言 在使用yolov5做物体检测中&#xff0c;需要拉取视频流。分解任务第一步则是需要使用opencv读取rtsp流&#xff0c;只要拿到每一帧图片在进行推理显示即可。 代码 import cv2 def read_rtsp():cap cv2.VideoCapture(rtsp://admin:Vrc123456192.168.2.226:554)fourcc c…...

linux入门---动静态库的加载

目录标题 为什么会有动态库和静态库静态库的实现动态库的实现动静态库的加载 为什么会有动态库和静态库 我们来模拟一个场景&#xff0c;首先创建两个头文件 根据文件名便可以得知add.h头文件中存放的是加法函数的声明&#xff0c;sub.h头文件中存放的是减法函数的声明&#…...

计算机竞赛 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…...

【Yolov5+Deepsort】训练自己的数据集(3)| 目标检测追踪 | 轨迹绘制 | 报错分析解决

&#x1f4e2;前言&#xff1a;本篇是关于如何使用YoloV5Deepsort训练自己的数据集&#xff0c;从而实现目标检测与目标追踪&#xff0c;并绘制出物体的运动轨迹。本章讲解的为第三部分内容&#xff1a;数据集的制作、Deepsort模型的训练以及动物运动轨迹的绘制。本文中用到的数…...

docker desktop如何一键进入容器内部

对着对应的容器 点击 view files...

多机单目标跟踪Cross-Drone Transformer Network for Robust Single Object Tracking

1. 摘要 无人机已被广泛用于各种应用&#xff0c;如空中摄影和军事安全&#xff0c;因为与固定摄像机相比&#xff0c;无人机具有高机动性和广阔的视野。多架无人机跟踪系统可以通过收集不同视角的互补视频片段来提供丰富的目标信息&#xff0c;特别是当目标在某些视角下被遮挡…...

手写Mybatis:第7章-SQL执行器的定义和实现

文章目录 一、目标&#xff1a;SQL执行的定义和实现二、设计&#xff1a;SQL执行的定义和实现三、实现&#xff1a;SQL执行的定义和实现3.1 工程结构3.2 SQL执行实现的关系图3.3 执行器的定义和实现3.3.1 Executor 接口3.3.2 BaseExecutor 抽象基类3.3.3 SimpleExecutor 简单执…...

从仿真到真车:如何用CARLA+Autoware搭建你的自动驾驶算法快速迭代工作流?

从仿真到真车&#xff1a;构建CARLAAutoware自动驾驶算法高效迭代体系 自动驾驶算法的开发如同在刀锋上行走——既要保证安全性&#xff0c;又要追求创新速度。当特斯拉的工程师们每天通过影子模式收集数百万英里的真实数据时&#xff0c;大多数团队却受限于路测成本与安全风险…...

立创EDA专业版保姆级避坑指南:从原理图到PCB的53个新手常见操作误区

立创EDA专业版53个致命操作误区全解析&#xff1a;从原理图到PCB的避坑实战手册 第一次打开立创EDA专业版时&#xff0c;那种面对空白画布的茫然感我至今记忆犹新。作为一个从零开始学习电子设计的爱好者&#xff0c;我踩过的坑可能比画过的电路板还多——从原理图上莫名其妙的…...

Embulk高级用法指南:如何实现高效并行处理与数据分片

Embulk高级用法指南&#xff1a;如何实现高效并行处理与数据分片 【免费下载链接】embulk Embulk: Pluggable Bulk Data Loader. 项目地址: https://gitcode.com/gh_mirrors/em/embulk Embulk是一个强大的可插拔批量数据加载器&#xff0c;专为高效处理大规模数据迁移而…...

终极虚拟定位指南:FakeLocation让你的Android设备位置自由

终极虚拟定位指南&#xff1a;FakeLocation让你的Android设备位置自由 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否厌倦了应用的位置限制&#xff1f;想要在社交软件中保…...

IS6201A多相PWM控制器:从架构解析到PCB布局的电源设计实战

1. 项目概述&#xff1a;为什么我们需要关注IS6201A&#xff1f;在电源设计领域&#xff0c;尤其是面对高性能计算、数据中心服务器、高端显卡以及工业自动化设备时&#xff0c;工程师们常常面临一个核心挑战&#xff1a;如何为那些“电老虎”级别的核心芯片&#xff08;比如CP…...

英雄联盟皮肤修改器R3nzSkin:从内存钩子到游戏逆向的完整技术指南

英雄联盟皮肤修改器R3nzSkin&#xff1a;从内存钩子到游戏逆向的完整技术指南 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin R3nzSkin是一款专为《英雄联盟》设计的开源游戏皮肤修改器&a…...

设计个人日常用品消耗周期测算程序,测算洗护生活用品消耗速度,提前规划采购时间。

个人日常用品消耗周期测算程序——基于 Python 的生活消耗建模实验一、实际应用场景描述在城市生活中&#xff0c;大多数人都会遇到这些情况&#xff1a;- 洗发水、牙膏、洗衣液突然用完- 临时补货导致时间成本增加- 囤货过多造成过期或占用空间- 无法判断“多久买一次才合理”…...

FPGA设计实战:别再乱用复位了!同步、异步与异步复位同步释放的Verilog代码避坑指南

FPGA设计实战&#xff1a;复位电路设计的黄金法则与Verilog避坑指南 在FPGA开发的世界里&#xff0c;复位电路就像交响乐团的指挥——它决定了整个系统能否从混沌走向有序。许多工程师往往低估了复位设计的重要性&#xff0c;直到项目后期遭遇难以追踪的亚稳态问题或时序收敛失…...

数据库安全与权限管理

数据库安全与权限管理 1. 技术分析 1.1 数据库安全概述 数据库安全是保护数据资产的关键&#xff1a; 安全威胁未授权访问: 密码泄露SQL注入: 恶意SQL数据泄露: 敏感信息暴露数据篡改: 非法修改安全措施:访问控制加密存储审计日志1.2 权限管理 权限级别全局权限: ALL PRIVILEGE…...

生产报工软件哪个好用?工厂扫码报工神器:企丰小工单详细介绍

现在很多中小型加工厂、五金机械、汽配、组装制造工厂&#xff0c;还在使用纸质单据手写报工。每天员工手写工单、文员加班录表、月底核算计件工资头疼不已。不仅工序混乱、产量统计不准&#xff0c;还容易出现虚报产量、工序漏报、薪资对账纠纷等问题。想要数字化管理&#xf…...