Unity中的数学应用 之 角色移动中单位化向量的妙用 (小学难度)

news2024/11/29 10:53:16

        最近准备从简单到困难跟几个教程用以加强自己的业务能力,相信很多小伙伴都做过胡闹厨房这一个案例,其实这个案例比较初级,但是也包含了很多平常可能注意不到小细节,所以我就以它为举例,拓展其中的数学知识

       CodeMonkey教程: https://www.youtube.com/watch?v=QDWlGOocKm8

        Siki学院汉化教程:如何使用Unity开发分手厨房(胡闹厨房)-Unity2023 - SiKi学院|SiKi学堂 - unity|u3d|虚幻|ue4/5|java|python|人工智能|视频教程|在线课程

目录

1.情景 发现问题

 2.解决问题

​编辑3.总结


 

版本:Unity6

模板:3D核心(渲染管线:URP)

1.情景 发现问题

        角色移动大家都不陌生,无论是加position值,还是调用translate,rigidbody/2D中的三个api都可以做到

        就比如:

    float x = Input.GetAxisRaw("Horizontal");
    float z = Input.GetAxisRaw("Vertical");

    Vector3 move = new Vector3(x, 0, z) * Time.deltaTime * speed;

   transform.position += move;

        但是这样做有个问题就是角色斜角位移值与xz轴上不一致 不信把代码改成下面这样,来看一下move的值

        其中:move.magnitude是求向量模长,对三维向量模长公式为:

d7a6f9a926c84831901415add87a2b4c.png

  Vector3 move = new Vector3(x, 0, z);//* Time.deltaTime * speed;        
  Debug.Log(move.magnitude);

f6a2a33eadcd4bba8aaf93974003aa63.gif 

斜向移动的时候发现move的值变成了1.4这是怎么来的?

当组合键比如wd输入的时候 move =(1,0,1)所以模长如下

99945047bad341f6b660ce2dd9891e8b.png

   但是我们预期的正常位移值应该是这样子的                   却变成了这样子:

 b33416bab8a54bf493d8e2291bf0c3dc.png                        fc9bebaad9e54b99921ef31123bbbb6c.png

 2.解决问题

        我们要将move的向量值单位化

        单位向量的特点为模长为1 这样就完美符合了Radius=1的一个圆

        之后由speed去控制具体的移动速度(time.deltatime不固定但是非常小 比如0.0056和0.0081,所以其对数量级影响大但对单位下的值影响小)

单位化三维向量:79bc312f11c7452e9f23001bac1de72d.png

几何表现:向量的各分量可能不为1,但是加起来的模长肯定为1

 448da5d084fe49b08ff213657667a75d.png

也就是说: 

  Vector3 move = new Vector3(x, 0, z);//* Time.deltaTime * speed;
  move = move.normalized;
  Debug.Log(move.magnitude);

 这样无论我怎么按斜方向组合键都是130cf83b2382c48179660ea84c6856a6d.gif

因为我的x和z的值来源都是input.getaxisraw 所以固定为1

这些情况下 move=(1,0,0)或者(0,0,1)模长=1

斜角的计算因为将(1,0,1)更改成了(1/根号2,0,1/根号2),所以模长如下

6a1ca5e38caf453ab1d0c63b9715f606.png
3.总结

        虽然小学生来了都能解决这个单位化向量的问题,但是其确实线性代数中的根基,更常应用于那些需要着重关注方向而淡化向量长度差异的场景

        比如在图形学中确定光照方向、计算法线方向等,使用单位向量可以方便地进行向量点积、叉积等运算来获取角度、判断位置关系等;

 

 

 

 

 

 

 

       

         

       

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

远程视频验证如何改变商业安全

如今,商业企业面临着无数的安全挑战。尽管企业的形态和规模各不相同——从餐厅、店面和办公楼到工业地产和购物中心——但诸如入室盗窃、盗窃、破坏和人身攻击等威胁让安全主管时刻保持警惕。 虽然传统的监控摄像头网络帮助组织扩大了其态势感知能力,但…

简释下oracle的set define的使用场景

我们在使用oracle的时候,有些菜单表存在url字段,url字段中存在这&字符。但我们通过sql语句进行插入表记录的时候,数据库会提示要我们输入变量值。这个时候有些人难免会不知所措,今天告诉大家一个非常简单的办法解决。 一、问…

在ACK集群中自动化执行Ray Job

企业在管理集群资源时面临的主要挑战是任务量庞大而资源有限。为解决这一问题,需要优先将资源分配给关键部门或个人,并保持高度的灵活性以随时调整资源分配。本文将介绍如何提高企业集群资源的利用率,并通过统一的任务管理平台自动化处理来自…

分布式锁的实现原理

作者:来自 vivo 互联网服务器团队- Xu Yaoming 介绍分布式锁的实现原理。 一、分布式锁概述 分布式锁,顾名思义,就是在分布式环境下使用的锁。众所周知,在并发编程中,我们经常需要借助并发控制工具,如 mu…

【北京迅为】iTOP-4412全能版使用手册-第十九章 搭建和测试TFTP服务器

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

webrtc 3A移植以及实时处理

文章目录 前言一、交叉编译1.Pulse Audio webrtc-audio-processing2.交叉编译 二、基于alsa进行实时3A处理1.demo源码2.注意项3.效果展示 总结 前言 由于工作需要,硬件3A中的AEC效果实在太差,后面使用SpeexDSP的软3A,效果依旧不是很好&#…

Python学习第十天--处理CSV文件和JSON数据

CSV:简化的电子表格,被保存为纯文本文件 JSON:是一种数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,以JavaScript源代码的形式将信息保存在纯文本文件中 一、csv模块 CSV文件中的每行代表电…

Layui表格的分页下拉框新增“全部”选项

1、首先需要从后端接口获取表格的全部数据长度,这里以100为例。 2、根据请求到的数据进行表格的渲染。示例代码: let pageSize 5 let pageNo 1 let count 100 table.render({elem: XXX,done: function(res, curr, count){pageNo curr; // 将当前选…

CBK7运营安全

1 运营部门的角色 ​ prudent man、due care(按要求执行)VS due diligence(承担管理者责任) ​ 应尽关注:执行了负责任的动作降低了风险。 ​ 应尽职责:采取了所有必要的安全步骤以了解公司或个人的实际风…

AIGC引领金融大模型革命:未来已来

文章目录 金融大模型的应用场景1. **金融风险管理**2. **量化交易**3. **个性化投资建议**4. **金融欺诈检测和预防**5. **智能客户服务** 金融大模型开发面临的挑战应对策略《金融大模型开发基础与实践》亮点内容简介作者简介获取方式 在AIGC(Artificial Intellige…

Linux操作系统2-进程控制3(进程替换,exec相关函数和系统调用)

上篇文章:Linux操作系统2-进程控制2(进程等待,waitpid系统调用,阻塞与非阻塞等待)-CSDN博客 本篇代码Gitee仓库:Linux操作系统-进程的程序替换学习 d0f7bb4 橘子真甜/linux学习 - Gitee.com 本篇重点:进程替换 目录 …

Java函数式编程+Lambda表达式

文章目录 函数式编程介绍纯函数Lambda表达式基础Lambda的引入传统方法1. 顶层类2. 内部类3. 匿名类 Lambda 函数式接口(Functional Interface)1. **函数式接口的定义**示例: 2. **函数式接口与Lambda表达式的关系**关联逻辑:示例&…

DI依赖注入详解

DI依赖注入 声明了一个成员变量(对象)之后,在该对象上面加上注解AutoWired注解,那么在程序运行时,该对象自动在IOC容器中寻找对应的bean对象,并且将其赋值给成员变量,完成依赖注入。 AutoWire…

自动化运维(k8s)之微服务信息自动抓取:namespaceName、deploymentName等全解析

前言:公司云原生k8s二开工程师发了一串通用性命令用来查询以下数值,我想着能不能将这命令写成一个自动化脚本。 起初设计的 版本一:开头加一条环境变量,执行脚本后,提示输入:需要查询的命名空间&#xff0c…

[Python/网络安全] Git漏洞之Githack工具基本安装及使用详析

前言 本文仅分享Githack工具基本安装及使用相关知识,不承担任何法律责任。 Git是一个非常流行的开源分布式版本控制系统,它被广泛用于协同开发和代码管理。许多网站和应用程序都使用Git作为其代码管理系统,并将其部署到生产环境中以维护其代…

解决水库安全监测难题 长期无外接电源 低功耗设备智能化监测系统

解决水库安全监测难题 长期无外接电源 低功耗设备智能化监测系统 国内某水库安全监测项目需要监测点分散,且无外接供电。项目年限为4年,不允许使用太阳能电板。因此,我们需要设备具备低功耗且内置电池的功能。为了满足客户的要求,…

蓝桥杯c++算法秒杀【6】之动态规划【上】(数字三角形、砝码称重(背包问题)、括号序列、组合数问题:::非常典型的必刷例题!!!)

下将以括号序列、组合数问题超级吧难的题为例子讲解动态规划 别忘了请点个赞收藏关注支持一下博主喵!!!! ! ! ! ! 关注博主,更多蓝桥杯nice题目静待更新:) 动态规划 一、数字三角形 【问题描述】 上图给出了…

AD软件如何快速切换三维视图,由2D切换至3D,以及如何恢复

在Altium Designer软件中,切换三维视图以及恢复二维视图的操作相对简单。以下是具体的步骤: 切换三维视图 在PCB设计界面中,2D切换3D,快捷键按住数字键盘中的“3”即可切换; 快捷键ctrlf(或者vb快捷键也…

学习threejs,使用CubeCamera相机创建反光效果

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️CubeCamera 立方体相机 二、…

长时间无事可做是个危险信号

小马加入的是技术开发部,专注于Java开发。团队里有一位姓隋的女同事,是唯一的web前端工程师,负责页面开发工作,比小马早两个月入职。公司的项目多以定制化OA系统为主,后端任务繁重,前端工作相对较少。在这样…