当前位置: 首页 > 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 简单执…...

GIL消失后的混沌现场:共享对象修改异常、原子性丢失、引用计数溢出,一文收全7种致命报错及防御代码模板

第一章&#xff1a;GIL消失后的并发危机全景图当CPython的全局解释器锁&#xff08;GIL&#xff09;真正消失&#xff0c;Python将首次具备原生、安全的多线程并行执行能力。但这并非一劳永逸的性能飞跃&#xff0c;而是一场系统级并发范式的重构风暴——内存模型、对象生命周期…...

IEC102协议报文解析:从格式到传输的实战指南

1. IEC102协议基础入门&#xff1a;电力系统的"语言密码" 第一次接触IEC102协议时&#xff0c;我完全被那些十六进制代码和术语搞晕了。直到有一次在变电站调试电表&#xff0c;看到主站和终端设备用这种"暗号"流畅对话&#xff0c;才真正理解它的价值。简…...

3分钟快速上手:用BepInEx为Unity游戏添加无限可能的终极插件框架

3分钟快速上手&#xff1a;用BepInEx为Unity游戏添加无限可能的终极插件框架 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 你是否曾想过为心爱的Unity游戏添加新功能&#xff0c…...

AIGC内容创作流水线:Qwen3-ASR-0.6B赋能语音素材自动化文本化

AIGC内容创作流水线&#xff1a;Qwen3-ASR-0.6B赋能语音素材自动化文本化 你有没有过这样的经历&#xff1f;录完一段精彩的课程讲解、一次深度的访谈对话&#xff0c;或者一段灵光乍现的语音随笔&#xff0c;看着长达几十分钟的音频文件&#xff0c;一想到要把它整理成文字稿…...

AI手势识别从入门到应用:彩虹骨骼版MediaPipe Hands全流程解析

AI手势识别从入门到应用&#xff1a;彩虹骨骼版MediaPipe Hands全流程解析 1. 手势识别技术概述 手势识别作为人机交互的重要分支&#xff0c;正在改变我们与数字世界的互动方式。想象一下&#xff0c;无需触碰任何设备&#xff0c;仅凭手势就能控制音乐播放、浏览照片或操作…...

表格拖拽排序实战:从业务需求到代码落地的全链路指南

表格拖拽排序实战&#xff1a;从业务需求到代码落地的全链路指南 【免费下载链接】ngx-datatable ✨ A feature-rich yet lightweight data-table crafted for Angular 项目地址: https://gitcode.com/gh_mirrors/ng/ngx-datatable 在现代Web应用中&#xff0c;数据表格…...

跨平台技术突破:OptiScaler如何让AI超分技术普适化

跨平台技术突破&#xff1a;OptiScaler如何让AI超分技术普适化 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 问题诊断&#xff1…...

别再用requests了!用Python 3.11+的httpx和BeautifulSoup4爬取豆瓣电影Top250(附完整代码)

用Python 3.11的httpx和BeautifulSoup4高效爬取豆瓣电影Top250 在Python爬虫领域&#xff0c;技术栈的迭代速度令人目不暇接。十年前流行的urllib2如今已被更现代、更高效的库所取代。本文将带你使用Python 3.11的最新特性&#xff0c;结合httpx和BeautifulSoup4这两个强力工具…...

GLM-OCR在办公场景的应用:快速将合同、票据图片转为可编辑文本

GLM-OCR在办公场景的应用&#xff1a;快速将合同、票据图片转为可编辑文本 1. 引言 每天面对堆积如山的纸质合同和发票&#xff0c;财务和法务同事最头疼的是什么&#xff1f;是手动录入时眼花缭乱的数字&#xff0c;还是反复核对时的精神紧绷&#xff1f;我曾见过一位财务专…...

AI净界开箱即用:无需配置,上传图片秒出透明背景,亲测好用

AI净界开箱即用&#xff1a;无需配置&#xff0c;上传图片秒出透明背景&#xff0c;亲测好用 1. 产品核心价值 在电商设计、内容创作和数字营销领域&#xff0c;背景移除是最频繁却又最耗时的图像处理需求之一。传统方法要么需要专业软件技能&#xff0c;要么效果难以令人满意…...