unity 控制移动的方法

来源:互联网 发布:易视网络电视台 编辑:程序博客网 时间:2024/06/10 00:26

我是一个unity新手,这只是自己的笔记,如果有探讨的地方,欢迎联系我(qq:953428372)

一。
transform.Translate(new Vector3(1, 1, 1) * moveSpeed * Time.deltaTime); // Translate方法移动不会考虑刚体等碰撞(会直接穿过物体)

// 确保我们的速度不会超过maxDistanceDelta
Vector3.MoveTowards(transform.position, targetPos.position, speed * Time.deltaTime);

// 速度会超过移动速度,像弹簧一样
Vector3.Lerp(transform.position, targetPos.position, speed * Time.deltaTime);

二。
// 使用刚体移动物体(移动会受到物理引擎的影响)

// 在3D世界中上下左右移动float v = Input.GetAxis("Vertical");float h = Input.GetAxis("Horizontal");rb.MovePosition(rb.transform.position + new Vector3(h, 1, v) * moveSpeed * Time.deltaTime); // 将物体移动到指定坐标

三。
// 使用刚体移动物体(移动会受到物理引擎的影响。 如果刚体中的kinimatic勾上,这种方法就不能控制刚体的移动)

// vertical 控制Z轴, horizontal 控制Y轴(旋转)float v = Input.GetAxis("Vertical");rb.velocity = transform.forward * v * moveSpeed; // 给物体添加一个速率float h = Input.GetAxis("Horizontal");rb.angularVelocity = transform.up * v * moveSpeed;


// 自己计算,使用position(世界坐标)移动和旋转

Transform _targetPos; // 目标坐标Transform _cachedTransform; // 自身坐标// (Vector3.normalized 使这个vector3自身向量化)Vector3 moveDis = (_targetPos.position - _cachedTransform.position).normalized * Time.deltaTime * _moveSpeed;_cachedTransform.position += moveDis;// 接下来是控制转向 (大多时候可以直接用LookAt 代替)Quaternion lookq = Quaternion.LookRotation(_targetPos - _cachedTransform);_cachedTransform.rotation = Quaternion.Slerp(_cachedTransform.rotation, lookq, Time.deltaTime * _turnSpeed);
0 0