unity3d用translate方法使物体移动,最后成功了为啥物体的移动速度会自己逐渐变慢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity3d用translate方法使物体移动,最后成功了为啥物体的移动速度会自己逐渐变慢?相关的知识,希望对你有一定的参考价值。
参考技术A 设定一个速度值speed,按键时,减少speed的值,这是最简单的做法了。public float Speed = 1.0f;
public float AddSpeed = 0.1f;
void Start ()
void Update ()
if (Input.GetKey(KeyCode.W))
Speed += AddSpeed;
if (Input.GetKey(KeyCode.S))
Speed -= AddSpeed;
Speed = Mathf.Clamp(Speed,0,Speed);
transform.Translate(Vector3.forward*Time.deltaTime*Speed);
参考技术B 因为你没有把向量标准化
Unity中的物体移动-Transform.Translate
Transform.Translate通过设置下一步移动的矢量方向和大小进行移动。
有两种移动方式:
1.ADWS控制游戏对象上下左右移动,不涉及旋转;
2.AD通过旋转控制方向,WS控制前后移动,也可以实现受控位移。
无论哪种方式,首先都要获取键盘响应,可以通过Input.GetKey获取,也可以通过Input.GetAxisRaw获取。
第一种方式下的代码如下:
float input_H = Input.GetAxisRaw("Horizontal"); //获取X方向的移动方向,如果输入A,输出-1;如果输入D,输出1。
float input_V = Input.GetAxisRaw("Vertical"); //获取Z方向的移动方向,如果输入W,输出1;如果输入S,输出-1。
Vector3 v = new Vector3 (input_H, 0, input_V); //新建移动向量
v = v.normalized; //如果是斜线方向,需要对其进行标准化,统一长度为1
v = v * speed * Time.deltaTime; //乘以速度调整移动速度,乘以deltaTime防止卡顿现象
transform.Translate (v); //移动
第二种方式下的代码如下:
float input_H = Input.GetAxisRaw("Horizontal"); //
float input_V = Input.GetAxisRaw ("Vertical"); //
transform.Rotate (new Vector3 (0, input_H, 0)); //绕y轴旋转,A键顺时针;D键逆时针
float curSpeed = speed * input_V * Time.deltaTime;
transform.Translate (transform.forward * curSpeed,Space.World);//沿着物体前后方向移动, 由于使用了forward,因此要指定移动的坐标系为全局坐标
最后一句代码也可以改为:
transform.Translate (new Vector3(0,0,curSpeed));//默认沿着物体的z轴移动,即为前后方向
上述代码均需要在update方法中实现。
以上是关于unity3d用translate方法使物体移动,最后成功了为啥物体的移动速度会自己逐渐变慢?的主要内容,如果未能解决你的问题,请参考以下文章