unity 控制移动的方法

我是一个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);


你可能感兴趣的:(unity笔记)