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讲解 的相关文章

  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity 键盘控制人物移动——之输入方式代码的编写

    键盘输入 控制人物移动 在我们制作游戏中最常见的需求之一就是使用键盘移动游戏角色 那么我们首先需要获取键盘输入 以下提供两种方法获取键盘 这里尽量通过截图解释让大家理解代码的含义 GetInput void FixedUpdate Move
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • mixamo根动画导入UE5问题:滑铲

    最近想做一个跑酷游戏 从mixamo下载滑铲动作后 出了很多动画的问题 花了两周时间 终于是把所有的问题基本上都解决了 常见问题 1 动画序列 人物不移动 2 动画序列 人物移动朝向错误 3 蒙太奇 人物移动后会被拉回 4 蒙太奇 动画移动
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • 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的话 则该