Unity的相机跟随和第三人称视角

Unity相机跟随和第三人称视角

  • 介绍
  • 镜头视角
    • 跟随人物方向进行旋转的镜头视角
    • 固定球和人的镜头视角
  • 思路
    • 跟随人物方向进行旋转的镜头视角
    • 固定球和人的镜头视角
  • 镜头旋转代码
  • 人物移动的参考代码
  • 注意

介绍

最近足球项目的镜头在做改动,观察了一下实况足球的视角,发现他有多种镜头模式,带球时跟随人物进行旋转的第三人称视角,不带球时镜头锁定人和球都能看到的视角,其实还有很多镜头视角,这里我主要选择这两个来讲一下做一个demo。(我这里的demo不会做的很细大概做一个出来,他的镜头很细致细致到旋转多少度才会有反馈,并不是实时旋转反馈的)

镜头视角

跟随人物方向进行旋转的镜头视角

请添加图片描述

固定球和人的镜头视角

请添加图片描述

这里大家可以参考一下,因为如果要做细致的话其实还有很多需要写的地方,这里我也只是做了个简单的demo给需要类似这种镜头的伙伴一个思路。

思路

跟随人物方向进行旋转的镜头视角

参考我上面的这个gif,其实可以观察的出来,其实相机的是始终在你控制的人物正后上方,这样只需要计算出来相机应该在的位置,然后用现在的位置与最终的位置做一个lerp差值移动,缓慢移动到最终位置。

固定球和人的镜头视角

根据上面的图我们大概可以看出来,相机是始终以球和人为中心,转向也始终是球和人,相机的位置这里就是球到人连线的后方,旋转方向也是这个反向量,这块也很好理解。

镜头旋转代码

这里我不做太多的解释了,大家应该都看得懂。
target是相机跟随的目标
football是附属固定的次要目标
offset是相机的高和前后距离
还有两个平滑度参数也可以进行调整
这个直接挂在相机上即可

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FollowCamera : MonoBehaviour
{public Transform target; // 要跟随的目标对象public Transform football; // 其次要跟随的目标public Vector2 offset = new Vector2(2, 5);   // 相机与目标之间的偏移量public float smoothSpeed = 0.125f; // 相机跟随平滑度public float rotateSpeed = 0.125f;public bool IsHasBall = true;void LateUpdate(){if (target == null)return;if (Input.GetKeyDown(KeyCode.Q)) {IsHasBall = !IsHasBall;}if (IsHasBall){Vector3 desiredPosition = target.position + Vector3.up * offset.y - target.forward * offset.x;Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);transform.position = smoothedPosition;// 获取目标对象的正前方Vector3 lookDirection = target.forward;// 使用 Quaternion.LookRotation 方法计算相机的旋转方向Quaternion targetRotation = Quaternion.LookRotation(lookDirection);// 应用旋转transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, rotateSpeed);}//没有球的状态else{//自身到足球的单位向量Vector3 dir = (target.position - football.position).normalized;Vector3 desiredPosition = target.position + Vector3.up * offset.y + dir * offset.x;Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);transform.position = smoothedPosition;//足球设置位置//求出自己和球的中点,让相机朝向这个中点Vector3 tar = ((target.position + football.position) * 0.5f - smoothedPosition).normalized;// 获取目标对象的正前方Vector3 lookDirection = tar;// 使用 Quaternion.LookRotation 方法计算相机的旋转方向Quaternion targetRotation = Quaternion.LookRotation(lookDirection);// 应用旋转transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, rotateSpeed);}}
}

人物移动的参考代码

人物移动的有很多种方式,这里我为了测试用了个比较简单的方式去做,参考一下即可
正常的人物移动是需要按照镜头的方向前进后退等,这里我只是为了方便测试没有写的很细。

using UnityEngine;public class RoleCtrlTest : MonoBehaviour
{public float moveSpeed = 5f; // 人物移动速度public float rotationSpeed = 180f; // 人物转向速度void Update(){// 获取玩家的输入float moveHorizontal = Input.GetAxis("Horizontal");if (moveHorizontal == 0){}else if (moveHorizontal > 0){transform.Rotate(Vector3.up, rotationSpeed * Time.deltaTime);}else if (moveHorizontal < 0){transform.Rotate(Vector3.up, -rotationSpeed * Time.deltaTime);}if (Input.GetKey(KeyCode.W)){transform.Translate(transform.forward * moveSpeed * Time.deltaTime, Space.World);transform.position += transform.forward * moveSpeed * Time.deltaTime;}}
}

注意

镜头其实还有很多的插件可以使用,比如Cinemachine插件,其实还有很多也不举例子了,因为插件想要符合多种镜头模式需要长时间经历注入,所以我选择了手写一个。
感谢大家的支持和关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/267221.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html基本标签

<h1></h1> <p></p> h是标签从h1~h6&#xff0c;没用h7,h8 p是段落 <a href"https://www.educoder.net">Educoder平台</a> href可以指定链接进行跳转 <img src"https://www.educoder.net/attachments/download/2078…

跨境知识分享:什么是动态IP?和静态IP有什么区别?

对于我们跨境人来说&#xff0c;清楚地了解IP地址、代理IP等这些基础知识&#xff0c;并学会正确地使用IP地址对于保障店铺的安全性和稳定性至关重要&#xff0c;尤其是理解动态IP和静态IP之间的区别&#xff0c;以及如何利用这些知识来防止账号关联&#xff0c;对于每个电商卖…

深入理解分库、分表、分库分表

前言 分库分表&#xff0c;是企业里面比较常见的针对高并发、数据量大的场景下的一种技术优化方案&#xff0c;所谓"分库分表"&#xff0c;根本就不是一件事儿&#xff0c;而是三件事儿&#xff0c;他们要解决的问题也都不一样&#xff0c;这三个事儿分别是"只…

Nodejs 第四十二章(jwt)

什么是jwt? JWT&#xff08;JSON Web Token&#xff09;是一种开放的标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应用间传递信息的一种方式。它是一种基于JSON的安全令牌&#xff0c;用于在客户端和服务器之间传输信息。 https://jwt.io/ JWT由三部分组成&…

Qt 自定义长条进度条(类似播放器进度条)

1.运行界面 2.步骤 其实很简单。 2.1绘制底图圆角矩形 2.2绘制播放进度圆角矩形 参考&#xff1a;painter绘图 3.源码 #pragma once#include <QWidget> #include <QLabel> #include <QHBoxLayout> #include <QMouseEvent> #include <QDebug&g…

探索Redis 6.0的新特性

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存中数据结构存储系统&#xff0c;通常被用作缓存、消息队列和实时数据处理等场景。它的简单性、高性能以及丰富的数据结构支持使其成为了众多开发者和企业的首选。在Redis 6.0版本中&#xff0c;引入了一…

NVMe开发——PCIe复位

简介 PCIe中有4种复位机制&#xff0c;早期的3种被称为传统复位(Conventional Reset)。传统复位中的前2种又称为基本复位(Fundamental Resets)&#xff0c;分别为冷复位(Cold Reset)&#xff0c;暖复位(Warm Reset)。第3种复位为热复位(Hot Reset)。第4种复位被称为功能级复位…

SQL面试题(2)

第一题 创建trade_orders表: create table `trade_orders`( `trade_id` varchar(255) NULL DEFAULT NULL, `uers_id` varchar(255), `trade_fee` int(20), `product_id` varchar(255), `time` varchar(255) )ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_…

【机器学习基础】层次聚类-BIRCH聚类

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;相对完整的机器学习基础教学&#xff01; ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战…

如何将视频的声音转换成音频?视频提取音频的小妙招

在数字化时代&#xff0c;视频和音频是我们生活中不可或缺的元素。有时候&#xff0c;我们可能只需要视频中的音频部分&#xff0c;这时就需要将视频的声音转换成音频文件。那么&#xff0c;如何实现这一操作呢&#xff1f;本文将为您介绍几种简单而实用的小妙招。 方法一&…

朱元璋如何处理十万女俘让蒙古人险些灭绝

明太祖朱元璋的铁血手腕&#xff1a;十万女俘与蒙古人的灭顶之灾 在中国历史上&#xff0c;明太祖朱元璋以其卓越的领导才能和深谋远虑的政治智慧&#xff0c;开创了明朝的辉煌篇章。然而&#xff0c;在他登基称帝的背后&#xff0c;却隐藏着一段鲜为人知的残酷往事。今天&…

抽象类、模板方法模式

抽象类概述 在Java中abstract是抽象的意思&#xff0c;如果一个类中的某个方法的具体实现不能确定&#xff0c;就可以申明成abstract修饰的抽象方法&#xff08;不能写方法体了&#xff09;&#xff0c;这个类必须用abstract修饰&#xff0c;被称为抽象类。 抽象方法定义&…

202435读书笔记|《半小时漫画中国史》——读点经济学与历史,生活更美好,趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有

202435读书笔记|《半小时漫画中国史》——读点经济学与历史&#xff0c;生活更美好&#xff0c;趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有 1. 土地政策、度量衡及税收2. 商鞅变法3. 西汉经济4. 西汉盐铁大辩论5. 西汉丝绸之路 《半小时漫画中国史&#xff1a;经济…

Day09:基础入门-算法逆向散列对称非对称JS源码逆向AESDESRSASHA

目录 算法加密-概念&分类&类型 加密解密-识别特征&解密条件 解密实例-密文存储&数据传输 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&am…

2024年2月最新微信域名检测拦截接口源码

这段PHP代码用于检测指定域名列表中的域名是否被封。代码首先定义了一个包含待检测域名的数组 $domainList&#xff0c;然后遍历该数组&#xff0c;对每个域名发送HTTP请求并检查响应内容以判断域名是否被封。 具体步骤如下&#xff1a; 1. 定义待检测的域名列表。 2. 遍历域名…

将法律条文很美观的复制到word上

前言 目前很多法律条款都没有现成的PDF或者word格式的供大家下载&#xff0c;这个时候呢&#xff0c;领导又要求你帮他搞定&#xff0c;这就很。。。。 步骤 复制全部条款到word中使用wps的排版功能&#xff0c;将空格和空段落全部移除 3. 设置好你需要的格式 标题&#xff…

python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析

文章目录 0 前言课题背景分析方法与过程初步分析&#xff1a;总体流程&#xff1a;1.数据探索分析2.数据预处理3.构建模型 总结 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到…

Flink SQL 中的流式概念:状态算子

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

git安装与使用4.3

一、git的安装 1、下载git包 下载git包url&#xff1a;https://git-scm.com/download/win 下载包分为&#xff1a;64位和32位 2、点击安装包 2、选择安装路径 3、 点击下一步 4、点击next 5、点击next 6、点击next 7、 8、 9、 10、 11、 12、在桌面空白处&#xff0c;右键…

k8s 存储卷详解与动静部署详解

目录 一、Volume 卷 1.1 卷类型 emptyDir &#xff1a; hostPath&#xff1a; persistentVolumeClaim (PVC)&#xff1a; configMap 和 secret&#xff1a; 二、 emptyDir存储卷 2.1 特点 2.2 用途&#xff1a; 2.3 示例 三、 hostPath存储卷 3.1 特点 3.2 用途 …