c# - 条件一致时如何停止变换位置?
问题描述
我需要有人帮助我处理 Unity3d 中的 transform.position。当按下 M 键时,我试图停止 tranform.position。我尝试使用下面提到的代码,但它仍然以相同的速度移动。
public class Scroll : MonoBehaviour
{
private void FixedUpdate()
{
if (PlayerController.isDead) return;
if (Input.GetKey(KeyCode.M))
{
transform.position += PlayerController.player.transform.forward * -20f * Time.deltaTime;
}
else
{
transform.position += PlayerController.player.transform.forward * -5f * Time.deltaTime;
}
if (PlayerController.currentPlatform == null) return;
if (PlayerController.currentPlatform.tag == "stairsUp")
this.transform.Translate(0, -0.06f, 0);
if (PlayerController.currentPlatform.tag == "stairsDown")
this.transform.Translate(0, 0.06f, 0);
}
}
在正常情况下,transform.position 正在工作,但是当我按下 M 键时,它应该会减慢速度,就像它现在看起来应该停止一样。我认为 Else 条件运行良好。
解决方案
确保您没有任何其他干扰代码并尝试此操作(仅在您的更新 (FixedUpdate) 方法中使用此方法来阻止您的变换移动。
if (Input.GetKey(KeyCode.M))
return;
您应该可以使用Input.GetKey
in FixedUpdate
,但是对于Input.GetKeyDown
/Input.GetKeyDown
我建议使用Update
以确保不会丢失任何事件。
如果这不起作用,请尝试将其添加到场景中的立方体(或视觉对象)中。这肯定会在您按 M 时移动并停止。
using UnityEngine;
public class MoveTest : MonoBehaviour
{
private void FixedUpdate()
{
if (Input.GetKey(KeyCode.M))
return;
transform.position += Vector3.forward * -5f * Time.deltaTime;
}
}
---更新帖子之前的旧答案-
你应该GetKey
改用
当用户按住 name 标识的键时返回 true。 https://docs.unity3d.com/ScriptReference/Input.GetKey.html
您正在使用GetKeyDown
它仅在按下键的帧期间返回 true 导致仅减速一帧 ¬
在用户开始按下由名称标识的键的帧期间返回 true。
https://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html
推荐阅读
- android - 此应用程序仅在 WinPE 或 WinRE 下运行,同时在 Android Studio 中探索
- javascript - 通过 javascript 进行表单验证 - 出现错误警报但保存数据
- html - 网格布局拉伸高度以适应内容,但保留其他网格单元高度
- nginx - nginx 无法启动并为 sudo nginx -t 抛出错误
- javascript - 在节点 API 中接收完整日期时间,而不是仅接收日期
- java - 在返回的排序 ArrayList 上使用覆盖的 toString 方法不会考虑换行符
- python-3.x - 为什么即使条件为假也执行行?
- css - Divi 联系表帮助 - 我可以在一侧对齐某些元素而不是默认排序吗?
- flutter - 颤振错误字符串函数()不能分配给“字符串”类型的变量
- javascript - 从响应中仅提取所需的变量 - Angular 7