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

Unity 向量

向量的加减法本文就不再赘述了,本文侧重介绍脚本中的向量写法


一、向量的数乘

定义:k(x,y,z)=(kx,ky,kz)

若向量长度为L,k取1/L,就恰好能让原向量长度变成1,变成了单位向量,这称为向量的标准化 。

由于长度为1的向量很适合表示方向,因此经常会将向量标准化,下面举几个例子:

Vector3 a=new Vector3(2,1,0);
Vector3 na=a/a.magnitude;   //a.magnitude是a的长度,术语叫做“a的模”
//以上写法等价于
Vector3 na2=a.normalized;
//
Vector3 na3=Vector3.Normalized(a);
//
Vector na4=(1/a.magnitude)*a;

以上代码用到的向量的两个常用属性:magnitude(模)和normalized(标准化)。

二、向量的点乘

定义:a · b=|a| · |b|cosα

(x1,y1,z1) · (x2,y2,z2)=x1x2+y1y2+z1z2

物理意义:投影距离

点乘的结果不再是向量,而是一个数,这点要注意一下。

点乘满足交换律,因此a,b谁先谁后都一样。

下面介绍相关脚本

Vector3 a=new Vector3(2,1,0);
Vector3 b=new Vector3(3,0,0);
Vector3 dir_b=b.normalized;
float pa=Vector3.dot(a,dir_b);//dot是点乘函数

 三、向量的叉乘

定义:|a × b|=|a||b|sinα

与点乘不同,叉乘结果是一个新的向量,方向垂直于原来两个向量构成的平面,具体结果用左手定则判断(用左手还是右手与坐标系有关)。

左手定则:手掌沿第一个向量放平,向第二个向量我全,拇指的指向即叉乘方向。如下图

 叉乘不满足交换律,若交换则叉乘方向变相反。即a×b=-b×a

叉乘在游戏开发中的一个重要用途:求法线。

在游戏开发中,平面要区分正反两面,因此法线用向量表示,法线方向就是平面方向,。一般发现长度固定为1以便计算。

用叉乘可以很方便地获取法线。例如,玩家站在地形的一个平面上,想要获取平面的法线,需要先用启发方法获得平面上的任意两个向量,只要这两个向量夹角不为0或180,取它们的叉乘就可以获得法线向量,对镜脚本写法如下

Vector3 a=new Vector3(2,1,1);
Vector3 b=new Vector3(3,0,2);
Vector3 n=Vector3.Cross(a,b);//n为a,b平面的法线。Cross为叉乘
n=n.normalized;//将n标准化

四、Vector3

Vector3属于struct(结构体),这部分给出Vector3的属性、方法、运算符

                                                         Vector3属性

字段或属性说明
x,y,z
normalized得到标准化向量(单位向量)
magnitude得到向量的模,是标量
sqrMagnitude得到模的平方。运算速度比得到模要快,因为少一部开方运算。在仅比较两个长度,不需要求精确求出长度时非常有用

                                                           Vector3方法

方法说明
Cross

向量叉乘

Dot向量点乘
Project()计算向量在另一个向量上的投影
Angle()返回两个向量的夹角
Distance()返回两个向量的距离

Vector3的运算符有还有+,-,*,/,==,!=。

五、向量坐标系的转换

在Unity中,可以使用transform.TransformPoint()方法将局部坐标转换为世界坐标,也可以使用transform.InverseTransformPoint()方法将世界坐标系转换为局部坐标系。

其实也有向量的坐标系转化函数,分别是transform.TransformDirection()和transform.InverseTransformDirection()。

下面举一个实例说明如何通过全局坐标系和局部坐标系改变物体的运动方向:

1.创建一个Cube,设置旋转的Y为300

2.新建脚本CoordinateLocal.cs,内容如下:

using UnityEngine;
public class CoordinateLocal:MonoBehaviour{void Update(){transform.Translate(Vector3.forward*Time.deltaTime);}
}

将脚本挂在Cube上,运行游戏,物体会沿着自身的z轴方向慢慢移动

3.新建脚本CoordinateWorld.cs,内容如下:

using UnityEngine;
public class CoordinateWorld:MonoBehaviour{void Update(){Vector3 v=transform.InverseTransformDirection(Vector3.forward);transform.Translate(v*Time.deltaTime);}
}

将新建的脚本挂到Cube上,取消勾选原来的脚本,运行游戏,发现Cube沿着世界坐标系的z轴方向移动了。下面解释一下原因:

transform.Translate()函数默认是以局部坐标系为基准的,因此在脚本1中,虽然参数为Vetor3.forward,但依然会以局部坐标系的前方为准。

第2个脚本稍微复杂一些。由于Translate默认以局部坐标系为准,因此要把世界坐标系的forward转化为局部坐标系的向量v,然后用v来作为Translate的参数

相关文章:

Unity 向量

向量的加减法本文就不再赘述了,本文侧重介绍脚本中的向量写法 一、向量的数乘 定义:k(x,y,z)(kx,ky,kz) 若向量长度为L,k取1/L,就恰好能让原向量长度变成1,变成了单位向量,这称为向量的标准化 。 由于长度…...

Apache Tomcat AJP协议文件读取与包含

永远也不要忘记能够笑的坚强,就算受伤,我也从不彷徨。 0x01.漏洞情况分析 Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目,作为目前比较流行的Web应用服务器,深受Java爱好者的喜爱,并得到了部分软件开发商的…...

实验10 人工神经网络(1)

1. 实验目的 ①理解并掌握误差反向传播算法; ②能够使用单层和多层神经网络,完成多分类任务; ③了解常用的激活函数。 2. 实验内容 ①设计单层和多层神经网络结构,并使用TensorFlow建立模型,完成多分类任务&#xf…...

OPPO关停哲库业务,工程师造芯何去何从?

5月12日(上周五),新浪科技从OPPO处了解到,OPPO将终止ZEKU业务。3000多人团队突然原地解散,网上唏嘘声一片! ZEKU最初成立于2019年,是OPPO的全资子公司,欧加集团百分之百注资成立。总…...

面试被问麻了....

前几天组了一个软件测试面试的群,没想到效果直接拉满,看来大家对面试这块的需求还是挺迫切的。昨天我就看到群友们发的一些面经,感觉非常有参考价值,于是我就问他还有没有。 结果他给我整理了一份非常硬核的面筋,打开…...

AspNetCore中的配置文件详解

1 配置文件 程序开发中,有些信息是要根据环境改变的,比如开发环境的数据库可能是本地数据,而生产环境下需要连接生产数据库,我们需要把这些信息放到程序外面,在程序运行时通过读取这些外部信息实现不改变程序代码适应…...

实时更新天气微信小程序开发

1.新建一个天气weather项目 2.在app.json中创建一个路由页面 当我们点击保存的时候,微信小程序会自动的帮我们创建好页面 3.在weather页面上书写我们的骨架 4.此时我们的页面很怪,因为没有给它添加样式和值。此时我们给它一个样式。(样式写在…...

css渐变

线性渐变 liner-gradient属性值用来设置线性渐变,第一个参数值是方向,默认是从上往下,往后就是渐变颜色的种类。 background-image:liner-gradient(方向,颜色1,颜色2...) .box {display: flex;width: 400px;height: …...

《斯坦福数据挖掘教程·第三版》读书笔记(英文版) Chapter 2 MapReduce and the New Software Stack

来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 2 MapReduce and the New Software Stack Computing cluster means large collections of commodity hardware, including conventional processors (“compute nodes”) connected by Ethernet …...

HTML零基础快速入门(详细教程)

1&#xff0c;HTML代码特点 <html><head></head><body>hello world!</body> </html>HTML代码有以下特点&#xff1a; html代码是通过标签来组织的&#xff0c;而标签是由尖括号< >组织的&#xff0c;也可被叫作元素&#xff08;ele…...

Kubernetes第5天

第七章 Service详解 本章节主要介绍kubernetes的流量负载组件&#xff1a;Service和Ingress。 Service介绍 ​ 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着…...

RK3568平台开发系列讲解(调试篇)debugfs 分析手段

🚀返回专栏总目录 文章目录 一、enable debugfs二、debugfs API三、使用示例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux 上有一些典型的问题分析手段,从这些基本的分析方法入手,你可以一步步判断出问题根因。这些分析手段,可以简单地归纳为下图: 从这…...

【Spring框架全系列】SpringBoot配置日志文件

&#x1f367;&#x1f367;哈喽&#xff0c;大家好&#xff0c;我是小浪。那么上篇博客我们学习了SpringBoot配置文件的相关操作&#xff0c;本篇博客我们将学习一个新的知识点&#xff0c;SpringBoot日志文件。&#x1f5a5;&#x1f5a5; &#x1f4f2;目录 一、日志是什么…...

事务 ---MySQL的总结(六)

事务 多进程进行并改变同一个数据&#xff0c;如果没有进行版本控制&#xff0c;就会出现数据不确定的问题&#xff0c;为此引入了事务的概念。可以进行数据回滚&#xff0c;解决潜在的问题。 事务的概念 一组的DML组成&#xff0c;这一些的DML要么同时成功&#xff0c;要么同…...

22 标准模板库STL之容器适配器

概述 提到适配器,我们的第一印象是想到设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼容而不能合作的两个类,可以一起工作。STL中的容器适配器与此类似,是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一些不同的功能和接口。之所…...

目标检测YOLO实战应用案例100讲-基于深度学习的自动驾驶目标检测算法研究

目录 基于深度学习的自动驾驶目标检测算法研究 相关理论基础 2.1 卷积神经网络基本原理...

服务网关Gateway

前言 API 网关出现的原因是微服务架构的出现&#xff0c;不同的微服务一般会有不同的网络地址&#xff0c;而外部客户端可能需要调用多个服务的接口才能完成一个业务需求&#xff0c;如果让客户端直接与各个微服务通信&#xff0c;会有以下的问题&#xff1a; 破坏了服务无状态…...

(4)定时器

51单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成 作用&#xff1a; 用于计时系统替代长时间Delay&#xff0c;提高运行效率和速度任务切换 STC89C52定时器资源&#xff1a; 定时器个数&#xff1a;3个&#xff08;T0,T1,T2&#xf…...

项目实现读写分离操作(mysql)

读写分离 1.问题说明 2.读写分离 Master&#xff08;主库&#xff09;----(数据同步)—> Slave&#xff08;从库&#xff09; Mysql主从复制 mysql主从复制 介绍 mysql主从复制是一个异步的复制过程&#xff0c;底层是基于mysql数据库自带的二进制日志功能。就是一台或多台…...

VP记录:Educational Codeforces Round 148 (Rated for Div. 2) A~D1

传送门:CF 前题提要:本人临近期中,时间较紧,且关于D2暂时没有想到优化算法,因此准备留着以后有时间再继续解决 A题:A. New Palindrome 简单的模拟题,考虑记录每一个字母出现的次数.很容易发现奇数次的数字只能出现一次.因为最多只能在正中间放一个.并且因为不能和初始字符相…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

webpack面试题

面试题&#xff1a;webpack介绍和简单使用 一、webpack&#xff08;模块化打包工具&#xff09;1. webpack是把项目当作一个整体&#xff0c;通过给定的一个主文件&#xff0c;webpack将从这个主文件开始找到你项目当中的所有依赖文件&#xff0c;使用loaders来处理它们&#x…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

起重机起升机构的安全装置有哪些?

起重机起升机构的安全装置是保障吊装作业安全的关键部件&#xff0c;主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理&#xff1a; 一、超载保护装置&#xff08;核心安全装置&#xff09; 1. 起重量限制器 功能&#xff1a;实时监测起升载荷&a…...

6.计算机网络核心知识点精要手册

计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法&#xff1a;数据与控制信息的结构或格式&#xff0c;如同语言中的语法规则语义&#xff1a;控制信息的具体含义和响应方式&#xff0c;规定通信双方"说什么"同步&#xff1a;事件执行的顺序与时序…...

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...

2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】

1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...

Go 并发编程基础:select 多路复用

select 是 Go 并发编程中非常强大的语法结构&#xff0c;它允许程序同时等待多个通道操作的完成&#xff0c;从而实现多路复用机制&#xff0c;是协程调度、超时控制、通道竞争等场景的核心工具。 一、什么是 select select 类似于 switch 语句&#xff0c;但它用于监听多个通…...

CSP信奥赛C++常用系统函数汇总

# CSP信奥赛C常用系统函数汇总## 一、输入输出函数### 1. cin / cout&#xff08;<iostream>&#xff09; cpp int x; cin >> x; // 输入 cout << x << endl;// 输出 优化&#xff1a;ios::sync_with_stdio(false); 可提升速度 2. scanf() /…...