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,那么插值一次后距离就减少了一半,在执行一次,又减少了一半距离
当然,如果需求就是这样的话直接用就行了,但是如果需求是匀速平滑到某点,这咋办呢?
既然都知道第三个参数其实就是距离百分比了,那我们自己算一下距离百分比不就行了吗?
public Transform from;
public Transform to;
public float mMoveTime;
private Vector3 mStartPos;
private float t; private bool mIsPlay = false; void Update()
{
if (!mIsPlay)
return; t += 1f / mMoveTime * Time.deltaTime;
from.position = Vector3.Lerp(mStartPos, to.position, t);
} void OnGUI()
{
if(GUI.Button(new Rect(,,,),"play"))
{
mStartPos = from.position;
mIsPlay = true;
}
}
看了上面的介绍,相信对Vector3.Lerp有些了解了!
如果我想要他移动到指定位置后继续保持匀速运动怎么做呢?也许你会说用Vector3.Lerp完全可以啊!
可是你别忘了,它的取值范围是0~1,也就是说>1的值它会忽略掉,我测试了一下的确如此
那看来只能自己实现了!这其实很简单,下面我们就来自己实现一遍
void Update()
{
if (!mIsPlay)
return; t += 1f / mMoveTime * Time.deltaTime;
//from.position = Vector3.Lerp(mStartPos, to.position, t);
from.position = mStartPos + (to.position - mStartPos) * t;
}
原文链接:http://www.cnblogs.com/shenggege/p/5658650.html
unity3d Vector3.Lerp解析的更多相关文章
- Unity3d之json解析研究
Unity3d之json解析研究 json是好东西啊!JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 JSON简单易用,我要好好研究一下 ...
- Vector3.Lerp 插值
Vector3.Lerp 插值 static function Lerp (from : Vector3, to : Vector3, t : float) : Vector3 Description ...
- 对Vector3.Lerp 插值的理解
有时,我们在做游戏时会发现有些跟随动作不够圆滑或者需要一个缓冲的效果,这时,一般会考虑到插值.所以对插值的理解是必需的.(比如摄像机跟随主角) 插值是数学上的一个概念,在这里用公式表示就是:from ...
- Unity3d vector3.forward和transform.forward的区别!
原文连接: http://blog.csdn.net/kaluluosi111/article/details/17206655 在unity3d中有2个forward,一个是vector3.forw ...
- Unity3d 插值Lerp与Slerp
Lerp Lerp表示线性插值. Slerp 球形插值在Vector3.Quaternion等类都有使用,一般多在Quaternion的旋转操作时使用.
- Unity3d Vector3
using UnityEngine; using System.Collections; public class test : MonoBehaviour { void Start () { Vec ...
- 时光煮雨 Unity3D实现2D人物移动-总结篇
系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...
- Unity3D脚本中文系列教程(十三)
http://dong2008hong.blog.163.com/blog/static/469688272014032334486/ Unity3D脚本中文系列教程(十二) ◆ function G ...
- [Unity3D] C# Basic : Gameplay Scripting
教程:https://unity3d.com/cn/learn/tutorials/s/scripting 补充:http://www.runoob.com/csharp/csharp-inherit ...
随机推荐
- 前端构建工具gulp介绍
2016年3月3日 10:46:08 晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...
- Redis安装和配置
1.下载安装redis 在linux服务器上,命令行执行以下命令(cd ./usr local/src 一般源码放在这里(推荐源码安装)) wget http://download.redis.io/ ...
- ubuntu下eclipse scala开发插件(Scala IDE for Eclipse)安装
1. 环境介绍 系统:ubuntu16.04(不过和系统版本关系不大) elipse:Neon.1aRelease (4.6.1) 2. 插件介绍 Scala IDE for eclipse是elip ...
- android 获取本机SMI卡号码
//获取手机号码 TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); S ...
- java enum(枚举)的使用
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...
- C++/C#互调步骤
一.C#调用C++ dll步骤(只能导出方法): * 1. c++建立空项目->源文件文件夹中添加cpp文件和函数 * 2. c++属性设置中,配置类型设置为动态库dll,公共语言运行时支持 ...
- JDK环境变量详细讲解
首先,你应该已经安装了 java 的 JDK 了,笔者安装的是:jdk-8u65-windows-x64 下载地址: http://www.oracle.com/technetwork/java/ja ...
- RCC BUCK-BOOST变压器设计
电路处于Buck-Boost DCM模式,最恶劣情况为输入电压最低时.取频率为f 以下图为例: 1.MOS耐压选择: Vmos≥Vinmax+Vout+80 2.保证磁芯不饱和且始终工作在DCM模式 ...
- NOIP2009pj道路游戏[环形DP 转移优化 二维信息]
题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...
- qau-国庆七天乐——A
A - Who's in the Middle //先吐槽一波vj,不知道怎么回事,bits/stdc++.h不能用了...坑爹 7225007 upstar A Compile Error ...