Unity --- Vector3类的API讲解

2023-11-19

1.Vector3中的静态变量是相对于世界坐标系的还是相对于自身坐标系呢?(我们创建的Vector3类对象同理)

答:这取决我们将创建的Vector3类对象 / 通过Vector3调用的静态变量传给了哪一个引用

 如果是传给了positon的话,则该Vector3类对象就是相对于世界坐标系的,反之,如果传的是localPosition的话,则是Vector3类对象是相对于本地坐标系(父类坐标系)的

(如果游戏物体没有父类的话,其localPositon与Position重合)

1.这个Transform中显示的是localPosition,localRotation和localScale 

当游戏物体没有父物体的时候,游戏物体相对于世界的Positon,rotation和scale和相对于本地坐标系local的部分相重合

2.以一个有父物体的游戏物体为例:

如果我们直接设置

那么会出现:

a.Transform的Position(localPosition)显示0,1,0  --- 物体位置发生改变

b.该物体的世界坐标系Positon跟随着localPositon的改变而发生对应的改变

如果我们更改的是物体的position的话

a.物体的位置也会发生改变 --- 物体的位置会变到跟定的世界坐标系的位置,同时要注意的是

通过positon改变了物体的位置后,物体的localPositon也会根据新的位置发生对应的变化,变化完成后,生成的新的localPositon会在Transfrom中显示

 

1.可以直接通过类名 + 点操作符访问的方法/变量,就是静态方法/变量  

1.normalized 和 Normalize的区别:

a. normalized 是Vector3类中的属性,而Normalized则是Vector3类中的一个方法

b. 一个Vector3类对象A调用normalized属性之后,会返回一个新的Vector3类对象,该对象是A的单位向量

c.一个Vector3类对象A调用Normalize方法后,会改变自身的模长 --- 具体改变是将自身的模长改为1,将自身变为自身的单位向量

 1.参数为ref标志着这个参数是引用参数

2.该方法的作用是将与引用A指向的向量垂直的两个单位向量分别传给引用basisB 和 引用 basisC(注意,这个垂直指的是类似于坐标轴那样的垂直) --- PS:三个向量彼此互相垂直

1.上面这个介绍的是Vector3中的一个静态方法 --- Project()方法,这个方法的作用是投影一个向量到另一个向量 

这里的投影是什么意思呢?

a.首先我们要知道该方法是vector向量投影到onNormal向量上

b.该方法的返回值是一个向量,且该向量是vector向量投影后得到的那根投影向量

3.所谓的投影其实就是vector向量沿着onNormal向量的方向做分量

 1.在Reflect方法中,第一个参数 --- Vector3对象 inDirection是用来给定一个确定入射方向的向量的;第二个参数就是给定一个确定法线方向的向量

2.最后该方法会返回一个向量,该向量是沿着给定的入射向量和法线向量反射后得到的反射向量

1.法线是垂直于面的,给定一条法线就能够确定一个面 


接下来开始讲讲Vector3类中为我们提供的插值移动方法

这个方法与直接更改游戏物体transfrom中的位置属性的区别是:

1.插值移动方法在给定移动终点后能够实现从起点到终点的逐步移动过程

2.直接更改位置属性则是直接将游戏物体在起点处的渲染停止,直接在终点处开始渲染 --- 这样呈现出的效果就是突然消失然后突然出现

1.Vector3类中为我们提供的插值方法就是 --- MoveTowards方法 ,该方法需要三个参数 --- 第一个是游戏物体的移动起点,第二个是移动终点(这两个都是Vector3变量),最后一个则是移动速度

使用这个方法产生的移动效果就是 --- 游戏物体按照给定的速度逐渐从起点匀速移动到终点

注意:该方法只能够实现匀速移动!

1.对应的还有一个Lerp方法,它能够实现游戏物体从起点先快后慢向终点移动,且只能无限接近终点而无法到达终点。 

2.Lerp方法除了能够实现物体从起点出发由快到慢不断接近终点之外,它还能够实现各种各样的速度变化:

a.首先我们先介绍一下默认的由快到慢的速度变化时,三个参数的情况:

起点参数是不固定的,他会随着物体位置的改变而跟着改变;终点参数是固定的,段落比例是固定的(为什么是段落比例可以去看看前面讲解的Lerp插值方法的实现原理

b.此时我们再引进一个变量:

(curve是曲线的意思),设置好公共动画曲线之后,我们就能够在inspector面板看到这样一个参数窗口点开之后会出现一个线条窗口供我们调节 ---

 

在这里我们可以自由的设置一个曲线的形状(曲线的x轴是时间),设置好之后就会返回给我们一个变量 --- 这个变量的类型是浮点型,它的最小值是0,最大值是1

这个变量的值是随着时间不断变化的,而具体的变化规律就是我们设置好的曲线

 

1.引入了两个变量之后我们开始正式讲解这个Lerp方法的进阶使用 --- 

首先进阶使用方法依然需要三个参数,其中起点参数和终点参数必须是固定的,唯一能够变化的参数是比例参数

2.这个变化的比例参数 = curve.Evaluate(时间参数) --- curve就是我们引用的AnimationCurve变量 

我们最终的目的是获得动画曲线的y轴上的值来作为比例参数,且这个y轴上的值还必须随着时间变化 --- 那么实现这个需求就需要我们调用动画曲线中的放啊 -- Evaluate() --- 在给定该方法一个单精度浮点型参数之后(要求参数范围是0到1,一旦小于0/大于1,方法只会返回0/1),它就会在动画曲线的x轴上找到这个参数的位置,并将这个位置对应的y轴值返回

(也就是说,如果我们想持续改变比例参数的话,就需要提供一个不断变化的时间参数给Evaluate方法)

(PS:在C#中,默认0.5,0.6...这种浮点数的类型为双精度浮点数double,如果想将其转换为单精度浮点数类型float的话,只需要在数的后面加上一个f --- 如0.5f,0.6f

3.在动画曲线中如果想增加一个点来调整的话,只需要在想要增加的点双击即可

4.动画曲线的y轴值可以大于1,也可以小于0

5.Lerp方法需要的比例参数可以大于1,也可以小于0 --- 当比例参数大于1的时候。Lerp方法调用后的效果是:物体移动1:1的距离,直接闪现到终点

如果小于0的话,则是物体移动0:1的距离,不发生移动

6.如果想让Lerp方法在比例大于1,小于0的时候也能够有效果的话,就需要我们用一个Lerp的解放版方法 --- LerpUnclamped方法 ---unclamp松开 --- 使用该方法后,如给比例大于1如1.5,则游戏物体会沿着起点到终点的方向加速移动到两者距离的1.5倍处,反之小于0,如-0.5则是沿着起点到终点的反方向由快到慢的移动到二者之间距离的0.5倍处

7.设curve.Evaluate()方法的时间参数为x(浮点型),该参数从0开始累加,当参数加到1的时候,动画曲线走完全程,游戏物体完成移动 --- 也就是说游戏物体从起点到终点总共耗时1s

如果我们想改变消耗的时间 --- 比如使得消耗时间小于1s/大于1s,那我们该怎么做呢?

此时我们需要创建一个变量,该变量用来记录我们实际想让游戏物体完成全程的时间 T

然后对Evaluate的时间参数做修改 ---- 从单纯的x变为 x/T --- 此时只有在x = T时,游戏物体才会完成全程(动画曲线也会跟着时间参数等比例缩放)(PS:一般时间参数x都是通过 x = x + Time.deltaTime来实现不断向前变化的)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity --- Vector3类的API讲解 的相关文章

随机推荐

  • R语言应用序列模式挖掘揭示客户购买行为:深度学习与机器学习的视角

    目录 序列模式挖掘 一个简介 使用R进行序列模式挖掘 应用深度学习和机器学习改善购买行为预测
  • 无向图的深度优先遍历非递归_数据结构系列图

    图 01 图的基本定义与基本术语 基本概念 图 Graph 是由顶点的集合和顶点之间边的集合组成 通常表示为 G V E 其中 G表示一个图 V是图G中顶点的集合 E是图G中边的集合 在图中的数据元素 我们称之为顶点 Vertex 顶点集合
  • 6.OS运行机制(补充)

    中断
  • C#的new关键字的几种用法

    一共有三种用法 在 C 中 new 关键字可用作运算符 修饰符或约束 1 new 运算符 用于创建对象和调用构造函数 这种大家都比较熟悉 没什么好说的了 2 new 修饰符 在用作修饰符时 new 关键字可以显式隐藏从基类继承的成员 3 n
  • 水文数据产品的网站

    主要记录在平常用到的水文数据产品的网站 包括水库 湖泊 河流等 1 hydroweb 官网 https www theia land fr en hydroweb 界面 下载后的数据是txt格式 如需转成csv 可这样批量操作 import
  • React hooks中ref、forwardRef、useImperativeHandle的结合使用

    ref 用来绑定到HTML元素或者组件上 获取其DOM forwardRef 帮助子组件拿到父组件中子组件上面绑定的ref 绑定到自己的某一个元素中 这样就将子组件的DOM直接暴露给了父组件 这种方式存在的弊端 1 直接暴露给父组件带来的问
  • Linux 查看目录和文件

    目录 1 显示当前目录 pwd 2 改变目录 cd 3 列出目录内容 ls 4 列出目录内容 dir和vdir 5 查看文本文件 cat和more 6 阅读文件的开头和结尾 head和tail 7 查找文件内容 grep 1 显示当前目录
  • 存储解决方案之——FC存储解决方案

    FC存储解决方案 一 需求分析 当前 在FC Fibre Channel 领域里鲜有新技术问世 很多技术都已经成为过去时 近来在技术上的演进就是从2Gbit s 到4Gbit s的过渡 而且基本上已经完成 基于光纤通道 FC 的存储局域网络
  • Win10中docker的安装与使用

    WIN10中DOCKER的安装与使用 WIN10中DOCKER的安装与使用 1 docker的安装 环境准备 下载安装 2 docker的入门 开始使用 3 docker的常用配置 在PowerShell中设置 tab键自动补全 其实用的都
  • 蓝牙设备中的Device UUID 与 Service UUID

    Device UUID也可以被称作为DeviceID Android 设备上扫描获取到的 deviceId 为外围设备的 MAC 地址 相对固定 iOS 设备上扫描获取到的 deviceId 是系统根据外围设备 MAC 地址及发现设备的时间
  • mysql的left join和inner join的效率对比,以及如何优化

    一 前言 最近在写代码的时候 遇到了需要多表连接的一个问题 初始sql类似于 select from a left join b on a x b x left join c on c y b y left join d on d z c
  • Idea项目如何打包

    项目代码打包 一 idea软件为例 二 打包前的准备 1 application yml修改 代码 第三行dev改为pro spring profiles active SPRING PROFILES ACTIVE dev activiti
  • thinkphp5.0 常量

    预定义常量 EXT 类库文件后缀 php THINK VERSION 框架版本号 路径常量 DS 当前系统的目录分隔符 THINK PATH 框架系统目录 D phpStudy WWW my tadmin thinkphp ROOT PAT
  • Hash映射理解

    先说数组 数组优点之一 能通过索引很快定位到值 hashmap 就是利用了数组这个优点 对比 线性映射 定义一个数组 数组的元素是结构体 结构体包括 一对键 值 伪代码表示 a 0 struct Bill 5 a 1 struct KK 6
  • 【Unity3d】Animator和Animation组件使用注意事项

    一 Animator一般用于人物动画控制 特点是动画是持续的 可能有动作切换 Animation一般用于间断性的动画的控制 比如一个场景特效的播放 只播放一次就完了 二 实测Animation速度比Animator快10 左右 内存占用没测
  • vue+高德地图 点击地图获取经纬度和详细地址

    html源码
  • docker什么命令启动服务?

    docker启动服务的命令是 1 启动 1 systemctl start docker 2 守护进程重启 1 sudo systemctl daemon reload 3 重启docker服务 1 systemctl restart do
  • HDLC原理及配置

    一 HDLC原理 HDLC是由国际标准化组织 ISO 制定的面向比特的同步数据链路层协议 主要用于封装同步串行链路上的数据 HDLC是在数据链路层中被广泛使用的协议之一 二 HDLC配置 AR1
  • 使用Qemu+gdb来调试内核

    原文地址 http blog csdn net iamljj article details 5655169 昨天听别人讲使用Qemu和gdb来实现源码级内核调试 今天试了一下 果然非常方便 现简单的记录一下 Qemu是一个开源的虚拟机软件
  • Unity --- Vector3类的API讲解

    1 Vector3中的静态变量是相对于世界坐标系的还是相对于自身坐标系呢 我们创建的Vector3类对象同理 答 这取决我们将创建的Vector3类对象 通过Vector3调用的静态变量传给了哪一个引用 如果是传给了positon的话 则该