C# 具有基本运动的Unity2D字符口吃

C# 具有基本运动的Unity2D字符口吃,c#,unity3d,C#,Unity3d,我有下面的角色移动:如果你按下空格键,角色就会上升。如果不按空格键,字符将向下移动 我正在尝试添加一些边界,这样角色就不能超出区域。然而,当角色到达顶端时,我有一些口吃。正确的方法是什么 我已经尝试在FixedUpdate上添加逻辑,但没有解决它 这就是正在发生的事情: 代码如下: private bool aboveSky = false; private bool belowGround = false; private float sky = -8f; private float gro

我有下面的角色移动:如果你按下空格键,角色就会上升。如果不按空格键,字符将向下移动

我正在尝试添加一些边界,这样角色就不能超出区域。然而,当角色到达顶端时,我有一些口吃。正确的方法是什么

我已经尝试在FixedUpdate上添加逻辑,但没有解决它

这就是正在发生的事情:

代码如下:

private bool aboveSky = false;
private bool belowGround = false;

private float sky = -8f;
private float ground = -16.5f;

void Update () {
    float positionY = transform.position.y;
    aboveSky = positionY >= sky;
    belowGround = positionY <= ground;
    
    if (Input.GetKey(KeyCode.Space) && !aboveSky)
    {
        transform.Translate(-10f * Time.deltaTime, 0f, 0f);
    }
    else if (!belowGround)
    {
        transform.Translate(10f * Time.deltaTime, 0f, 0f);
    }
}
private bool oversky=false;
私有地下布尔=假;
私人浮动天空=-8f;
私人浮动地面=-16.5f;
无效更新(){
浮动位置y=变换位置y;
天空上方=位置Y>=天空;

belowGround=positionY当您接近阈值时,它会抖动,然后不断超过阈值,然后下降并循环。设置值后尝试钳制该值。钳制该值会使其平滑

void Update()
{
    if(Input.GetKey(KeyCode.Space))
    {
        transform.Translate(0f, 10f * Time.deltaTime, 0f);
    }
    else
    {
        transform.Translate(0f, -10f * Time.deltaTime, 0f);
    }

    transform.position = new Vector3(transform.position.x, Mathf.Clamp(transform.position.y, ground, sky));
}

我也不确定当你使用
Translate
方法的x组件时,你是如何在y轴上移动的。你的对象是以一种奇怪的方式旋转的吗?因为我不确定你的对象的方向,你可能需要调整上面的片段来满足你的需要。

我相信这是因为它是一个默认的三角形精灵,旋转了90天z轴上的出口,我猜它是在局部x-y轴而不是全局轴上移动的?@SwamiGallardo会这样做的。因为你的x轴已经变成了y轴,你可以调整代码来工作,但是我建议你在不旋转的情况下获得一个新的资产,或者使用
transform.up
来获得相对向上的位置。顺便说一下,Mathf.Clamp是正是我想要的。非常感谢!
transform.position=new Vector3(transform.position.x,Mathf.Clamp(transform.position.y,ground,sky));
我会试试这些,非常感谢您的帮助。