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

Unity中人物控制器

   在Unity中控制器是很常见的功能,一般的人物控制器有两种方法,一种是通过代码实现,另外一种就是通过Unity中的API实现。
  这里主要介绍第一种方法。

  首先对控制器步骤进行分析。
步骤1:通过方向键控制人物移动。
步骤2:控制摄像机跟随人物

步骤1:通过方向键控制人物移动。
这里要注意,你的人物是否需要添加刚体组件,这里我选择不加刚体组件,通过transform来控制人物移动。
具体代码如下:

public class PlayerCtrl : MonoBehaviour
{public float moveSpeed=5f;public float rotateSpeed = 30f;void Update(){float h=   Input.GetAxis("Horizontal");//水平轴float v = Input.GetAxis("Vertical");//垂直轴float mouseX=Input.GetAxis("Mouse X");//获得鼠标沿屏幕X方向移动this.transform.Translate(0, 0, v*moveSpeed*Time.deltaTime,Space.Self);//向z方向移动if (Input.GetMouseButton(1))//鼠标右键{this.transform.Rotate(0, mouseX * rotateSpeed * Time.deltaTime, 0, Space.Self);//绕y轴移动(鼠标右键沿屏幕X方向移动控制旋转)}this.transform.Rotate(0, h * rotateSpeed * Time.deltaTime, 0, Space.Self);//绕y轴移动(方向键控制旋转)}
}
代码分析:
1、人物移动两大要素:移动与旋转
2、输入———Input.GetAxis();
3、输出———transform.Translate()  transform.Rotate()

2、控制摄像机跟随人物

public class CameraCtrl2 : MonoBehaviour {private Transform player;public float distance;//摄像机距离玩家的距离,zpublic float height;//摄像机距离玩家的高度,yprivate Vector3 offset;//玩家到摄像机的偏移量,用于调节尽镜头的远近public Vector2 rotSpeed = new Vector2(120, 120);public float scrollSpeed = 1;//鼠标滚动速度public bool fps = false;void Start(){player = GameObject.FindWithTag("Player").transform;//根据标签找到playerif (fps){distance = 0;height = 0;}BehidePlayer();}private void BehidePlayer(){transform.position = player.position;//摄像机位置初始化transform.rotation = player.rotation;//摄像机角度初始化transform.Translate(0,height,-distance,Space.Self);//摄像机自动到玩家的背后transform.LookAt(player);//看向目标offset = transform.position - player.position;}void LateUpdate()//当物体在Update中移动时,跟随物体的相机可以在LateUpdate中实现。{transform.position = offset + player.position;//右键跟随玩家背后float xDeg = 0;//绕x轴旋转的角度float yDeg = 0;//绕y轴旋转的角度if (Input.GetMouseButton(1)){//鼠标往上,摄像机往下,所以这里需要用“-”号xDeg = -Input.GetAxis("Mouse Y") * rotSpeed.x * Time.deltaTime;yDeg = player.rotation.eulerAngles.y - transform.rotation.eulerAngles.y;}else if(Input.GetMouseButton(0)){//左键绕玩家自由选择视角xDeg = -Input.GetAxis("Mouse Y") * rotSpeed.x * Time.deltaTime;yDeg = -Input.GetAxis("Mouse X") * rotSpeed.y * Time.deltaTime;}//以player.postion为中心点,摄像机x轴为轴,旋转xDeg度transform.RotateAround(player.position,transform.right,xDeg);//以player.postion1为中心点,玩家的y轴为轴,旋转yDeg度transform.RotateAround(player.position, player.up, yDeg);//转完以后需要更新offsetoffset = transform.position - player.position;float delta = Input.GetAxis("Mouse ScrollWheel") * scrollSpeed * Time.deltaTime;if (delta != 0 && fps){fps = false;offset = -transform.forward;}else if (Mathf.Abs(offset.magnitude)<= 1f){fps = true;offset = Vector3.zero;}Vector3 offsetNorm = offset.normalized;//单位化向量float offsetLen = offset.magnitude;//取模offsetLen -= delta;//模长-=鼠标滚动offset = offsetNorm * offsetLen;//单位化*模长}
}
代码分析
这部分可以分出几个部分来分析
1、初始化摄像机2、视角的转换3、第三人称与第一人称的转换重点难点
通过xDeg、yDeg记录视角转换
通过transform.RotateAround()方法实现摄像机的视角转换
通过
offset = transform.position - player.position;
transform.position = offset + player.position;
实现摄像机跟随移动

相关文章:

Unity中人物控制器

在Unity中控制器是很常见的功能&#xff0c;一般的人物控制器有两种方法&#xff0c;一种是通过代码实现&#xff0c;另外一种就是通过Unity中的API实现。   这里主要介绍第一种方法。 首先对控制器步骤进行分析。 步骤1&#xff1a;通过方向键控制人物移动。 步骤2&#xff…...

零钱兑换-输出组合数

1.暴力递归 &#xff08;1&#xff09;剩余金额小于0&#xff0c;无解 剩余金额等于0&#xff0c;有解 剩余金额大于0&#xff0c;继续递归 &#xff08;2&#xff09;从大的硬币到小的硬币&#xff0c;可以减少循环次数 #include <bits/stdc.h> using namespace std;…...

Mybatis 小结

一、Mybatis 基本构成 MyBatis的整体分为基础支持层、核心处理层、接口。 1.1、基础支持层 1.1.1、数据源模块 MyBatis自身提供了相应的数据源实现&#xff0c;也提供了与第三方接口数据源集成的接口&#xff0c;这些功能都位于数据源模块之中。 1.1.2、事务管理模块 …...

【Cartopy】库的安装和瓦片加载(天地图、高德等)

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 Cartopy基础入门 【Cartopy】库的安装和天地图瓦片加载 【Cartopy】【Cartopy】如何更好的确定边界显示 【Cartopy】【Cartopy】如何丝滑的加载Geojso…...

TCPDF生成PDF文件,含jpjraph生成雷达图

TCPDF生成PDF文件&#xff0c;含jpjraph生成雷达图 依赖自行安装 "tecnickcom/tcpdf": "^6.6","amenadiel/jpgraph": "4"雷达图生成 中文字体添加安装 没有封装&#xff0c;只作为测试案例展示 // 创建新的PDF文档$pdf new \TCPD…...

Flink-串讲面试题

1. 概念 有状态的流式计算框架 可以处理源源不断的实时数据&#xff0c;数据以event为单位&#xff0c;就是一条数据。 2. 开发流程 先获取执行环境env&#xff0c;然后添加source数据源&#xff0c;转换成datastream&#xff0c;然后使用各种算子进行计算&#xff0c;使用s…...

如何培养对技术的热爱

这篇博文主要针对计算机专业相关的同学&#xff0c;对于理工科专业的同学有一定的借鉴意义&#xff0c;对于其他专业的同学&#xff0c;还请自行取舍。 背景 初学计算机&#xff0c;可能并不是每个人都能对其产生兴趣&#xff0c;更不要说从其中获得快乐。对于如何培养兴趣&a…...

Vue响应式数据的原理

在 vue2 的响应式中&#xff0c;存在着添加属性、删除属性、以及通过下标修改数组&#xff0c;但页面不会自动更新的问题。而这些问题在 vue3 中都得以解决。 vue3 采用了 proxy 代理&#xff0c;用于拦截对象中任意属性的变化&#xff0c;包括&#xff1a;属性的读写、属性的…...

pytest fixture 用于teardown工作

fixture通过scope参数控制setup级别&#xff0c;setup作为用例之前前的操作&#xff0c;用例执行完之后那肯定也有teardown操作。这里用到fixture的teardown操作并不是独立的函数&#xff0c;用yield关键字呼唤teardown操作。 举个例子&#xff1a; 输出&#xff1a; 说明&…...

39 printf 的输出到设备层的调试

前言 在前面 printf 的调试 我们只是调试到了 glibc 调用系统调用, 封装了参数 stdout, 带输出的字符缓冲, 以及待输出字符长度 然后内核这边 只是到了 write 的系统调用, 并未向下细看 我们这里 稍微向下 细追一下, 看看 到达设备层面 这里是怎么具体的 impl 的 测试用例…...

数字普惠金融、数字创新与经济增长—基于省级面板数据的实证考察(2011-2021年)

参照陈啸&#xff08;2023&#xff09;的做法&#xff0c;本对来自经济问题《数字普惠金融、数字创新与经济增长——基于省级面板数据的实证考察》一文中的基准回归部分进行复刻。数字普惠金融、数字创新已经成为驱动经济高质量发展的关键。利用省级面板数据&#xff0c;构建固…...

控制renderQueue解决NGUI与Unity3D物体渲染顺序问题

NGUI与Unity3D物体渲染顺序问题&#xff0c;做过UI的各位应该都遇到过。主要指的是UI与Unity制作的特效、3D人物等一同显示时的层次问题。 由于UI与特效等都是以transparent方式渲染&#xff0c;而Unity与NGUI在管理同是透明物体的render queue时实际上互相没有感知&#xff0…...

概率论与数理统计:第二、三章:一维~n维随机变量及其分布

文章目录 Ch2. 一维随机变量及其分布1.一维随机变量1.随机变量2.分布函数 F ( x ) F(x) F(x)(1)定义(2)分布函数的性质 (充要条件)(3)分布函数的应用——求概率3.最大最小值函数 2.一维离散型随机变量及其概率分布(分布律)3.一维连续型随机变量及其概率分布(概率密度)4.一般类型…...

BOLT- 识别和优化热门的基本块

在BOLT中&#xff0c;识别和优化热门的基本块之所以关键&#xff0c;是因为BOLT的主要目标是优化程序以更好地利用硬件特性&#xff0c;特别是指令缓存&#xff08;ICache&#xff09;。以下是BOLT如何识别和优化热门基本块的流程&#xff1a; 收集性能数据: BOLT开始的时候并不…...

Golang 中的 time 包详解(四):函数详解

在日常开发过程中&#xff0c;会频繁遇到对时间进行操作的场景&#xff0c;使用 Golang 中的 time 包可以很方便地实现对时间的相关操作。接下来的几篇文章会详细讲解 time 包&#xff0c;本文讲解一下 time 包中的函数。 func Now() Time 返回当前的系统时间。 package mai…...

【前端 | CSS】5种经典布局

页面布局是样式开发的第一步&#xff0c;也是 CSS 最重要的功能之一。 常用的页面布局&#xff0c;其实就那么几个。下面我会介绍5个经典布局&#xff0c;只要掌握了它们&#xff0c;就能应对绝大多数常规页面。 这几个布局都是自适应的&#xff0c;自动适配桌面设备和移动设备…...

腾讯云宣布VPC网络架构重磅升级,可毫秒级感知网络故障并实现自愈

8月11日&#xff0c;腾讯云宣布VPC&#xff08;Virtual Private Cloud&#xff0c;云私有网络&#xff09;架构重磅升级。新架构采用多项腾讯核心自研技术&#xff0c;能够支撑用户构建业界最大 300万节点超大规模单VPC网络&#xff0c;并将转发性能最大提升至业界领先的200Gbp…...

vue 路由页面跳转

从index.vue跳转到data.vue index.vue <el-table-column label"客户数" align"center" :show-overflow-tooltip"true"><template slot-scope"scope"><router-link :to"/system/enterprise-data/index/ scope.ro…...

Vue toRefs:在Vue中不失去响应式的情况下解构属性

Vue toRefs&#xff1a;在Vue中不失去响应式的情况下解构属性 文章目录 Vue toRefs&#xff1a;在Vue中不失去响应式的情况下解构属性什么是响应式&#xff1f;解构Props的挑战使用toRefs保持响应式结论 在Vue开发中&#xff0c;我们经常会在组件之间传递数据。这时候&#xff…...

自定义element-plus的弹框样式

项目中弹框使用频繁,需要统一样式风格,此组件可以自定义弹框的头部样式和内容 一、文件结构如下: 二、自定义myDialog组件 需求&#xff1a; 1.自定义弹框头部背景样式和文字 2.自定义弹框内容 3.基本业务流程框架 components/myDialog/index.vue完整代码&#xff1a; &…...

Ubuntu服务器全盘加密与远程启动自动化解密实践

1. 为什么需要全盘加密与自动解密&#xff1f; 最近帮朋友配置了一台托管在机房的Ubuntu服务器&#xff0c;遇到个头疼的问题&#xff1a;既要保证数据安全&#xff0c;又要能远程重启。传统方案要么加密不彻底&#xff0c;要么每次开机都得手动输密码&#xff0c;对于无人值守…...

CSS3 按钮悬停时显示手型光标(cursor- pointer)的正确写法

CSS 中 cursor: pointer 需配合伪类 :hover 使用&#xff0c;直接在 button 元素上声明不会生效&#xff1b;正确做法是为 button:hover 单独设置该样式。 css 中 cursor: pointer 需配合伪类 :hover 使用&#xff0c;直接在 button 元素上声明不会生效&#xff1b;正确做…...

终极5个驱动清理技巧:如何彻底解决Windows系统卡顿问题

终极5个驱动清理技巧&#xff1a;如何彻底解决Windows系统卡顿问题 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您的Windows电脑是否变得越来越慢&#xff1f;系统盘空间莫名其妙地减…...

别再只会npm install了!保姆级配置指南:从.npmrc到全局依赖,一次搞定Node.js开发环境

别再只会npm install了&#xff01;保姆级配置指南&#xff1a;从.npmrc到全局依赖&#xff0c;一次搞定Node.js开发环境 刚接触Node.js时&#xff0c;我们总被各种配置问题困扰——为什么安装速度这么慢&#xff1f;为什么全局包找不到&#xff1f;为什么团队成员的依赖版本总…...

BitNet b1.58-2B-4T开源模型应用场景:文档摘要、代码补全、智能客服落地

BitNet b1.58-2B-4T开源模型应用场景&#xff1a;文档摘要、代码补全、智能客服落地 1. 项目概述 BitNet b1.58-2B-4T是一款革命性的开源大语言模型&#xff0c;采用创新的1.58-bit量化技术。这个模型最特别的地方在于它的权重只有-1、0、1三个值&#xff0c;平均每个参数仅占…...

Beyond Compare 5密钥生成器:简单高效的文件对比工具激活方案

Beyond Compare 5密钥生成器&#xff1a;简单高效的文件对比工具激活方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare 5的30天评估期到期而烦恼吗&#xff1f;BCompare…...

无人机送货时如何‘看’得更远?聊聊MPC里的预测时域K和采样时间dt怎么调

无人机送货时如何优化MPC的视野&#xff1a;预测时域K与采样时间dt的工程调参艺术 当无人机在复杂城市环境中执行送货任务时&#xff0c;控制器需要像老司机一样具备"预判能力"——不仅要处理当前的飞行状态&#xff0c;还要提前规划未来几秒甚至十几秒的轨迹。这正是…...

告别黑盒:手把手教你用AssetStudio查看并导出Unity打包后的游戏UI与图片素材

告别黑盒&#xff1a;手把手教你用AssetStudio查看并导出Unity打包后的游戏UI与图片素材 当你被一款游戏的精美UI设计所吸引时&#xff0c;是否好奇过这些视觉元素是如何实现的&#xff1f;作为UI设计师或独立开发者&#xff0c;学习逆向分析成熟作品的资源结构&#xff0c;是提…...

P-MAPS技术:动态安全边界与硬件级内存保护实践

1. P-MAPS技术背景与核心挑战在移动计算领域&#xff0c;安全威胁正呈现指数级增长态势。根据最新的安全研究报告&#xff0c;针对移动设备的恶意软件攻击在2023年同比增长了58%&#xff0c;其中针对金融应用和数据窃取的定向攻击占比高达73%。传统基于签名的反病毒方案在面对零…...

模型黑盒的“翻译官”:LIME如何为单个预测提供局部可解释性

1. 当模型说"不"时&#xff0c;我们该如何理解&#xff1f; 想象一下这样的场景&#xff1a;一位贷款申请人收到银行的自动审批系统发来的拒绝通知&#xff0c;屏幕上冷冰冰地显示"申请未通过"。申请人满脸疑惑&#xff1a;"我信用记录良好&#xff0…...