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 ...
随机推荐
- 十五天精通WCF——第十天 学会用SvcConfigEditor来简化配置
我们在玩wcf项目的时候,都是自己手工编写system.serviceModel下面的配置,虽然在webconfig中做wcf的服务配置的时候,vs提供大多 数的代码提示,但对于不太熟悉服务配置的小鸟 ...
- Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法
Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法 You can extract all the ...
- arcgis 随手记
1,ArcGISDynamicMapServiceLayer 3.0 用 4.1 以后用MapImageLayer 代码如下: <!DOCTYPE html> <html&g ...
- Makefile变量
自定义变量 = 是最基本的赋值,会把整个makefile展开之后再决定是多少 x=foo y=$(x)bar #y是asdbar,不是foobar x=asd := 是覆盖之前的值,和=不同,和赋值的 ...
- Linux运行等级,根目录,文件类型etc
Linux的Runlevel Linux默认有6个Terminal(Ctrl+Alt+F1~F6)和1个X window(Ctrl+Alt+F7,图形化界面)让用户登录 Linux的runlevel一 ...
- ubuntu14.04下的NVIDIA Tesla K80显卡驱动的安装教程
搞深度学习如何能够不与浑身是“核”的显卡打交道呢? 人工智能的兴起除了数据量的大量提升,算法的不断改进,计算能力的逐步提高,还离不开软件基础设施的逐步完善.当下的主流的深度学习工具软件无论是Caffe ...
- python可分组字典
# -*- encoding: UTF-8 -*- from collections import defaultdict class News(object): def __init__(self, ...
- viso2010从mysql中导出ER图
mysql connector 下载地址: http://dev.mysql.com/downloads/connector/odbc/5.1.html 首先机器要安装mysql-connector- ...
- seq
Linux 中seq 命令的用法 用于产生从某个数到另外一个数之间的所有整数 用法: seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 增量 尾数 ...
- Linux下Redis开机自启(Centos)
废话少说,直接来步骤: 1.设置redis.conf中daemonize为yes,确保守护进程开启. 2.编写开机自启动脚本 vi /etc/init.d/redis 脚本内容如下: # chkcon ...