首页 > 解决方案 > 条件一致时如何停止变换位置?

问题描述

我需要有人帮助我处理 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 条件运行良好。

标签: c#unity3d

解决方案


确保您没有任何其他干扰代码并尝试此操作(仅在您的更新 (FixedUpdate) 方法中使用此方法来阻止您的变换移动。

if (Input.GetKey(KeyCode.M))
  return;

您应该可以使用Input.GetKeyin 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


推荐阅读