如何将玩家降落在下一个楼梯的中间

时间:2018-08-18 11:34:52

标签: c# visual-studio unity3d

我正在Unity中开发3D游戏,例如“ Stairs By Ketchapp”。 我正在向后移动楼梯,而不是通过使用“ transform.Translate”使玩家向前移动,并且我使玩家(这是一个球)在击中地面时就跳起来。 播放器只能在X轴,Y轴上移动,而我已经冻结了播放器的Z坐标,因此它无法通过撞到楼梯的边缘向前或向后移动。每当玩家撞到地面时,它都会跳回去。 问题在于播放器的着陆。 我希望玩家无论其在X轴上的位置如何都可以直接降落在下一个楼梯的中间。这样看起来就像它跳了一步就走了一段楼梯。

这是楼梯脚本

public class Stairmovement : MonoBehaviour {
public float speed;

Vector3 destroyPos;
private void Start()
{
    destroyPos = new Vector3(0, -0.5f, -2f);
}

// Update is called once per frame
void Update () {
    transform.Translate(new Vector3(0, -0.5f, -2f) * Time.deltaTime * speed);


    if(transform.position.z <= destroyPos.z)
    {
        //transform.position = new Vector3(0, 4f, 16);
        transform.position = new Vector3(0, transform.position.y + 4.5f, transform.position.z + 18f);
    }
}

}

这是我的播放器脚本

public class Player : MonoBehaviour {

private Rigidbody myRigidbody;

public bool grounded;

public float jumpSpeed;
public float forwardSpeed;
public float fallMultiplier;

// Use this for initialization
void Start () {

    myRigidbody = GetComponent<Rigidbody>();
}

// Update is called once per frame
void Update () {

    if (grounded)
    {
        myRigidbody.velocity = new Vector3(myRigidbody.velocity.x, jumpSpeed, forwardSpeed);
        grounded = false;
    }
    if (this.gameObject.transform.position.y > 1f)
    {
        myRigidbody.velocity += Vector3.up * Physics.gravity.y * (fallMultiplier) * Time.deltaTime;
    }



}

private void OnCollisionEnter(Collision other)
{
    if (other.transform.tag == "Ground")
    {
        Debug.Log("Grounded");
        grounded = true;
    }
}

}

我需要你们的帮助,希望你们能理解这个问题,如果没有,请告诉我。我会尽力解释。谢谢您的帮助。

这是显示跳跃位置和着陆位置之间差异的图像。 [注意:请记住我在上楼梯。]   ![图片]:https://i.stack.imgur.com/VW9FK.png

1 个答案:

答案 0 :(得分:0)

这个想法是,您需要按照楼梯向后移动的速度进行运动,以使每个楼梯在球飞行期间都只能移动“ 1个楼梯长度”。因此,可以说,如果每个楼梯的运动花费1秒,那么球也应该悬空1秒并降落在楼梯上。