c# - 使物体向一个方向滑动
问题描述
我想让我的刚体对象向右或向左滑动。
例如,如果他在 0 X,他将向一个方向滑动 1,然后在该方向停止并停止。
通过添加一个力,物体会继续向那个方向移动,我希望物体移动,然后停止。
编辑 这是我尝试过的
void Update() {
if (Input.GetKeyDown("d") && !isMoving) {
StartCoroutine(MoveToPos(Vector3.right));
}
if (Input.GetKeyDown("a") && !isMoving) {
StartCoroutine(MoveToPos(Vector3.left));
}
}
public IEnumerator MoveToPos(Vector3 direction) {
isMoving = true;
var t = 0f;
var startPosition = transform.position;
var value = direction == Vector3.right? 1 : -1;
while (t < 1f) {
t += 0.05f;
var endPosition = transform.position;
endPosition.x = startPosition.x + value * t;
transform.position = Vector3.Lerp(transform.position, endPosition, t);
Debug.Log(player.position);
yield return null;
}
isMoving = false;
}
但遗憾的是它的动画非常难看,对象在不久之后就卡入最终位置,看起来不像对象滑动然后停在那里。就像没有加速和减速一样。
编辑 2
我尝试调整值并进行减速运动。有点工作,但我想它仍然需要改进。
public IEnumerator MoveToPos(Vector3 direction) {
isMoving = true;
var t = 0.0;
var startPosition = transform.position;
var value = direction == Vector3.right ? 1 : -1;
while (t < 1) {
if (t < 0.5) t += 0.1;
else t += 0.03125;
Debug.Log(t);
var endPosition = transform.position;
endPosition.x = startPosition.x + value * (float)t;
transform.position = Vector3.Lerp(transform.position, endPosition, (float)t);
yield return null;
}
isMoving = false;
}
我猜调整加速度和减速度的值会使动画更流畅。
解决方案
简单的方法是这样的:
void Update()
{
if(Input.GetKeyDown(KeyCode.A))
transform.Translate(Vector3.right * 1);
}
作为“A Key”你有条件移动对象,并改变Vector3.right
对应的方向(左,上,下......)
但我会建议使用 Lerp 函数给它更逼真的运动: https ://docs.unity3d.com/ScriptReference/Vector3.Lerp.html
推荐阅读
- google-cloud-storage - 如何使视频只能从特定域播放
- python - 告诉 f2py 跳过一个函数
- java - 问题是 Maven 安装 - 找不到符号客户端
- go - 有没有什么简单的方法可以找出一个结构的实例需要多少内存**包括**它指向的东西的大小?
- java - 在 intellij 中安装 Java maven 问题
- php - 模式未在 ajax 响应中关闭
- python - 错误:命令“python setup.py egg_info”失败
- botframework - 如果输入的字符少于 6 个,则提示用户输入超过 6 个字符
- python - 如何在基于 paraview 的 python 脚本中显示 vtkUnstructuredGrid?
- java - 来自与 Apache Camel 交换的具有相同路由密钥的多个队列