Unity3D 为什么Transform.Translate 中的x/y/z值经常会通过speed * Time.deltaTime获取?应该这样的
2015-12-20 22:34
369 查看
先上代码:
上面的水平方向(x轴)的位移量moveh通过m_speed * Time.deltaTime方式获取。
我之前刚学时一直纳闷速度就速度么,直接moveh += m_speed不就完了,乘的Time.deltaTime是个什么鬼。。。(现在想来很幼稚,因为答案真的很简单/(ㄒoㄒ)/~~)
今天恍然大悟,解释如下:
比如定义的m_speed = 1,,意思是角色速度为1米/秒,
那么如果moveh += m_speed ,就默认了经过了1秒的时间水平方向移动了1米。
这个时候请注意,这个函数是多长时间调用一次呢?答案是:1帧,而不是1秒,
那么一帧有多久呢?也就几十毫秒吧,准确的时间就是Time.deltaTime(它表示距上一次调用Update或FixedUpdate 所用的时间)。所以说用m_speed * Time.deltaTime,就是这么及时毫秒,应该移动的距离。
最后分析一下,为什么这么用?
以我之前做Winform上的GDI绘制的经验,比如我要文字滚动显示,我会采用在OnPainting中每次移动N个像素的办法来处理;
在ActionScript中,也是在OnFrame中每次移动N个像素来处理。
也就是说从来没有摆脱帧的束缚,如果帧频变了,速度就变了。
那么这种方法就不一样了,因为我不用去考虑帧,我只关心该帧与上帧间隔了多久,然后就知道该移动多少距离了,哪怕他帧频变了,也不会影响我既定的N米/秒的速度(当然如果帧频过小,会使画面不流畅)。
最后附上我刚才看到的一篇解释Time.deltaTime文章链接,供参考(http://blog.csdn.net/xgx198831/article/details/7411504)
public class Player : MonoBehaviour { protected Transform m_transform; public float m_speed = 1; // Use this for initialization void Start () { m_transform = this.transform; } // Update is called once per frame void Update () { float movev = 0; float moveh = 0; if (Input.GetKey (KeyCode.UpArrow)) { movev -= m_speed * Time.deltaTime; } if (Input.GetKey (KeyCode.DownArrow)) { movev += m_speed * Time.deltaTime; } if (Input.GetKey(KeyCode.LeftArrow)) { moveh += m_speed * Time.deltaTime; } if (Input.GetKey (KeyCode.RightArrow)) { moveh -= m_speed * Time.deltaTime; } m_transform.Translate (new Vector3 (moveh, 0, movev)); } }
上面的水平方向(x轴)的位移量moveh通过m_speed * Time.deltaTime方式获取。
我之前刚学时一直纳闷速度就速度么,直接moveh += m_speed不就完了,乘的Time.deltaTime是个什么鬼。。。(现在想来很幼稚,因为答案真的很简单/(ㄒoㄒ)/~~)
今天恍然大悟,解释如下:
比如定义的m_speed = 1,,意思是角色速度为1米/秒,
那么如果moveh += m_speed ,就默认了经过了1秒的时间水平方向移动了1米。
这个时候请注意,这个函数是多长时间调用一次呢?答案是:1帧,而不是1秒,
那么一帧有多久呢?也就几十毫秒吧,准确的时间就是Time.deltaTime(它表示距上一次调用Update或FixedUpdate 所用的时间)。所以说用m_speed * Time.deltaTime,就是这么及时毫秒,应该移动的距离。
最后分析一下,为什么这么用?
以我之前做Winform上的GDI绘制的经验,比如我要文字滚动显示,我会采用在OnPainting中每次移动N个像素的办法来处理;
在ActionScript中,也是在OnFrame中每次移动N个像素来处理。
也就是说从来没有摆脱帧的束缚,如果帧频变了,速度就变了。
那么这种方法就不一样了,因为我不用去考虑帧,我只关心该帧与上帧间隔了多久,然后就知道该移动多少距离了,哪怕他帧频变了,也不会影响我既定的N米/秒的速度(当然如果帧频过小,会使画面不流畅)。
最后附上我刚才看到的一篇解释Time.deltaTime文章链接,供参考(http://blog.csdn.net/xgx198831/article/details/7411504)
相关文章推荐
- Unity 5 WebGL vs Web Player
- 在unity中绘制曲线和绘制三角面
- Unity 5.3 模块安装
- 修改unity GI cache位置
- unity3d 之 边缘光(rim)
- unity 常用优化技术
- (转)Unity笔记之编辑器(UnityEditor)
- (转)Unity笔记之编辑器(BeginFadeGroup、BeginHorizontal、BeginScrollView) ... ...
- (转)Unity笔记之编辑器(BeginToggleGroup、BoundsField、ColorField) ...
- (转)Unity笔记之编辑器(CurveField、DoubleField、EnumMaskField、EnumPopup) ... ...
- (转)Unity笔记之编辑器(Foldout、HelpBox、InspectorTitlebar、Slider、MinMaxSlid ...
- (转)使用.NET Reflector 查看Unity引擎里面的DLL文件
- unity 内存管理
- (转)初步认识拓展UnityEditor编辑器定制
- (转)Unity3d游戏开场CG动画播放方式
- (转)Unity 导出XML配置文件,动态加载场景
- unity3d最新面试题与参考答案汇总
- unity3d面试题与参考答案
- 去蓝港在线面试Unity3D的笔试题。难吗?知道答案的在评论里写出来分享
- [转]unity3d所要知道的基础知识体系大纲,可以对照着学习,不定期更新 ... ... ... ...