c# - 将 2d 对象从 a 点移动到 b 点而不改变其旋转
问题描述
我正在尝试将 2d 对象从 a 点移动到 b 点而不改变它的统一旋转
我尝试使用Vector2.Lerp()
但它不起作用
Vector2 pointB = new Vector2(20, 10);
Vector2.Lerp(transform.position, pointB, 3F);
代码应在 3F 秒内将对象从点 a 移动到 b
解决方案
首先,Vector2.Lerp
不改变第一个参数的值。transform.position
如果您想以这种方式更改变换的位置, 您将需要分配新值。
其次,您需要每帧更新一次变换的位置,以保持变换平稳移动。
第三,Vector2.Lerp
只会在开始和结束之间产生一个t
介于 0 和 1 之间的位置。这t
应该与自该运动开始以来经过的时间与完成该运动的时间之比有关。
这是协程的一个很好的用途:
private IEnumerator GoToInSeconds(Vector2 pointB, float movementDuration)
{
Vector2 pointA = transform.position;
float timeElapsed = 0f;
while (timeElapsed < movementDuration)
{
yield return null;
timeElapsed += Time.deltaTime;
transform.position = Vector2.Lerp(pointA, pointB, timeElapsed/movementDuration);
}
}
这是一个如何使用它的示例Start
:
void Start()
{
Vector2 pointB = new Vector2(20, 10);
StartCoroutine(GoToInSeconds(pointB, 3f));
}
推荐阅读
- mongodb - Upsert 带有条件的对象的 mongo 数组
- sql-server - 如何从 XML 节点而不是 SQL 表中的完整节点中删除特定值
- r - 在 R Shiny 应用程序中检测 Leaflet 中的左键或右键单击
- python - Folium热图和markercluster中的参数(即半径)是什么意思?
- java - Camerax如何禁用自动对焦
- c# - Datagrid列自动填充不适用于自动生成的列
- android - React-Native:致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足
- go - Golang 本地导入
- css - 覆盖 HTML Style="" 元素
- three.js - Cannon.js 锁定两个重叠物体的约束而不会爆炸