unity3d Vector3.Lerp解析
Vector3.Lerp:http://www.ceeger.com/Script/Vector3/Vector3.Lerp.html
手册中描述的不是很详细,什么叫“按照数字t在from到to之间插值”???t代表什么鬼?还得自己测试一下才知道
我以前这样用过:
from.position = Vector3.Lerp(from.position, to.position, Time.deltaTime);
或者想要快一些我就这样:
from.position = Vector3.Lerp(from.position, to.position, Time.deltaTime * 2f);
不知道大家有没有像我这样用过!第三个参数取值范围0~1,其实就是距离百分比,比如填0.5f,那么就是取A点到B点的中间位置
如果像我上面那种方法去使用,就会导致物体在移动的时候会越来越慢
假设A点到B点距离是10,第三个参数t我填0.5f,那么插值一次后距离就减少了一半,在执行一次,又减少了一半距离
当然,如果需求就是这样的话直接用就行了,但是如果需求是匀速平滑到某点,这咋办呢?
既然都知道第三个参数其实就是距离百分比了,那我们自己算一下距离百分比不就行了吗?
1 public Transform from; 2 public Transform to; 3 public float mMoveTime; 4 private Vector3 mStartPos; 5 private float t; 6 7 private bool mIsPlay = false; 8 9 void Update() 10 { 11 if (!mIsPlay) 12 return; 13 14 t += 1f / mMoveTime * Time.deltaTime; 15 from.position = Vector3.Lerp(mStartPos, to.position, t); 16 } 17 18 void OnGUI() 19 { 20 if(GUI.Button(new Rect(100,100,100,30),"play")) 21 { 22 mStartPos = from.position; 23 mIsPlay = true; 24 } 25 }
看了上面的介绍,相信对Vector3.Lerp有些了解了!
如果我想要他移动到指定位置后继续保持匀速运动怎么做呢?也许你会说用Vector3.Lerp完全可以啊!
可是你别忘了,它的取值范围是0~1,也就是说>1的值它会忽略掉,我测试了一下的确如此
那看来只能自己实现了!这其实很简单,下面我们就来自己实现一遍
1 void Update() 2 { 3 if (!mIsPlay) 4 return; 5 6 t += 1f / mMoveTime * Time.deltaTime; 7 //from.position = Vector3.Lerp(mStartPos, to.position, t); 8 from.position = mStartPos + (to.position - mStartPos) * t; 9 }
原文链接:http://www.cnblogs.com/shenggege/p/5658650.html
转载于:https://www.cnblogs.com/shenggege/p/5658650.html
unity3d Vector3.Lerp解析相关推荐
- Vector3.Lerp
Unity3D中的线性插值Lerp()函数解析 在unity3D中经常用线性插值函数Lerp()来在两者之间插值,两者之间可以是两个材质之间.两个向量之间.两个浮点数之间.两个颜色之间,其函数原型如下 ...
- Vector3.Lerp 和 Vector3.SmoothDamp 使用的注意事项
这两天在做相机平滑跟随玩家的功能,之前用的DoTween可以解决很大一部分的问题.但是目标位置如果一直在改变的话,就会有奇怪的眩晕感.所以老大说换着Vector3.Lerp 和 Vector3.Smo ...
- Unity Vector3.Lerp Vector3.LerpUnclamped 的区别
Vector3.Lerp 最后的 t 一定是 0 到 1 之间 而 Vector3.LerpUnclamped t 其实是可以超出去的 也就是说 如果你想给俩个确定的 vector3 做一个延长线 那 ...
- unity3d问题集 对Vector3.Lerp 插值的理解 - 转自蛮牛
有时,我们在做游戏时会发现有些跟随动作不够圆滑或者需要一个缓冲的效果,这时,一般会考虑到插值.所以对插值的理解是必需的.(比如摄像机跟随主角) 插值是数学上的一个概念,在这里用公式表示就是:from ...
- Unity3d vector3.forward和transform.forward的区别!
在unity3d中有2个forward,一个是vector3.forward和transform.forward,这两个forward其实完全不一样.他们之间的区别主要体现在在不同坐标系时的反映上. ...
- [游戏开发-学习笔记]菜鸟慢慢飞(12)- Unity3D中LitJson 解析遇到的问题
1.数据格式问题 问题:服务器那边设置的HP的类型是float,如果传给客户端的是1000,没有小数点解析的时候LitJson会优先按照int去解析.但是呢,服务器回头还有可能传回的是1000.50这 ...
- Unity3d Vector3点
两点直线补间 /// <summary> /// 两点之间直线的坐标计算. /// </summary> /// <returns>The line paht he ...
- 时光煮雨 Unity3D实现2D人物移动-总结篇
系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③-UGUI DoT ...
- Unity3D中的线性插值Lerp()函数
在unity3D中经常用线性插值函数Lerp()来在两者之间插值,两者之间可以是两个材质之间.两个向量之间.两个浮点数之间.两个颜色之间,其函数原型如下: Material.Lerp 插值 funct ...
最新文章
- 用于时序动作提名生成任务,爱奇艺提出BC-GNN图神经网络 | ECCV 2020
- 月薪20k-50k| 西人马3D机器视觉算法、语音识别、DSP软件工程师招聘
- python 切割字符串
- BZOJ 2326: [HNOI2011]数学作业( 矩阵快速幂 )
- CCF认证历年试题解【网上跟帖,请不要使用称呼】
- 全国计算机一级d类考试内容,全国计算机一级考试WPS office复习题及答案2017
- Java中的ThreadPoolExecutor类
- 怎样取消连续包月自动续费_苹果手机连续包月会员怎么取消 设置iPhone解除应用自动续费...
- 实操Tiktok一个月告诉你,10万粉丝轻松拿下?
- Python办公自动化 - 2 Word办公自动化
- myeclipse将普通java项目转换成maven项目_Myeclipse Java项目转换成Maven项目
- transform.rotation和GetComponentRigidbody().MoveRotation
- 古代汉语(王力版)笔记
- Android Binder 机制详解
- sublime3注册机使用
- 利用Freemarker模板生成doc或者docx文档(转载整理)
- Go语言学习笔记-数组、切片、map
- 自主可控国产服务器思考
- 【MQ】MQ消息中间件RabbitMQ
- 【Linux】mysql命令行查看表结构,字段等信息
热门文章
- 为自增(++)自减(--)运算符正名
- Spring Ioc源码分析 之 Bean的加载(6):属性填充(populateBean())
- 解决 Ubuntu 无法更新软件问题
- android 用dx.bat 转换class 为dex
- Bit-Z全球生态联盟暨韩国战略发布会即将开启
- 加密货币与智能合约的隐私 (四):私人和许可的分类帐
- aapt2 生成资源 public flag 标记
- 主板rs232接口测试软件,简洁的RS232串口通信电路与串口通信测试程序
- NOIP2018 赛前集训总结反思
- java项目怎样提高性能_Java程序员成长之路(如何提高Java程序性能?)