Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在下一个楼梯中间将球员降落_C#_Visual Studio_Unity3d - Fatal编程技术网

C# 如何在下一个楼梯中间将球员降落

C# 如何在下一个楼梯中间将球员降落,c#,visual-studio,unity3d,C#,Visual Studio,Unity3d,我正在Unity开发一款3D游戏,比如“Ketchapp楼梯”。 我使用“transform.Translate”向后移动楼梯,而不是向前移动球员,我让球员(球)在落地时跳跃。 玩家只能在X轴、Y轴上移动,我已经冻结了玩家的Z坐标,因此它不能通过撞击楼梯边缘向前或向后移动。每当运动员落地时,它就会向后跳。 问题在于球员的落地。 我希望玩家在下一个楼梯的中央着陆,而不管它在X轴上的位置。所以它看起来就像是一次跳跃一个楼梯的距离 这是楼梯脚本 public class Stairmovement :

我正在Unity开发一款3D游戏,比如“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);
    }
}
公共类楼梯移动:单行为{
公众浮标速度;
向量3;
私有void Start()
{
destroyPos=新矢量3(0,-0.5f,-2f);
}
//每帧调用一次更新
无效更新(){
transform.Translate(新矢量3(0,-0.5f,-2f)*Time.deltaTime*速度);
if(变换位置z 1f)
{
myRigidbody.velocity+=Vector3.up*物理.重力.y*(fallMultiplier)*时间.deltaTime;
}
}
专用void OnCollisionEnter(碰撞其他)
{
if(other.transform.tag==“接地”)
{
Debug.Log(“接地”);
接地=正确;
}
}
}

我需要你们的帮助,我希望你们能理解这个问题,如果不能,请告诉我。我会尽量解释得更好。谢谢你的帮助,我将不胜感激

这是一张显示跳跃位置和着陆位置之间差异的图像。[注意:请记住我正在移动楼梯。]
![图像]:

这个想法是你需要利用楼梯的向后移动速度,这样在球在空中的时间内,每一个楼梯只移动“1个楼梯长度”。因此,假设每个楼梯的移动需要1秒,那么球也应该在空中1秒,然后落在楼梯上。

谢谢你的回答。我已经试过了,当我给楼梯的速度值为0.9575时,它会给出期望的结果,但我想提高游戏速度,例如,当玩家达到100分时,移动速度会增加,这将使其回到着陆问题。有没有办法减少球员的空中时间?是的,你可以降低跳跃速度或增加下降倍增,或者两者兼而有之。
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;
    }
}