首页 > 解决方案 > 改变 Transform.Position.Y

问题描述

-150我有一个游戏对象,每次用户按下向下箭头时,我都想在其 Y 轴上移动它,以便模仿它向下移动。这是我的代码:

public GameObject groupHolder;
public float groupHolderY = 100f;
public Vector3 groupPos;

...

if(Input.GetKeyDown("down"))
    {

        //groupHolder.transform.position = new Vector3(transform.position.x, 20, transform.position.z);

        groupPos = groupHolder.transform.position;
        float newX = groupHolder.transform.position.x;
        float newY = groupHolder.transform.position.y - 150f;
        float newZ = groupHolder.transform.position.z;

        groupHolder.transform.position = new Vector3(newX, newY, newZ);

    }

当我按下向下箭头键时,我的游戏对象会从我的屏幕上消失。我检查了检查器,它的 Y 轴现在是19097. 如果我尝试-1f将 Y 轴更改为27然后更改为155.

到底是怎么回事?150每次按下向下键时,我只想从其 Y 轴中减去 a :

Y=0 > (向下键按下) > Y=-150 >(向下键按下) > Y=-300 > (向下键按下) > Y=-450

我怎样才能实现这样的目标?谢谢!

顺便说一句,我正在开发 2D 游戏。

标签: c#unity3d

解决方案


乘以deltaTime

这是因为如果您每帧检查一个 keydown 事件,每秒运行 30-60 帧,按下一个键一秒钟将连续应用该转换 30-60 次。

public GameObject groupHolder;
public float groupHolderY = 100f;
public Vector3 groupPos;

...

if(Input.GetKeyDown("down"))
{

    //groupHolder.transform.position = new Vector3(transform.position.x, 20, transform.position.z);

    groupPos = groupHolder.transform.position;
    float newX = groupHolder.transform.position.x;
    float newY = groupHolder.transform.position.y - (150f * Time.deltaTime);
    float newZ = groupHolder.transform.position.z;

    groupHolder.transform.position = new Vector3(newX, newY, newZ);

}

但是,当按键被按下时,上面会进行平滑的移动。如果您希望每次点击一个动作,您需要像这样创建一个布尔值:

public GameObject groupHolder;
public float groupHolderY = 100f;
public Vector3 groupPos;
protected bool moved = false;

...

if(Input.GetKeyUp("down"))
    moved = false;

if(Input.GetKeyDown("down") && !moved)
{
    moved = true;
    //groupHolder.transform.position = new Vector3(transform.position.x, 20, transform.position.z);

    groupPos = groupHolder.transform.position;
    float newX = groupHolder.transform.position.x;
    float newY = groupHolder.transform.position.y - 150f;
    float newZ = groupHolder.transform.position.z;

    groupHolder.transform.position = new Vector3(newX, newY, newZ);

}

推荐阅读